2017-02-04 2 views
0

Предположим, что у меня есть такая же переменная в обоих классов А и В.Изменение родительского класса переменной

class A { 
    public $status; 
    public function __construct(){} 
} 

class B extends A { 
    public $status; 
    public function __construct(){} 

public function modifyParentStatus(){ 
    /* In the next line i want to change the parent class variable 
    But it changes the current class variable */ 
    $this->status = 'active'; 
} 
} 

$obj = new B(); 
$obj->modifyParentStatus(); 

Как я могу изменить родительскую переменную из дочернего класса, если обе переменные имеет такое же имя?

Я не хочу использовать дополнительные статические функции. Я просто хочу изменить его напрямую.

+0

Там нет Родительских переменных в классе 'B' –

+0

, что вы имеете в виду? есть одна и та же переменная в родительском и дочернем классе. Я хочу изменить родительскую переменную класса из дочернего класса. –

+0

Существует ли реальный прецедент здесь с примером кода, где это не делает то, что вы ожидаете? Как вы ссылаетесь на переменную класса А, я ничего не вижу? –

ответ

0

Это не имеет смысла. Нет родительского собственности, это не так, как наследование работает.

Объект B ($obj) не имеет «родительский», класс B, но это свойства экземпляра.

Если вы определяете определение дополнительного свойства в дочернем классе, экземпляр этого класса будет иметь доступ для обоих свойств (те, которые определены в родительском и те, которые определены в cild). Но ни один из них не относится к классу «» », вы в этом путаете вещи; по отношению к экземпляру все эти свойства являются «локальными».

Ваш modifyParentStatus() просто плохо назван, потому что я думаю, что вы не совсем понимаете, что происходит.

Наследуя класс, он наследует все свои свойства. Класс может иметь родительский элемент, но экземпляр этого не делает. Даже свойство static, если оно переопределено в дочернем классе, не создаст нового доступного свойства. parent::$status, self::$status, static::$status будет относиться к тому же имуществу.

-1

Вы, наверное, глядя на изменение свойства объекта родительского класса из объекта дочернего класса, и что может быть достигнуто таким образом

class A { 
     public $status; 
     public function __construct(){} 
     } 

class B extends A { 
     public $status; 
     public function __construct(){} 

     public function modifyParentStatus(){ 
     /* In the next line i want to change the parent class variable 
     But it changes the current class variable */ 
     //you need to create an instance of the parent class for you to access its properties 
     $a = new A(); 
     $a->status = 'active'; 
     return $a->status; 
    } 
} 

$obj = new B(); 
echo $obj->modifyParentStatus();