поскольку __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);
}
}
Этот вопрос в значительной степени самоуверен по определению, поэтому все, что я могу дать, — это ответ «лучшая практика».
Не. Хотя хорошо, что что-то возможно, на практике вы запутываете свой код. Кто бы ни следовал за вами, чтобы поддерживать код, он не будет ожидать такого поведения, потому что оно не соответствует парадигмам, преподаваемым в любом ИТ-образовании. Ваш код будет сложнее поддерживать, документировать и делиться, потому что вы сделали нетрадиционный выбор, который, хотя и является абсолютно действительным и эффективным, не дает никаких преимуществ по сравнению с принятой передовой практикой.
Придерживайтесь общепринятых стандартов и разработчик после вас будет благодарен.
Это кажется жизнеспособным, но вы также можете сделать так, чтобы ваши классы расширяли Фасад, как это делает 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()