从其他课程中检索数据,同时延长
首先,我对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()
。