我在这里只有一个简单的问题......我正在为我的网站开发一个论坛应用程序,在更新我使用的一些旧方法时(我的旧代码很可怕)我遇到了 - 不是第一个时间 - OOP设备。
我的系统使用了很多类,并且一遍又一遍地为它们重新定义相同的函数,所以我决定创建一个具有该功能的基类。
我一直在尝试在基类上使用require()
,然后将类扩展出来......
<?php
require(//path to base class);
class User extends BaseClass {
// code
}
?>
但是我不知道如何检查它是否存在,并且似乎没有继承基类的唯一函数...
public function __get($what) {
if(property_exists($this, $what)) {
return $this->{$what};
} else {
return null;
}
}
因为当我尝试从User类中检索变量(例如$user->Username
)时,它返回NULL
。该变量在类中标记为private
,但在我尝试继承之前不是问题。
答案 0 :(得分:1)
听起来您想要在父类中获取变量但不想使用getter方法这样做。标记这些变量protected
确实允许您的子类访问这些属性,但是如果您希望基类在设置/获取之前强制执行处理,则标记属性protected
将不会删除它。
在您的情况下,您似乎将变量protected
标记为变通方法。但是,您仍然可以在基类中使用private
变量,并允许在子类中访问它们,如下所示:
class BaseClass
{
private $strValue = "We the people....";
public function __get($what)
{
if(isset($this->{$what})) {
return $this->{$what};
}
return null;
}
}
class ChildClass extends BaseClass
{
private $intValue = 255;
public function __get($what)
{
if(isset($this->{$what})) {
return $this->{$what};
} else if(parent::__get($what) != null) {
return parent::__get($what);
}
return null;
}
}
//Try it out
$child = new ChildClass();
var_dump($child->strValue); //"We the people...."
var_dump($child->intValue); //255
在此示例中,BaseClass
使用__get()
魔术方法查找自己的属性,ChildClass
覆盖它以执行相同操作。在ChildClass
中,如果找不到请求的属性,则转移到父版本。
只要您不覆盖您的属性,您就可以使用私有变量并访问它们,就像它们在您的类范围之外是公开的一样。
答案 1 :(得分:0)
只是使用 class_exists()以确保您的班级在那里。