2012-04-13 10 views
0

我正在閱讀本電子書,從PHP5和Mysql開始:從新手到專業,在OOP部分,我試着用這個示例代碼來重現我的相同結果電腦vs這本書。有這個令人費解的PHP 5 OOP查詢

class Staff 
{ 
var $name; 
var $city; 
protected $wage; 
    function __get($propName) 
    { 
     echo "__get called!<br />"; 
     $vars = array("name","city"); 
     if (in_array($propName, $vars)) 
     { 
     return $this->$propName; 
     } else { 
     return "No such variable!"; 
     } 
    } 
} 
$employee = new Staff(); 
$employee->name = "Mario"; 
echo $employee->name."<br />"; 
echo $employee->age; 

在這本書中 - 結果顯示爲:

Mario 
__get called! 
No such variable! 

但我的電腦上:

Mario 

只有第一線。另兩條線被「忽略」。這是爲什麼?!?!

在我的php.ini中是否有一些配置設置需要修改才能使其工作?有人可以幫忙解釋嗎?

+0

最後一行應該是'echo $ employee-> wage;'? – bjudson 2012-04-13 03:38:22

+1

這是你的書嗎? http://www.amazon.com/Beginning-PHP-MySQL-Novice-Professional/dp/1893115518它是8歲,顯然使用PHP4。 – 2012-04-13 03:40:56

+0

@joeframbach:我的書和這個亞馬遜鏈接具有相同的標題。我的書2006年版。它已經6歲了。 – awongCM 2012-04-13 03:56:47

回答

0

好的我想我找到了答案。根據php文檔

所有重載方法必須定義爲公共。

所以使得魔術方法公開

public function __get() {} 
1

__get()只會被要求非公開不存在的性能。現在,有一個名爲name的屬性,所以你的魔法不會被調用。將var $name更改爲private $name,它將起作用。