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) でインスタンス化されます。

public static function instanceiate($record) {

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

何か案は?

4

2 に答える 2

0

@Tomが指摘したように、答えはすでに通知にあります。注意深く読んでください:

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

エラーメッセージは、未定義のプロパティ未定義のプロパティ: Photo::$photoについて話しているため、エラーが発生します。$i->photo() への呼び出しは、ラムダ呼び出しとして扱われるようです。http://www.ibm.com/developerworks/opensource/library/os-php-5.3new2/

于 2013-11-09T22:36:02.543 に答える
0

$this->photo points to a class variable (called property) which doesn't exist, try this:

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;
    }
}

As for the funny part we need to have a look at your parent class you probably are overwritting a method or something.

于 2013-11-09T22:09:34.467 に答える