Используются ли операторы для пространств имен PHP для повышения производительности или для удобства? - PullRequest
1 голос
/ 13 октября 2019

При использовании пространств имен в PHP, у вас есть выбор, как ссылаться на них. Вы можете поместить их в начало вашего класса

use Symfony\Component\HttpFoundation\JsonResponse;

Или вы можете включить их, как вы называете класс:

return Symfony\Component\HttpFoundation\JsonResponse::create($data);

Мой вопрос, есть ли какие-либо соображения производительности, которые могли быпредпочитаете один метод другому?

Я мог бы себе представить, основываясь на каких-либо реальных знаниях, что вполне возможно, что объявление use в классе может быть своего рода предопределенными определениями классов, которые никогда не будут использованы вфактическое выполнение кода, в зависимости от данных - к которому можно обратиться, ссылаясь только на класс пространства имен, когда вы на самом деле вызываете его. Или, если вы делаете объявление во время разработки, но никогда не заканчиваете тем, что вызываете этот класс, но не думаете удалять его, когда заканчиваете, ваш код всегда загружал бы определение этого класса и никогда не использовал его.

Продолжая использовать мои очень точные знания PHP во время выполнения, возможно, что объявление пространств имен в определении класса будет скомпилировано, что сделает его более быстрым при вызове этого класса, вместо того, чтобы выполнять какой-то «динамический» поискпри вызове класса.

Или use используют пространства имен в верхней части объявлений классов только для удобства разработчика, чтобы избежать многократной типизации?

Я нашел этот вопрос, Являются ли пространства имен плохими для производительности? , но спрашивается только, если использование пространств имен для всех , где-либо в коде, отрицательно влияет на производительность. Также ему 7 лет;возможно, информация устарела.

1 Ответ

0 голосов
/ 13 октября 2019

Я бы сказал, что оба, например, в сценарии:

use my\php\namesapce\TestClass;

echo TestClass::class;
$instance = new TestClass();
  1. Это хорошо для производительности , потому что:
    • PHP просто нужночитать / оценивать одно слово (а именно TestClass) каждый раз.
    • PHP внутренне сохраняет имя (TestClass) в качестве ключа для полного пути в паре ключ-значение временно (до тех пор, покафайл читается).
    • Файл занимает меньше места и, следовательно, требует меньше времени для загрузки.
  2. Это более удобно потому что разработчику не нужно каждый раз писать полный путь.

И это не влияет на работу auto-loader (см. еще один пост , связанный ), потому что:

PHP будет вызывать автозагрузчики абсолютно одинаково с одинаковыми параметрами, с оператором использования или без него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...