2016-08-11 86 views
-4

我正在嘗試下面的腳本,但它似乎沒有拿起處理的新值bt __set我正在嘗試通過this閱讀文章以獲得OOP工作方式,直到magento 。有什麼遺漏嗎?setter將不會獲得新的getters值

class MyClass{ 
public $name = "Mike"; 

     private function __setProperty($newval){ 
      $this->name = $newval; 
     } 

     public function __getProperty(){ 
      return $this->name; 
     } 
    } 
$obj = new MyClass; 

//var_dump($obj); 
echo $obj->name; 
$obj->getProperty("Angela"); 
echo $obj->getProperty(); 
+1

該教程你說你是從學習,明確規定了' setProperty' ...'$ obj = new MyClass; echo $ obj-> getProperty(); //獲取屬性值 $ obj-> setProperty(「我是一個新的屬性值!」); //設置一個新的 echo $ obj-> getProperty(); //再次讀出來顯示更改。您正在使用'getProperty'。您沒有按照該教程*「對T」*。 –

+0

防止聲明以'__'開頭的方法名稱。它們通常被保留用於PHP魔法方法。您在這裏使用的用法與'__set'和'__get'根本沒有關係。 – SOFe

+0

你使用'__'方法很奇怪(和錯誤的'__'前綴方法往往是魔術方法)。二傳手永遠不會被調用(並聲明爲私有)。在任何時候,你實際上設置的財產... –

回答

0

錯誤這裏$obj->getProperty("Angela");你需要使用setProperty

echo $obj->name; 
$obj->setProperty("Angela"); 
echo $obj->getProperty(); 

和你的函數是publicprivate

,我想你想__set,這裏的PHP docs個例:

public function __set($name, $value) 
{ 
    $this->data[$name] = $value; 
} 
+3

漂亮毫無意義的使用魔術方法的屬性被宣佈爲「公共」 –

+0

是的,但在請求他談論'__set',爲什麼他誤解了他混合時' __set'和'__getProperty'而不是'getProperty' – MaximeK

4
  1. 您嘗試將屬性設置爲「Angela」,但使用getProperty()方法而不是setProperty()
  2. 你的屬性名稱前加上兩個下劃線(__),但你不調用方法(即不是$obj->setProperty()你應該使用$obj->__setProperty()或改變方法名)
  3. setProperty()方法是private,這意味着它不能在班級之外訪問。如果您希望在對象級別訪問該方法,則該方法需要爲public

你的代碼更改爲:

class MyClass{ 
    public $name = "Mike"; 

    public function setProperty($newval){ 
     $this->name = $newval; 
    } 

    public function getProperty(){ 
     return $this->name; 
    } 
} 
$obj = new MyClass; 

//var_dump($obj); 
echo $obj->name; 
$obj->setProperty("Angela"); 
echo $obj->getProperty(); 

這將輸出:

MikeAngela