gpt4 book ai didi

php 帮助 - 实例化函数

转载 作者:行者123 更新时间:2023-12-04 06:29:33 26 4
gpt4 key购买 nike

以下有什么作用?

public static function find_by_sql($sql="") 
{
global $database;
$result_set = $database->query($sql);
$object_array = array();
while ($row = $database->fetch_array($result_set))
{
// fetch_array=mysql_fetch_array
$object_array[] = self::instantiate($row);
}
return $object_array;
}

private static function instantiate($record)
{
$object = new self;
foreach($record as $attribute=>$value)
{
if($object->has_attribute($attribute))
{
$object->$attribute = $value;
}
}
return $object;
}

private function has_attribute($attribute)
{
return array_key_exists($attribute, $this->attributes());
}

protected function attributes()
{
// return an array of attribute names and their values
$attributes = array();
foreach(self::$db_fields as $field)
{
if(property_exists($this, $field))
{
$attributes[$field] = $this->$field;
}
}
return $attributes;
}

类属性是,
public $id;
public $username;
public $password;
public $first_name;
public $last_name;
public $power;

所以 while 循环遍历每一行,但是 instantiate 是什么?功能呢?以及如何 instantiate优化脚本?

还有, $object = new self 是什么意思?意思是,这是该类的新实例吗?当您返回 $object 时你回什么?

谢谢,丹尼尔。

最佳答案

instantiate函数基于包含的类创建一个新对象(“实例化”只是意味着从某些东西中创建一个实例,在这种情况下,是它所在的类),在这种情况下,函数遍历提供的数组,检查如果它的键被定义为在类中'attributes数组,如果是,则用这些键的值填充对象。

在while循环中,$object_array为每一行填充了包含类的单独实例。

这个对实例化的调用并没有优化脚本(它稍微减慢了它的速度,因为它必须调用函数而不是,例如,只是将行插入数组),但它的原因可能是:1)包装行以一种可以对它们使用对象方法的方式,以及 2) 确保未在类上指定为属性的 SQL 列不会在返回数组的行中公开。

对于 self ,见 What does new self(); mean in PHP? .基本上,是的,$object = new self创建类的一个新实例,因为 self表示当前类。这很方便,因为如果您决定更改类名,则无需更改此引用。

顺便说一句,全局变量是一个问题,因为将全局变量提供给类实例会更合适,以避免名称冲突。

关于php 帮助 - 实例化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5603014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com