0

我对无法解释的 PHP 行为感到困惑:

我正在使用的课程:

Class Photo extends DatabaseObject {
    public function photo(){
            return SITE_DOMAIN."/files/".$this->upload_dir."/".$this->photo;
    }
}

从 html 调用:

$i->photo();

PHP 给了我以下通知,但除此之外我没有收到任何错误:

Notice: Undefined property: Photo::$photo in C:\wamp\www\photo_gallery\includes\objects\photo.php on line 33

有趣的是,当我将函数重命名为 时photo_path(),我没有收到通知!

对象变量在父类(DatabaseObject)中实例化:

公共静态函数实例化($record){

    $class_name = get_called_class();
    $object = new $class_name;
    foreach ($record as $key => $value) {
            $object->$key = $value;
    }
    return $object;
}

有任何想法吗?

4

2 回答 2

0

$this->photo 指向一个不存在的类变量(称为属性),试试这个:

Class Photo extends DatabaseObject {
    private $photo;
    public function __construct()
    {
       $this->photo = 'test.png';
    }
    public function photo(){
            return SITE_DOMAIN."/files/".$this->upload_dir."/".$this->photo;
    }
}

至于有趣的部分,我们需要看看你的父类,你可能正在覆盖一个方法或其他东西。

于 2013-11-09T22:09:34.467 回答
0

正如@Tom 指出的那样,答案已经在通知中,请仔细阅读:

Notice: Undefined property: Photo::$photo in C:\wamp\www\photo_gallery\includes\objects\photo.php on line 33

错误消息涉及未定义的属性Undefined property: Photo::$photo,从而导致错误。您对 $i->photo() 的调用似乎被视为 Lambada 调用。http://www.ibm.com/developerworks/opensource/library/os-php-5.3new2/

于 2013-11-09T22:36:02.543 回答