Почему мой установщик не предупреждает, что свойство не может быть установлено?

В классе a у меня есть setter определены. В классе b, который расширяет класс a, Eсть private переменная, что класс a поэтому не сможет видеть. setter в классе a в этом коде никогда не будет установлена ​​переменная test к значению, отличному от исходного, потому что он не может достичь его. Если вы запустите этот код, для случая А он выведет 0,

Однако, если вы запустите дело B, вы получите Exception говоря, что собственность test2 не существует.

<?php

error_reporting(E_ALL);
ini_set('display_errors', true);

class a {
public function __set($prop, $value) {
if((!property_exists($this, $prop))) {
$className = get_called_class();
throw new Exception("The property `{$prop}` in `{$className}` does not exist");
}
$this->$prop = $value;
return true;
}
}

class b extends a {
private $test = 0;

public function getTest() {
return $this->test;
}
}

// Case A
$b = new b;
$b->test = 1;
echo $b->getTest();

// Case B
$b = new b;
$b->test2 = 2;

Мой вопрос, если класс a на самом деле не увидеть переменную test и не смогу установить его значение, почему я не получаю никаких ошибок, исключений, предупреждений или даже крошечных уведомлений?

Это ситуация, которая только что случилась со мной в реальном проекте, и ее было трудно найти из-за отсутствия генерируемой ошибки и правильного кода. Так как же предотвратить подобные ошибки в будущем?

0

Решение

С классом b расширяет класс aнаследует __set() метод из класса a, Это означает, что когда вы пытаетесь установить свойство на b его b выполнение __set код. Вы можете проверить это, повторив get_called_class() значение за пределами собственности существует

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]