2016-08-11 56 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