Namespace и use

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Namespace и use

Сообщение Faenir »

Вопрос возможно глупый, но все же спрошу, т.к. мучает меня:)

Есть например класс SomeClass() и в нем 100500 методов.
В одном из этих 100500 методов нужно использовать yii\helpers\Url.... только в одном, в остальных он не нужен.

Как в данном случае будет лучше подключить Url?

Использовать use:

Код: Выделить всё

<?php
namespace some\namespace;

use yii\helpers\Url;

class SomeClass {
    ...    
    public function someMethod()
    {
        return Url::to(...);
    }
    ...
}
или же прям в методе напрямую вызывать \yii\helpers\Url без использования use:

Код: Выделить всё

<?php
namespace some\namespace;

class SomeClass {
    ...    
    public function someMethod()
    {
        return \yii\helpers\Url::to(...);
    }
    ...
} 
Будет ли второй вариант лучше по производительности при вызове остальных 100499 методов из за отсутствия yii\helpers\Url в use?
Аватара пользователя
solo
Сообщения: 320
Зарегистрирован: 2013.03.08, 19:59
Откуда: Ukraine, VINNITSA

Re: Namespace и use

Сообщение solo »

Здесь нужно ставить другой вопрос.
А не нарушаю я information expert имея объект с 100500 методами?
И только после этого можно задуматься о достоинствах отложенной загрузки.
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Namespace и use

Сообщение Faenir »

Не в этом суть... путь будет 10 методов и только в одном из них используется то, что нужно прописать в use.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Namespace и use

Сообщение anton44eg »

надеюсь вы это не для оптимизации кода спрашиваете...
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Namespace и use

Сообщение Faenir »

А что, оптимизация уже не в моде? Я просто хочу понять для себя, как оно работает.
Меня интересует, подгружается ли объект прописанный в use, если он не используется в текущем методе? Или же он подгружается только при обращении к нему?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Namespace и use

Сообщение anton44eg »

Такие оптимизации настолько мизерные, что даже думать про них не нужно. А читаемость, как по мне, сильно страдает. Вы пишите код не для компьютера, а для других программистов
Аватара пользователя
solo
Сообщения: 320
Зарегистрирован: 2013.03.08, 19:59
Откуда: Ukraine, VINNITSA

Re: Namespace и use

Сообщение solo »

MrArthur писал(а):Меня интересует, подгружается ли объект прописанный в use, если он не используется в текущем методе? Или же он подгружается только при обращении к нему?
Если ты используешь use тогда подгружается(но не объект а класс) даже если не используешь метод.

Это можно было проверить просто вставив echo. Делов то.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Namespace и use

Сообщение slavcodev »

При использовании use автозагрузчик(и) загрузят класс, если он не был до этого загружен. Теоритечески это нагрузка, практически, как сказали выше это мизер, который измерить даже не получится, я так думаю.

Вы же не задумываетесь о производительности когда пишете

Код: Выделить всё

echo "string " . $var; 
Ведь конкатинация "прожорливее" чем последовательный вывод

Код: Выделить всё

echo "string ", $var; 
:D
Жду Yii 3!
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Namespace и use

Сообщение Faenir »

Спасибо, теперь понятно)
А читаемость, как по мне, сильно страдает.
Не сказал бы, что прям сильно страдает...
Вы же не задумываетесь о производительности когда пишете

Код: Выделить всё

echo "string " . $var; 
Не поверите... :D

Еще заметил, что классы, которые находятся на "первом уровне"/в корне (\Yii, \HTMLPurifier и т.д.) в исходниках самого Yii частенько не выносятся в use, а используются на прямую.
Например вот и вот.
Причем во многих файлах они же выносятся в use... вот тут например.
Собственно... зачем, почему? :) Есть какие-то стандарты? Типа 'никаких "\" в методах, все выносим в use' или 'выносим в use всё, кроме классов "первого уровня" '.
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Namespace и use

Сообщение mickgeek »

MrArthur писал(а):Спасибо, теперь понятно)
А читаемость, как по мне, сильно страдает.
Не сказал бы, что прям сильно страдает...
Смотря для кого делаете проект. Если работаете в команде, то вполне вероятно, там есть разработчик(и), который привык к такому стилю. Но привык по причине, что подобным образом импорт классов реализован в других языках.
MrArthur писал(а):Еще заметил, что классы, которые находятся на "первом уровне"/в корне (\Yii, \HTMLPurifier и т.д.) в исходниках самого Yii частенько не выносятся в use, а используются на прямую.
Например вот и вот.
Причем во многих файлах они же выносятся в use... вот тут например.
Собственно... зачем, почему? :) Есть какие-то стандарты? Типа 'никаких "\" в методах, все выносим в use' или 'выносим в use всё, кроме классов "первого уровня" '.
Тоже замечал подобное, например, в примерах руководства используют "use", а в документации и некоторых классах фреймворка - нет. Правда, в последнем вряд ли это сделано производительности ради.

И по поводу стандартов, - https://github.com/yiisoft/yii2/blob/ma ... e-style.md.
Ответить