Сокращение вызова на недвижимость в другом классе - PullRequest
0 голосов
/ 26 мая 2018

У меня есть 2 класса, первый - это контроллер, а второй - класс, который загружает Twig.
Это работает нормально, но мне интересно, могу ли я сделать это так: echo $twig->render('index.html');
Может быть по-другомурешение загрузить Twig в контроллер?

Класс веток взят из: Включить загрузчик веток из внешнего файла

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 голосов
/ 26 мая 2018

Да, вы делаете там несколько вещей неправильно:

  • вам действительно не следует совмещать контроллер и просматривать обязанности без веской причины (часть "почему" немного сложна, выможете прочитать об этом здесь позже)

  • вам следует прекратить злоупотреблять ключевым словом static - эти статические классы на самом деле являются старым хаком для "функций пространства имен" из pre php5.3 возраст: это не ООП, это процедурный код

  • прекратить использование ?> в конце файлов классов: это необязательно и приводит к ошибкам «заголовок уже отправлен»

Что касается основной проблемы: вам не нужно обращаться к глобальному загрузчику , а вместо этого передавать шаблонизатор (в данном случае: Twig_Environment) какзависимость.Вы можете увидеть очень упрощенный пример на практике здесь .

Если вы будете использовать Twig для шаблонов, то на самом деле не существует более упрощенного способа инициализации всего этого (даже если вы прибегаете к процедурному коду).И все «загружается слишком много вещей» - своего рода ерунда, так как в производственной среде большая часть вашего кода окажется в кеше OpCopde (вы можете гуглить это), а начиная с PHP 5.5 простая инициализация класса является очень дешевым процессом.

Что касается ООП в целом: просто просмотрите список лекций, перечисленных здесь : P

... это закончилось скорее как подробный комментарий

...