2014-10-30 39 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