Как правильно сбросить свойство класса в PHP во время выполнения? - PullRequest
1 голос
/ 10 апреля 2019

У меня есть класс, у которого есть свойство, которое я хочу сбросить / уничтожить во время выполнения. Сброс происходит в определенном методе, но вызывающий его метод возвращает TRUE в property_exists, в то время как он не может напрямую получить доступ к свойству с помощью $this->property, так как возвращает уведомление Notice: Undefined property:...


  public function get(int $id) {
    if ($record->data) {
      $this->_transform($record); //  Calling method that unsets prop
    }    

    if (! property_exists($this, 'isEmpty') ) { //  FALSE
      $this->transform();
    }else{
      echo $this->isEmpty; //  FALSE as well!
    }

    return $this;
  }

  private method _transform(Record $record) {
    unset($this->isEmpty); //  Unsetting happens here

    return;
  }

Как видно из кода после сброса, property_exists возвращает TRUE, чего не должно быть, но свойство не определено.

EDIT

Похоже, что если свойство объявлено в схеме класса, его нельзя уничтожить / сбросить (см. Демонстрацию выбранного ответа), и на самом деле оно ведет себя парадоксально: property_exists => TRUE, object-> property => warning

НО, когда свойство не определено, но создано при построении объекта, тогда оно может быть не задано и вести себя как ожидалось.

1 Ответ

0 голосов
/ 10 апреля 2019

Начиная с PHP 5.3.0, кажется, что если вы определите ее как переменную объекта, то property_exists вернет true даже после unset.Вместо этого используйте isset($this->isEmpty), поскольку это возвращает false после unset.

. См. Различия: Демо

Однако, вероятно, вам следуетвыберите другой подход, например, установите true или false или null или что-то еще и проверьте это.

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