我最近开始在我个人开发的CMS中循环对象时使用mysql_fetch_object()
。
我曾经使用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的父类的子类,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())) { ... }
另请参阅此PHP文档对独立的Singleton基类的贡献
我把撇号放错了地方。随意羞辱我吧!