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 )

 


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

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

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