我正在尝试更多地简化我的PHP代码,我还没有找到我的团队成员之一正在使用的这种方法的答案。我也没有在网上的任何地方看到过这种情况。
以下是我正在处理的Web应用程序中的代码示例。
<?php
class ArticlesHandler {
public function __construct() {
require 'Articles.php';
$articles = new Articles;
}
}
?>
在另一个类中初始化一个类是否合适?
对我来说,这似乎不是init类一起工作的正确标准。
答案 0 :(得分:2)
是和否。它有效,但这个特殊的代码可能会导致许多问题。
您应该使用require_once
而不是require
来避免两次包含同一文件的错误。因为这里的代码将使您的应用程序完全停止:
new ArticlesHandler;
new ArticlesHandler;
这会创建与Articles
类的硬耦合。您应该可能使用dependency injection并将Article
的实例传递给ArticlesHandler
的构造函数。请参阅How Not To Kill Your Testability Using Statics。
答案 1 :(得分:1)
是的,在构造函数中调用构造函数是正确和正常的。没有什么奇怪/不好的。
答案 2 :(得分:1)
这就是我通常做的事情。
class Repository {
protected $_models = array();
public function getModel($model, array $params = array()){
require_once $model.'.php'; //Replace this with an autoloader
if(empty($this->_models[$model])){
if(!empty($params)){
$this->_models[$model] = new $model($params);
} else {
$this->_models[$model] = new $model();
}
}
return $this->_models[$model];
}
}
并像这样打电话给另一个班级。
class ArticlesHandler extends Repository {
public function __construct() {
$articles = $this->getModel('Articles');
}
}
答案 3 :(得分:0)
如果您想在Articles
Articles
课程,可以延长ArticlesHandler
课程