setters不会获得新的getter值

时间:2016-08-11 14:29:11

标签: php oop

我正在尝试关注脚本,但它似乎没有获取新的值处理bt __set我正在尝试通读this文章来掌握OOP,直到magento。是否缺少某些东西?

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();

2 个答案:

答案 0 :(得分:4)

  1. 您尝试将该属性设置为" Angela"但请使用getProperty()方法代替setProperty()
  2. 您的属性名称以两个下划线(__)开头,但您调用该方法(即代替$obj->setProperty()您应使用$obj->__setProperty()或更改方法名称)
  3. 您的setProperty()方法为private,这意味着无法在课程外访问它。如果您希望在对象级别访问该方法,则该方法必须为public
  4. 将您的代码更改为:

    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

答案 1 :(得分:0)

此处错误$obj->getProperty("Angela");您需要使用setProperty

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

,您的功能为public而不是private

我认为你想要__set,这里是PHP docs的例子:

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