<rmcreative>

RSS

Все заметки с тегами «yii3, PHP, friendly classes»

  1. PHP friendly классы

    5 августа 2020

    Дружественные классы видят как минимум protected-методы друг друга. В PHP реализуются так:

    <?php
     
    abstract class Base
    {
        protected function doit()
        {
            throw new \RuntimeException('Not implemented');
        }
    }
     
    class Closed extends Base
    {
        protected function doit()
        {
            echo 'done!';
        }
    }
     
    class Opener extends Base
    {
        public function execute(Closed $closed)
        {
            $closed->doit();
        }
    }
     
    $closed = new Closed();
    $opener = new Opener();
     
     
    $opener->execute($closed);

    Здесь можно запустить. Если что, это не баг.

    Как это использовать? В Yii 3 мы так закрываем DI-контейнер и диспетчер событий чтобы в рантайме они были только для чтения, но, при этом их можно было сконфигурировать специальными friendly-конфигураторами на этапе инициализации приложения.

    Сделано это чтобы не дать стрелять себе в ногу, в этом плюс. Минус в том, что про такую фичу PHP мало кто знает и это вызывает вопросы:

    10 комментариев