Страница 1 из 1
Зачем рефлексия в Model::formName()?
Добавлено: 2017.07.24, 09:02
BrusSENS
Доброго времени!
Вот не могу понять, зачем используется рефлексия в yii\base\Model...
Код: Выделить всё
public function formName()
{
$reflector = new ReflectionClass($this);
return $reflector->getShortName();
}
Понятное дело, что особо на память не влияет, но всё же, какой профит использования рефлексии именно здесь? Можно ведь использовать что то вроде
Код: Выделить всё
public function formName()
{
return ltrim(__CLASS__, __NAMESPACE__);
}
По идее же получим ровно то же самое, но всё таки быстрее и без рефлексии...
P.S.: вопрос чисто для себя, хочу просто понять почему именно так?
Re: Зачем рефлексия в Model::formName()?
Добавлено: 2017.07.25, 18:20
samdark
Точно быстрее? Замерьте.
Re: Зачем рефлексия в Model::formName()?
Добавлено: 2017.07.26, 06:43
BrusSENS
samdark писал(а): ↑2017.07.25, 18:20
Точно быстрее? Замерьте.
Хм... И в прямь... Я несколько удивлён. Хотя выигрыш в полкило памяти по идее можно получить, но понятно, что не в ущерб скорости. Спасибо за ответ!
Re: Зачем рефлексия в Model::formName()?
Добавлено: 2017.07.26, 10:19
zelenin
BrusSENS писал(а): ↑2017.07.26, 06:43
samdark писал(а): ↑2017.07.25, 18:20
Точно быстрее? Замерьте.
Хм... И в прямь... Я несколько удивлён. Хотя выигрыш в полкило памяти по идее можно получить, но понятно, что не в ущерб скорости. Спасибо за ответ!
на чем мерял?
у меня на 7.1 рефлексия медленнее в 4-5 раз второго варианта, и в 2-3 раза медленнее варианта с explode полного класса. Что как бы очевидно, что так и должно быть.
Re: Зачем рефлексия в Model::formName()?
Добавлено: 2017.07.26, 11:14
BrusSENS
zelenin писал(а): ↑2017.07.26, 10:19
на чем мерял?
у меня на 7.1 рефлексия медленнее в 4-5 раз второго варианта, и в 2-3 раза медленнее варианта с explode полного класса. Что как бы очевидно, что так и должно быть.
Мерял без спец инструментов, простым microtime(). Но с другими инструментами думаю может поменяться. Но по факту 500 байт памяти рефлексия кушает, опять же при замере банальным memory_get_usage(). Вот посему и задаюсь вопросом, почему бы не использовать банальную конструкцию
Код: Выделить всё
public function formName()
{
return substr(strrchr(static::className(), "\\"), 1);
}
Re: Зачем рефлексия в Model::formName()?
Добавлено: 2017.07.26, 11:23
zelenin
ну ты что-то не так мерял, или не учитывал кэширование
http://sandbox.onlinephpfunctions.com/c ... 2d44055502
http://sandbox.onlinephpfunctions.com/c ... 5b5f4468b7
т.к. кэш, берем самый быстрый результат: 1) 9 2) 3.
Re: Зачем рефлексия в Model::formName()?
Добавлено: 2017.07.26, 11:33
BrusSENS
Да, про кэш совсем забыл. Проверил на onlinephpfunctions конструкцию
Код: Выделить всё
public function formName()
{
return substr(strrchr(static::className(), "\\"), 1);
}
Она всё равно быстрее получается.