• PHP шаблоны: Позднее статистическое связывание(static)

    PHPКомментариев нет

    Задача: «Для каждого класса требуется установить свой тип(группу), при этом они должны иметь общие методы, например инициализация.»

    Решение:

    создаем абстрактный класс

    #
    abstract class DomainObject
    {
        private $group;
    
        public function __construct()
        {
            $this->group = static::getGroup();
        }
    
        public static function create()
        {
            return new static();
        }
    
        static function getGroup()
        {
            return "default";
        }
    }

    static — указывает на контекст класса который инициализировал вызов абстрактного класса. А так же вызывает статические методы класса.  Static похож по своей работе на parent и self.

    Дополнительно по static:

     

    Реализуем несколько классов, которые будут наследовать DomainObject

    #
    class User extends DomainObject
    {
    }
    
    class Document extends DomainObject
    {
        static function getGroup()
        {
            return "document";
        }
    }
    
    class SpreadSheet extends Document
    {
    }

    Создадим экземпляры наших классов и посмотрим что получилось в итоге

    #
    print_r(User::create());
    print_r(Document::create());
    print_r(SpreadSheet::create());
    #
    // результат 
    User Object ( [group:DomainObject:private] => default ) 
    Document Object ( [group:DomainObject:private] => document ) 
    SpreadSheet Object ( [group:DomainObject:private] => document )

     


    Будь первым кто прокомментирует статью.

    Добавить комментарий

    Войти с помощью: