Задать вопрос

Для чего в проектах принудительно используют use?

Достался проект и специалист ведущий его попросил использовать везде use и не использовать в коде полные пути.

Не хочется пространными вопросами дёргать человека в отпуске, поэтому вопрос всемогущему all'у - для чего так делать?

Минусы как бы очевидны:

1 Код становится трудно читаем. По месту использования не всегда понятно что имеется ввиду под Order::load() - \Framework\Sale\Order::load или \Vendor\Project\Sale\Order::load - приходится проматывать к верху файла.

2 Код становиться длиннее - там где было бы просто:
\Framework\Main\UI\Extension::load([ 'vendor.module.components.cabinet.personal' ]);

приходится писать:
use \Framework\Main\UI\Extension;
Extension::load([ 'vendor.module.components.cabinet.personal' ]);


4 Код становиться замусоренным, так как верхушки файлов запросто превращаются во что-то вроде:
use Project\Exceptions\IblockNotFoundException;
use Project\Reviews\Dto\CreateReviewDto;
use Project\Reviews\ReviewsReactionService;
use Project\Reviews\ReviewsService;
use Project\SiteSettings;
use Framework\Main\Application;
use Framework\Main\ArgumentException;
use Framework\Main\Data\ManagedCache;
use Framework\Main\Engine\ActionFilter\Authentication;
use Framework\Main\Engine\ActionFilter\Csrf;
use Framework\Main\Engine\Contract\Controllerable;
use Framework\Main\Engine\Controller;
use Framework\Main\ObjectPropertyException;
use Framework\Main\Request;
use Framework\Main\SystemException;
use Exception;

И хрен его знает используются импортированные классы ниже ещё или уже нет, ведь никто не убирает этот мусор.

Так ради чего платится такая цена? Есть ли какое-то преимущество у такого Code style?
  • Вопрос задан
  • 228 просмотров
Подписаться 1 Средний 3 комментария
Решения вопроса 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Минусы как бы очевидны:
нет, не очевидны, по крайней мере миллионам разрабов

1 Код становится трудно читаем. По месту использования не всегда понятно что имеется ввиду под Order::load() - \Framework\Sale\Order::load или \Vendor\Project\Sale\Order::load - приходится проматывать к верху файла.
Вам как разрабу должно быть в принципе фиолетово, какой из пакетов используется, если они соблюдают один интерфейс. Если не соблюдают, при том что называются одинаково, значит все пошло не так задолго до проблем с определением пакета...

2 Код становиться длиннее - там где было бы просто:
\Framework\Main\UI\Extension::load([ 'vendor.module.components.cabinet.personal' ]);
приходится писать:
use \Framework\Main\UI\Extension;
Extension::load([ 'vendor.module.components.cabinet.personal' ]);
Код становится длиннее в проектах где 2 контроллера и в них по 1 экшену. Там где Extension::load будет вызываться больше одного раза, очевидно экономия на эксплуатации клавиатуры заметно увеличивается. А в больших проектах создание объекта может (и будет) повторяться многократно.

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

И хрен его знает используются импортированные классы ниже ещё или уже нет, ведь никто не убирает этот мусор.
Хрен не знает, а ИДЕ замечательно знает и даже подсвечивает серым цветом неиспользуемые.
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Часть проблем высосана из пальца, как очень смешной п.2 - разница в одну точку с запятой, а уже "гораздо длиннее", карл. При том что если класс использовать в коде хотя бы дважды, то вот тут как раз действительно получится "гораздо длинее"

use \Framework\Main\UI\Extension;
Extension::load([ 'vendor.module.components.cabinet.personal' ]);
Extension::unload([ 'vendor.module.components.cabinet.personal' ]);
vs
\Framework\Main\UI\Extension\Extension::load([ 'vendor.module.components.cabinet.personal' ]);
\Framework\Main\UI\Extension\Extension::unload([ 'vendor.module.components.cabinet.personal' ]);

и будешь постоянно спотыкаться в коде об эти палочки.

А часть решается не просто, а очень просто: вместо того, чтобы писать код в Блокноте Виндоус, надо в кои-то веки освоить работу с нормальной IDE. Которая
- автоматом скрывает блок use
- по ctrl+наведение курсора показывает полный путь, а по ctrl-click сразу переходит в определение метода
- подсвечивает неиспользуемые неймспейсы, и не проблема их удалить
Ответ написан
Sanes
@Sanes
Если это встречается в нескольких местах или таких записей много. Чтобы было читабельней.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы