【发布时间】:2013-01-05 15:41:08
【问题描述】:
刚从 OOP 开始。 .无论如何不确定我是否理解正确但代码不应该因为函数__set()而改变$attribute的值吗?
<?php
class aclass
{
protected $attribute; //edited from public to protected
public function __get ($name)
{
return $this->$name;
}
public function __set ($name, $value)
{
if($name == "foo")
{
$this->$name = $value;
}
}
}
$a = new aclass();
$a->attribute = "bar";
echo $a->attribute;
?>
当我运行它时,会显示一条错误消息:
“致命错误:无法访问受保护的属性 aclass::$attribute . . . . . 在第 16 行” 第 16 行是“echo $a->attribute” - 其他帖子说该属性必须设置为 PROTECTED 但它不起作用。我正在使用 PHP 5.4.3 - 有什么想法吗?
【问题讨论】:
-
您应该检查其他问题,例如stackoverflow.com/questions/4713680/…
-
这个问题已经被问过很多次了,请在打开问题之前进行长时间的搜索。
-
如果您刚开始使用 OOP,我建议您将
__get和__set留待以后使用;在第一种情况下,它们很有用但不是必须学习的;掌握主要概念,稍后再回到魔术方法。有些人不喜欢它们并坚持编写名为getPropname()和setPropname()的单独方法;这可能是一种更简单的开始方式。此外,即将发布的 PHP 5.5 版将提供更多用于定义属性的语法选项,这意味着对魔术方法的需求将大大减少。 -
对不起,我正在阅读的书谈到了它,它不是很清楚,它使用了很多,所以我只需要理解它。当我阅读 php 手册时,我更加迷失了。我发布了一个关于它的问题,因为我在搜索时得到的结果对于我正在寻找的内容来说有点太深了。 @Deele 的链接是一个帮助谢谢。也感谢@SDC 的提示!
-
这与 OOP 无关。它是关于基本语言功能和可见性的。
标签: php visibility