Почему отладчик PHP не может найти это изменение объекта? - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь отследить, где происходит изменение объекта PHP, и отладчик не может войти в код, где это происходит.

Я отслеживаю конструктор с тремя назначениями.

  public function __construct(DataDefinitionInterface $definition, $name = NULL, TypedDataInterface $parent = NULL) {
    $this->definition = $definition;
    $this->parent = $parent;
    $this->name = $name;
  }

После выполнения второго из этих трех назначений четвертое свойство (определенное другим классом в иерархии) изменилось с пустого массива на массив с одним элементом.У объекта есть магические геттеры и сеттеры, но они здесь не вызываются.Отладчик не будет входить в присваивание свойству parent и не достигнет точки останова на __set().Этот последний бит подходит, потому что эти магические методы используются только для незадекларированных или недоступных свойств, а свойство parent объявляется как protected над конструктором, и объект всегда имеет доступ к своим собственным свойствам.В тех случаях (где-либо еще в программном обеспечении), когда магический метод («переопределение» на странном языке документации PHP) вызывается , отладчик с радостью вмешивается.

Как это возможно, что отладчик не может войти в оператор, который явно выполняет больше работы, чем простое назначение?

Я использую PHP 7.2.10 под Apache 2.4.29 на Ubuntu 18.04.1, отладкав VSCode 1.33.1 с Xdebug 2.6.0.Отлаживаемый код взят из Drupal 8.7.0-dev.

1 Ответ

0 голосов
/ 03 мая 2019

Оказалось, что это ошибка в VSCode.

https://github.com/felixfbecker/vscode-php-debug/issues/355

Просто покажу, вы не всегда можете доверять отладчику.100

Решением была отладка с использованием PhpStorm вместо VSCode.

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