2014-11-15 1 views
0

У меня есть два класса - родительский «Первый» с переменной $ number, и у меня есть класс Child «Second», в котором изменяется свойство $ number.Как можно получить доступ к родительской переменной из дочернего объекта, если она была заменена в Child?

Как получить доступ к родительской переменной из дочернего объекта, если он был заменен в Child?

Мы не можем изменить свойства и методы, которые у нас есть сейчас.

class First { 

    protected $number = "First"; 

    protected function getNumber() { 

    return $this->number; 

    } 

} 

class Second extends First { 

    protected $number = "Second"; 

    protected $count = "One More"; 

} 

$first = new First; 

$second = new Second; 

// must show "First" 
echo $second->getNumber(); 

ответ

0

Метод getNumber() объявлен как защищенный, поэтому ваш код примера приведет к фатальной ошибке.

Цитирую PHP документы:

Члены объявляются защищенные могут быть доступны только в классе себя и наследственными и родительских классов.

Ссылка: http://php.net/manual/en/language.oop5.visibility.php

Итак, сначала нужно будет создать свой собственный класс, расширяющий Во-вторых, и либо переопределить метод getNumber или создать еще один метод, который создает экземпляр родительского класса для того, чтобы вернуть его $ number. Ваш метод должен быть объявлен публичным, чтобы иметь доступ к нему из-за пределов класса. Смотрите пример ниже:

class First { 

    protected $number = "First"; 

    protected function getNumber() { 

    return $this->number; 

    } 

} 

class Second extends First { 

    protected $number = "Second"; 

    protected $count = "One More"; 

} 

class CustomClass extends Second { 


    public function callSecondClassParentGetNumberMethod() { 

    $parentClass=get_parent_class('Second'); 
    $parent=new $parentClass; 
    //or if you know the parent class just call it directly: 
    //$parent =new First; 
    return $parent->getNumber(); 

    } 

} 


$customClass = new CustomClass; 

// shows "First" 
echo $customClass->callSecondClassParentGetNumberMethod(); 
+0

Спасибо, это освежает мой разум ... Извините, но я не могу увеличить вашу репутацию, потому что у меня нет разрешения на это. – Garryk

0

Спасибо, matwr так много ... вы делаете мой день!

Я только сделал небольшие изменения в вашем решении, и это работает отлично.

class First { 

protected $number = "First"; 

protected function getNumber() { 

    return $this->number; 

} 

}

класс вторых распространяется в первую очередь {

protected $number = "Second"; 

public function getNumber() { 

    $parent = new First; 

    return $parent->getNumber(); 

} 

}

$ = первый новый первый;

$ second = new Second;

// показывает «первый» echo $ second-> getNumber();

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