Задать вопрос
denis_bardak
@denis_bardak
Web Developer

$$$ что значит в php?

что надо сделать чтобы echo $b->$$$b выдало 10?
  • Вопрос задан
  • 2478 просмотров
Подписаться 7 Оценить Комментировать
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Это называется переменная с переменным именем (variable variable).

class Foo {
  public $deepest = 'Limbo';
  
  public function __toString()
  {
    return 'deep';
  }
}

$deeper = 'deepest';
$deep = 'deeper';
$b = new Foo();

echo $b->$$$b;


Выражение выполняется справа налево:
1. $b->$$($b) превращается в $b->$$($b->__toString()), поскольку именно так ведут себя объекты, когда на них пытаются натравить echo;
2. $b->$$($b->__toString()) превращается в $b->$(${'deep'}), именно это значение возвращает метод __toString класса Foo, инстансом которого является $b;
3. $b->$(${'deep'}) превращается в $b->$($deep), это как раз вызов переменной при помощи значения из другой переменной;
4. $b->$($deep) превращается в $b->${'deeper'}, поскольку именно такое значение находится в переменной $deep;
5. $b->${'deeper'} превращается в $b->($deeper);
6. $b->($deeper) превращается в $b->deepest;
7. наконец, получается значение свойства 'deepest' из $b, а там как раз хранится 'Limbo', оно и выводится в echo.

dd178a12658f41679b71884846669132.jpg
Ответ написан
@kirill-93
class B {
    public $b = 10;

    public function __toString() {
        return "b";
    }
}

$b = new B();
echo $b->$$$b;


Примерно так. Другой вопрос - зачем это нужно?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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