从其他课程中检索数据,同时延长

问题描述:

首先,我对OOP很陌生,我正在苦苦挣扎。我有一个关于我的应用程序和继承的当前设计的问题。从其他课程中检索数据,同时延长

我有开始我所有的核心类引导程序文件,包括他们,这样以后:

$security = new Security; 
$error_handler = new ErrorHandler; 
$application = new Application; 
$mysql = new MySQL; 
$template = new Template; 
$user = new User; 

我第一次加载安全和的ErrorHandler类,因为应用程序类首先需要他们(扔自定义404错误,使GET变量安全等)。现在所有的类都扩展了Application类,但我似乎无法调用任何来自子类或父类的任何类的数据。

我读到我需要首先调用父类的构造函数才能使用任何数据。这不是真正性感和有用的我的眼睛,我真的看不到使用然后延伸

我应该改变设计吗?或者我怎么能使用从一个到另一个班的数据?我已经尝试了作文,但最终成了一场噩梦,因为我根本无法使用任何不同的儿童班的数据。

无论如何,这是一个奇怪的设置。您绝对不应该使用一些引导程序功能来预加载您的类,特别是如果某些类对其他类有有限的依赖关系。最好是这样的:

您的Security和ErrorHandler类应该使用静态方法来允许在不声明类的情况下使用它们的功能,或者应该将它们创建为Application类的类var。

class Security { 
    // can be invoked anywhere using Security::somefunction('blah'); 
    public static somefunction($somevar) { ... } 
} 

OR

require_once('security.php'); 
require_once('errorhandler.php'); 

class Application { 
    public $security; 
    public $errorHandler; 
    public function __construct() { 
     $this->security = new Security; 
     $this->errorHandler = new ErrorHandler; 
    } 
} 

我不知道,当你说你不能从任何类访问数据,你的意思。类应该自然地继承父母声明的任何变量和函数。因此,例如:

require_once('application.php'); 
class User extends Application { 
    public function throwError($message) { 
     return $this->errorHandler->somefunction($message); 
    } 
} 

,而无需用户类中明确宣称$this->errorHandler,这仍然应该工作,为$errorHandler类VAR在应用程序类中声明。

如果您有一个子类,它定义了一个__construct()方法,并且希望调用它父级的方法__construct(),那么子类的__construct()方法必须调用父类的方法。

这就是它在PHP;这就是你必须做的;没有太多的选择。


作为参考,引用本手册的Constructors and Destructors部分:

父构造函数不叫 暗示如果子类定义 构造。为了运行一个 父构造函数,需要在 子构造函数中调用 parent::__construct()