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

Влияет ли на быстродействие и потребление памяти, отказ от обращения к свойствам класса, внутри методов?

Внутри метода, обращение к свойству $someProperty происходит 1000 раз.

Какой из вариантов указанных ниже, оптимальнее по скорости и потреблению памяти?

class SomeClass {
  $someProperty = 'value';

  private someMethod() {

    // Какой вариант оптимальнее?

    // Вариант 1:
    // (такой вывод 1000 раз)
    echo $this->someProperty;

    // Вариант 2:
    $someProperty = $this->someProperty;
    // (или такой вывод 1000 раз)
    echo $someProperty;

  }
}
  • Вопрос задан
  • 179 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@iljaGolubev
Быстрее будет присвоение $someProperty = $this->someProperty до цикла.
Но это именно про приведённый код с учетом, что цикл 1000 внутри someMethod. Прирост скорости настолько незначительный, что в реальных условиях может выиграть и echo $this->someProperty;
Но ведь в реальности такой код не имеет смысла...
Если уж заменять, то с реальными циклами и требуемым окружением.

По памяти разницы нет - создание новой переменной без изменения не выделяет дополнительную память.
`CV` - compiled variable == ссылка на реальную переменную.

// для echo $someProperty;
0000 EXT_STMT
0001 T0 = FETCH_OBJ_R THIS string("someProperty")
0002 ECHO T0
0003 EXT_STMT

// для echo $this->someProperty;
0000 EXT_STMT
0001 T1 = FETCH_OBJ_R THIS string("someProperty")
0002 ASSIGN CV0($someProperty) T1
0003 EXT_STMT
0004 ECHO CV0($someProperty)
0005 EXT_STMT


Мини-микро-нано прирост скорости возможет только из-за того, что в цикле для `echo $someProperty; ` будет выполняться только ECHO, тогда как для `echo $this->someProperty; ` две инструкции FETCH_OBJ_R и ECHO.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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