Что из этого является наилучшей практикой для получения значений из функции в классе в PHP? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть эта функция в классе:

my_class::my_function()

Возвращает 5.

Если я сделаю это:

$total = $something + my_class::my_function();
$total2 = $something2 + my_class::my_function();
$total3 = $something3 + my_class::my_function();

Это менее эффективно, чемделать:

$something_else = my_class::my_function();

$total = $something + $something_else;
$total2 = $something2 + $something_else;
$total3 = $something3 + $something_else;

1 Ответ

0 голосов
/ 15 февраля 2019

TL; DR

Делайте то, что правильно с архитектурной точки зрения, и забудьте о попытках выполнить микрооптимизацию самостоятельно.Если вы хотите, чтобы во всех вычислениях использовалось одно и то же значение, кэшируйте его.

Пояснение.

Существуют издержки при вызове любой функции в PHP.Когда вы вызываете функцию, PHP должен создать стековый фрейм в памяти, который содержит информацию о вызове, такую ​​как значения параметров, расположение в коде и т. Д. Это занимает некоторое время, а такжезаймет немного памяти.Требуемый объем памяти варьируется, но обычно невелик, из-за того, что PHP передает объекты по ссылке и копирование при записи механика.Таким образом, если вы не изменяете большие строковые / двоичные данные в своей функции, накладные расходы должны быть незначительными.Тем не менее, вы должны использовать второй подход, то есть тот, который «кэширует» значение, потому что из PoV потребителя ни при каких обстоятельствах my_function() не гарантируется , чтобы каждый раз возвращать одно и то же значение.

Год за годом PHP все больше и больше оптимизируется.Примеры включают в себя zVal и opcache.Эти улучшения приводят к автоматической оптимизации вменяемых инструкций.Попытка возиться с этим может фактически привести к тому, что PHP не сможет оптимизировать вашу программу.Над этим работают очень знающие и способные люди, и вам не нужно делать ничего особенного, чтобы воспользоваться автоматической оптимизацией.Вместо этого сосредоточьтесь на архитектуре и концептуальной точности вашего кода, на его нормализации. Компиляторы все больше оптимизируются, аппаратное обеспечение становится все лучше и дешевле с каждым годом, без вашего участия;но ваш код не нормализуется сам по себе .

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