作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不明白为什么 __unset()
不起作用。
class myclass {
public $name = array();
public function __set($arraykey, $value){
$this->name[$arraykey] = $value;
}
public function __isset($argu){
return isset($this->name[$argu]);
}
public function __unset($argu){
echo "Working: Unset $this->name[$argu]";
unset($this->name[$argu]);
}
}
$obj = new myclass;
$obj->name = 'Arfan Haider';
var_dump(isset($obj->name));
unset($obj->name);
我读到每当调用 unset()
函数时,都会自动调用魔术方法 __unset()
并取消设置变量。
在上面的代码中我使用了 unset 但它没有调用 __unset()
。为什么?我在理解魔术方法 __unset()
时是否遗漏了什么?
最佳答案
魔术方法 __set
、__get
、__isset
和 __unset
仅在访问 inaccessible 时调用 属性。这意味着私有(private)属性、 protected 属性(在子类外部访问)或尚未创建的属性。
调用内部变量 $_name
而不是 $name
,或者将 $name
设置为 private
或 protected
而不是 public
将解决您的问题。
注意:
您应该只在需要从扩展类访问它们时才使用 protected
属性或函数 - 不要仅仅因为它们而使用它。
关于PHP 魔术方法 __unset() 在调用未设置函数时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16671304/
我不明白为什么 __unset() 不起作用。 class myclass { public $name = array(); public function __set($array
我是一名优秀的程序员,十分优秀!