我创建了一个包含标题,侧边栏和页脚的Display对象:
class Display {
protected $framework;
public $mysql;
public function __construct() {
$this->mysql = new MySQL();
$this->framework .= $this->header();
$this->framework .= $this->body();
$this->framework .= $this->sidebar();
$this->framework .= $this->footer();
}
private function header (){ /* blah */ }
private function body (){ }
private function sidebar (){ /* blah */ }
private function footer (){ /* blah */ }
public function displayPage(){
print $this->framework;
}
}
Run Code Online (Sandbox Code Playgroud)
在每个页面上,我创建了一个扩展Display对象的对象,其中包含body的代码:
class IndexPHP extends Display {
public function body(){
$this->user = new User();
return '<div class="body">Hello ' . $this->user->getName() . '</div>';
}
}
$page = new IndexPHP();
$page->displayPage();
Run Code Online (Sandbox Code Playgroud)
我是否通过将对象嵌套太多来创建问题?例如,在User对象中,如何访问已启动的MySQL对象?
class User {
protected $name;
public function __construct() {
$this->id = /* MySQL object query here */
}
}
Run Code Online (Sandbox Code Playgroud)
你给出的方法的问题是你没有遵循任何形式的"权力分立"原则.您的Display对象中包含一个数据库,以及如何连接它的逻辑; 这可能不是最好的方法("上帝的对象").遵循MVC(模型 - 视图 - 控制器)原则可能是一个更好的主意,其中您有一个类知道您的模型(数据库),另一个知道如何将模型转换为将呈现的对象(控制器) ,第三个实际显示数据的所有CSS优点(视图,通常只是一个PHP模板文件).
我建议你看看现有的MVC框架 - 我使用的是QCubed(http://qcu.be),还有其他的 - Symfony,Zend,CakePHP.它们都为您提供了一种干净利落地分离代码的好方法,最终实现了可维护性.