Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一些经常需要的数据的静态上下文?最佳实践?_Php_Oop_Static_Coding Style - Fatal编程技术网

Php 一些经常需要的数据的静态上下文?最佳实践?

Php 一些经常需要的数据的静态上下文?最佳实践?,php,oop,static,coding-style,Php,Oop,Static,Coding Style,我已经用PHP编写了一些Web框架。有人建议我不要在静态环境中做任何事情。但我对此有一些疑问 想象一下下面的类: class Image extends HtmlControl { public $src; public $alt; function getDetailPath() { return 'Common/Image'; } } 没什么特别的。它是一个用Html呈现图像的类。我的基类当前有以下实现: abstract class

我已经用PHP编写了一些Web框架。有人建议我不要在静态环境中做任何事情。但我对此有一些疑问

想象一下下面的类:

class Image extends HtmlControl {
    public $src;
    public $alt;
    function getDetailPath()
    {
        return 'Common/Image';
    }
}
没什么特别的。它是一个用Html呈现图像的类。我的基类当前有以下实现:

abstract class HtmlControl {
    private $template;

    abstract function getDetailPath();

    public function __construct(ViewInformation $viewInformation) {
        $this->template = 'foo/bar/' . $viewInformation->getEndpoint() . '/' . $this->getDetailPath() . '.php';
    }

    public function render() {
        $output = '';
        //Load template end fill $output
        return $output;
    }
}
也没什么特别的。它基本上将端点类型(类似于前端或后端)解析为相应的模板文件,并提供render方法以获得输出

问题是,每次html控件的每个部分都需要提供
$viewInformation
参数

$img = new Image($this->_info);
在我看来,像这样的事情会更好:

$img = new Image();
因此,我必须在静态上下文中保存状态,即应该使用哪个端点。类似这样的内容(请注意
Request::getEndpoint()
部分):


我的问题:在这种情况下,在静态上下文中使用端点可以吗?如果没有,我当前的实现是否可以改进?

为什么不在执行
->render()时传递上下文?另外,我认为如果你要深入了解这种细节,也许你更愿意使用
DOMDocument
:)静态内容的坏处本质上是隐藏的依赖关系;其次是与测试相关的问题。谢谢@Jack,这是一个很好的观点。我会改变这个。你给了我一个很小但很好的回答。这对我真的很有帮助。因为我在“$container”中加载“$img”,所以我的$container可以处理这个问题。难道不是因为树木的缘故,森林才消失了吗:)
abstract class HtmlControl {
    private $template;
    abstract function getDetailPath();

    public function render() {
        $template =  'foo/bar/' . Request::getEndpoint() . '/' . $this->getDetailPath() . '.php';
        $output = '';
        //Load template end fill $output
        return $output;
    }
}