要求()使用继承中的类

时间:2014-09-04 16:52:40

标签: php class object inheritance

我在这里只有一个简单的问题......我正在为我的网站开发一个论坛应用程序,在更新我使用的一些旧方法时(我的旧代码很可怕)我遇到了 - 不是第一个时间 - 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,但在我尝试继承之前不是问题。

2 个答案:

答案 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()以确保您的班级在那里。