gpt4 book ai didi

php - 使用 mysql_fetch_assoc() 在 PHP 中构建继承对象

转载 作者:行者123 更新时间:2023-11-29 01:44:59 26 4
gpt4 key购买 nike

我最近开始使用 mysql_fetch_object() 在我个人开发的 CMS 中循环访问对象。

我过去常常使用 while($row = mysql_fetch_assoc($rows)) { ... }

循环

然后我将创建一个对象并在循环中为其分配值:

$object = new Object(); 
$object->set_by_row($row); // Does what it says

我真正想做的是使用:

while ($object = mysql_fetch_object($rows, 'self')) { ... }

我也试过使用:

while ($image = mysql_fetch_object($rows, 'Image')) { ... } // Actual class name

可是我做不到!我的大部分类都是名为 Identifiable 的父类的子类,它是适用于我的所有子类的变量和函数的集合。它也存储每个对象的 ID - 所以当我使用 mysql_fetch_assoc() 时,只设置该类中设置的变量,而不设置关联的父变量。

有人知道使用 mysql_fetch_object 设置对象(包括它们的继承变量)的方法吗?

注意:这都在子类的静态函数中。

这是分配行之后的 var_dump:

object(Image)#5 (16) {
["title":"Image":private]=> string(0) ""
["location":"Image":private]=> string(0) ""
["description":"Image":private]=> string(0) ""
["file_name":"Image":private]=> string(14) "0_IMG_0984.JPG"
["original_x":"Image":private]=> string(4) "2592"
["original_y":"Image":private]=> string(4) "1944"
["type":"Image":private]=> string(3) "jpg"
["id"]=> string(1) "1"
["added_by"]=> string(1) "1"
["updated_by"]=> string(1) "0"
(...) ["deleted_by"]=> string(1) "0" ["deleted"]=> string(1) "0" ["published"]=> string(1) "0" ["datetime_added"]=> string(19) "2012-02-25 22:51:08" ["datetime_updated"]=> string(19) "0000-00-00 00:00:00" ["datetime_deleted"]=> string(19) "0000-00-00 00:00:00"
}

如您所见,ID 在那里,但我的 getter 方法在父类中,并且不返回任何内容。

Identifiable类中的getter方法在这里:

function get_id()
{
return $this->id;
}

重要更新:

设置对象后:while ($image = mysql_fetch_object($rows, 'Image')) { ... } 我尝试调用 echo $image->get_id( ); 并且工作正常!

但是,我的问题仍然存在:我目前在循环 (get_interface_preview()) 中调用一个函数,该函数实际上包含对 $this->get_id() 的调用并且仍然没有任何返回。

彻底检修!

我的问题是:

function get_interface_preview()
{
echo $this->get_id();
return "<a href='?a=edit&id='".$this->get_id()."'><img src='".IMAGE_PATH."library/admin_thumb/".$this->file_name."'></a>";
}

它很好地呼应了 ID,但没有将 ID 添加到标记中。我觉得我不知何故犯了一个巨大的菜鸟错误?!

已修复!对不起大家,这是一个错误的地方!很抱歉!

最佳答案

你必须给它一个类名,'self' 不是类名。使用 get_class($this)获取当前对象的类名,所以:

while ($object = mysql_fetch_object($rows, get_class($this))) { ... }

或者,在静态方法中,使用 get_called_class():

while ($object = mysql_fetch_object($rows, get_called_class())) { ... }

另见 this PHP documentation contribution on a self-contained Singleton base class

关于php - 使用 mysql_fetch_assoc() 在 PHP 中构建继承对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449316/

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