缩短对其他类别中的属性的调用

时间:2018-05-26 16:52:19

标签: php oop controller twig

我有2个类,第一个是控制器,第二个是加载Twig的类 这工作正常,但我很好奇,如果我能这样做:echo $twig->render('index.html');
也许不同的解决方案在控制器中加载Twig?

Twig课程取自:Include twig loader from external file

Home.php

<?php 
namespace Controllers;

use Helpers\Twig;

class Home {    
    public static function index()
    {
        echo Twig::$twig->render('index.html');
    }
}
?>

Twig.php

<?php 
namespace Helpers;

class Twig {
    public static $twig;

    public static function init() {
        $loader = new \Twig_Loader_Filesystem(__DIR__.'/../views');
        self::$twig = new \Twig_Environment($loader);
    }
}

Twig::init();
?>

1 个答案:

答案 0 :(得分:2)

是的,那里你做错了几件事:

  • 你真的不应该在没有充分理由的情况下将控制器和视图职责结合起来(&#34;为什么&#34;部分有点复杂,你可以稍后阅读它here

  • 你应该停止滥用static关键字 - 这些静态类实际上是&#34;命名空间函数&#34;从php5.3之前的年龄:它不是OOP,它的程序代码

  • 在课程文件的末尾停止使用?>:这不是必需的,它往往导致已经发送了#34;#34;错误

至于主要问题:您不应该访问全局 loader ,而是将模板引擎(在本例中为Twig_Environment)作为依赖项传递。您可以在实践here中看到一个非常简单的示例。

如果您将使用Twig进行模板化,那么初始化整个事物的方法确实不是一种更简化的方法(即使您使用的是程序代码)。整个&#34;太多的东西正在装载&#34;有点废话,因为在生产环境中,你的大部分代码都会在OpCopde缓存中结束(你可以google),而从PHP 5.5开始,简单的类初始化是一个非常便宜的过程。

对于一般的OOP:只需浏览列出的here讲座列表:P

...这最终更像是一个长篇评论