Я создал родительский класс (A) и изменил некоторые из его открытых и защищенных свойств.
Я создал дочерний класс (B), который расширяет A.
Я могу видеть родительские свойства в экземпляре B после его создания.
Проблема в том, что унаследованные свойства B имеют значения по умолчанию A до того, как я их изменил.
Я хочу, чтобы B содержал измененные значения унаследованных свойств.
Как?
class Dashboard {
protected $testBusinessesIds = '';
public function test_bids($a){
$this->testBusinessesIds = $a;
}
}
class DashboardDBHelper extends Dashboard{
protected $withoutTestBids = '';
public function __construct(){
if($this->testBusinessesIds != '')
$this->withoutTestBids = " AND B.`id`";
}
}
$d = new Dashboard();
$d->test_bids(23);
$dh = new DashboardDBHelper();
print_r($dh->withoutTestBids);
Я вижу: «вместо» И Б.id
‘
Возможно, вам придется поместить вашу собственность как статическую. Вот пример:
class A {
protected $value = 1;
protected static $staticValue = 1;
public function printStatic() {
self::$staticValue++;
echo self::$staticValue;
}
public function printNonStatic() {
$this->value++;
echo $this->value;
}
}
class B extends A {
public function printStatic() {
echo self::$staticValue;
}
public function printNonStatic() {
echo $this->value;
}
}
$a = new A();
$b = new B();
/* Class A */
$a->printStatic(); // 2
$a->printNonStatic(); // 2
/* Class B */
$b->printStatic(); // 2
$b->printNonStatic(); // 1
Статические переменные не разделяют один и тот же класс / объект, поэтому, если вы измените значение, оно будет изменено везде.
Других решений пока нет …