Что нового в PHP7.1: улучшения обработки $this.
Всем привет! В этой статье мы рассмотрим, какие улучшения коснулись обработки $this в PHP 7.1.
Очень велика вероятность, что вы даже никогда не слышали о такой проблеме и что никогда бы с ней не столкнулись, но знать о ней, все-таки нужно.
Давайте сразу рассмотрим пример:
class Calculator {
protected $result = 0;
public function getResult() {
return $this->result;
}
public function add($number) {
$result = 'this';
$$result = $this->result + $number;
// то же самое, что $this = $this->result + $number;
var_dump($this);
}
}
$calculator = new Calculator;
$calculator->add(2);
echo $calculator->getResult();
Здесь мы в методе add() переменной $result присваиваем значение равное строке this. Дальше мы используем два знака доллара для того, чтобы создать динамически имя переменной. Т.е. $$result это то же самое, что $this, т.к. имя для переменной берется из значения указанной после двух знаков доллара переменной. Подробнее про это вы можете почитать на официальном сайте в разделе variable variables.
Если мы теперь попытаемся с помощью var_dump() посмотреть, чему равно $this, то увидим, что оно равно не объекту, как мы могли ожидать, а int(2) 0. Это произошло из-за того, что мы перезаписали $this на значение $this->result + $number.
Но это произойдет только в PHP 7.0. В PHP 7.1 мы получим Fatal Error, говорящую нам о том, что невозможно перезаписать $this.
Как уже было сказано, вы вряд ли бы когда-нибудь столкнулись с такой проблемой в реальной жизни, но теперь вы знаете, что такое возможно и что стоит ожидать в таком случае.
А на этом сегодня все. Спасибо за внимание!
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.