2014-09-16 2 views
0

Я создал родительский класс (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); 

Я вижу: '' вместо 'AND B. id'

+0

@ ClémentMalet: Если он изменяет значение 'protected $ value' в классе A. Класс B всегда получает значение по умолчанию для класса A. Это нормально. Я согласен, нам нужен код. Действительно, следуя вашим потребностям, одним из возможных решений было бы использовать ключевое слово 'static'. – Debflav

+0

Конечно, у вас есть ** два независимых экземпляра объекта **. Они не обмениваются данными, независимо от того, являются ли они одного класса или нет. Более конкретный пример использования может понадобиться, чтобы рассказать вам, как лучше всего делать то, что вы пытаетесь сделать в ООП. 'static' может быть или не быть решением * bad *. – deceze

ответ

1

Вам может понадобиться, чтобы положить вашу собственность как статические. Вот пример:

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 

Статические переменные не один и тот же класс/объект, так что если вы измените значение будет изменены везде.

+0

Статик будет работать, это не оптимальное решение, но оно будет выполнено. –

+0

Конечно, это одно из возможных решений. ОП должен определить, что является наилучшим образом, следуя его потребностям. – Debflav

Смежные вопросы