2014-10-30 35 views
0
<?php 

error_reporting(E_ALL); 
ini_set('display_errors', true); 

class Person { 

    private $data; 

    public function __construct($data) { 
     $this->data = $data; 
    } 

    public function __get($prop) { 
     return $this->data[$prop]; 
    } 
} 

$data = array('name' => 'Mark'); 
$person = new Person($data); 
echo $person->get('name'); 

?> 

不應該工作嗎?我得到了Fatal error: Call to undefined method Person::get(),但我不知道爲什麼。根據magic方法的文檔,這段代碼應該可以正常工作。爲什麼我的getter不工作?

http://php.net/manual/en/language.oop5.overloading.php#object.get

+0

有沒有線在手動中說$ person-> get()調用__get()方法:)另外,必須調用get()會使「魔法方法」定義變得毫無意義 – 2014-10-30 11:27:29

回答

4

嘗試

echo $person->name; 

代替。

這就是__get魔術方法的:-)

以防萬一的魔力,你可以定義

public function __call($name, $arguments) { 
    echo $name; 
    // do something useful 
} 

,然後使魔電話這樣的:

$person->someMethod(); // echoes "someMethod" 
+0

我實際上意識到我是多麼愚蠢,提出了這個問題......我最初認爲正確的調用是'$ person-> getName()',當那個不起作用時,我得到了所有的discombobulated ...無論如何,我必須等待11分鐘才能接受你的回答,但是謝謝。 – 2014-10-30 11:27:42

+0

當然,更新我的答案一點點,以添加__call魔術方法的一些解釋。 – 2014-10-30 11:29:04