【发布时间】:2013-07-17 14:52:36
【问题描述】:
我正在阅读 W. Jason Gilmore 所著的“Beginning PHP and MYSQL”一书,遇到了对我来说没有意义的部分。这是关于 OOP 中的访问器和修改器的部分。
class Employee
{
var $name;
var $city;
protected $wage;
function __get($propName)
{
echo "__get called!<br />";
$vars = array("name","city");
if (in_array($propName, $vars))
{
return $this->$propName;
}else {
return "No such variable!";
}
}
}
$employee = new Employee();
$employee->name = "Mario";
echo $employee->name."<br />";
echo $employee->age;
这将返回以下内容:
马里奥 __打电话! 没有这样的变量!
我遇到的第一个问题是,当 name 属性设置为“Mario”时,访问器方法没有运行,我做了一些搜索,似乎 __get 仅在从不可访问的属性中读取数据时运行,尽管这在书中从未说明。这就是 __get 方法没有运行的原因吗?
我的第二个问题与“if”语句有关。如果 __get 仅在尝试从不可访问的属性中读取时才真正运行,为什么您会在其中包含一个“if”来检查该属性是否已经在您设置的变量数组中?肯定不会,或者你不会得到“如果”,对吗?
【问题讨论】:
-
这不是答案,而是所有“
”的答案?在此代码中您不需要其中任何一个。 -
@H2ONOCK 我想这只是为了调试目的而格式化输出。
-
@Phas1c an echo("
");会在班级的顶部解决这个问题吗?容易得多。
-
我认为你的书有点过时了,它的
var属性参考;最好找一个更新的教程 -
假设您有许多受保护的属性,并且您正在获取一个在运行时填充更多未知属性的数据库记录。为了保护应该隐藏的那些,您可以使用 __get 来实现该逻辑并只允许访问某些属性。这是我头脑中的一个例子,用于回答“如果在 __get 中我为什么会有”。
标签: php class oop methods properties