oop — PHP __callStatic как фабрика

поскольку __callStatic был введен в PHP 5.3, это хорошая идея использовать его при создании новых классов вместо метода фабрики?

Например, $user = Model::User() вместо $user = Model::factory('User'), а потом:

public static function __callStatic($name, $arguments)
{
$class_name = 'Model_' . $name;

if( empty($arguments) )
{
return new $class_name();
}
else
{
$reflector = new ReflectionClass($class_name);

return $reflector->newInstanceArgs($arguments);
}
}

1

Решение

Этот вопрос в значительной степени самоуверен по определению, поэтому все, что я могу дать, — это ответ «лучшая практика».

Не. Хотя хорошо, что что-то возможно, на практике вы запутываете свой код. Кто бы ни следовал за вами, чтобы поддерживать код, он не будет ожидать такого поведения, потому что оно не соответствует парадигмам, преподаваемым в любом ИТ-образовании. Ваш код будет сложнее поддерживать, документировать и делиться, потому что вы сделали нетрадиционный выбор, который, хотя и является абсолютно действительным и эффективным, не дает никаких преимуществ по сравнению с принятой передовой практикой.

Придерживайтесь общепринятых стандартов и разработчик после вас будет благодарен.

4

Другие решения

Это кажется жизнеспособным, но вы также можете сделать так, чтобы ваши классы расширяли Фасад, как это делает Laravel:

class Facade
{
static public function create()
{
if( empty($arguments) )
{
return new static;
}
else
{
$reflector = new ReflectionClass(get_called_class());

return $reflector->newInstanceArgs(func_get_args());
}
}
}

class User extends Facade
{

}

ИМХО, код более явный, когда User::create()

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector