Require()';正在初始化要在继承中使用的类


Require()'ing a Class to use in 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,但在我尝试进行继承之前,这不是问题。

听起来你想在父类中查找变量,但不想使用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中,如果它找不到请求的属性,那么它会转移到父级的版本。

只要你不重写你的属性,你就可以在整个过程中使用私有变量,并访问它们,就好像它们在类范围之外是公共的一样。

只需使用class_exists()以确保您的类在那里。