Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   как вызвать защищенный метод ? (https://javascript.ru/forum/server/51655-kak-vyzvat-zashhishhennyjj-metod.html)

Round 14.11.2014 13:07

как вызвать защищенный метод ?
 
Встала простая задача PHP oop, но почему то заступорился на ней.
Есть класс "First" и наследник класс "Second".
В дочернем классе переопределена переменная ($number) родительского класса. И есть необходимость вызвать метод родительского класса с первичным значением переменной $number

Проще на примере...

class First {

		protected $number = "First";
		
		protected function getNumber() {
			
			return $this->number;

		}

	}

	class Second extends First {

		protected $number = "Second";

	}
	
	$first = new First;
	
	$second = new Second;

	// здесь нужно вывести "First"
	echo $second->getNumber();


Пример упростил для более лёгкого понимания общей цели.

В коде зашито все так что ни свойства и методы менять нельзя. Можно только добавлять к этому куску кода свой.

Никак не могу вызвать этот метод. :blink:

Если бы во втором классе не переопределялась переменная, то можно было бы просто добавить - return parent::getNumber();
Но, там жизненно необходимо переопределение этой переменной.

Есть какие то идеи?
Может я что то пропустил?
Такая мелочь (казалось) а туплю уже целый день на этим.
:help:

RorikOmink 14.11.2014 16:34

И что в таком случае делать?
А зима не просто блиизко...

Round 15.11.2014 10:06

Вопрос немного меняется (незнаю, возможно ли исправить название темы здесь).

Продолжал копать в этой конструкции и пришел к выводу, что мне нужно во первых переопределить метод getNumber в классе наследнике и каким то образом туда ещё раз поместить значение свойства $number из родительского класса.

Новый вариант ...

class First {

	protected $number = "First";

	protected $first;
	
	protected function getNumber() {
		
		return $this->number;

	}
	
	protected function getFirst() {
		
		 // Как загнать значение переменной $number в $first ?

                return $this->first; 

	}
}

class Second extends First {

	protected $number = "Second";

	public function getNumber() {
		
		return $this->first;

	}
}

$first = new First;

$second = new Second;


echo $second->getNumber(); // здесь нужно вывести "First"



Как загнать значение переменной $number в $first ?

depp 25.11.2014 05:18

class First {
	protected static $number = "First";
	protected function getNumber() {
		return $this->number;
	}
}

class Second extends First {
	protected static $number = "Second";
	public function getNumber() {
		return parent::$number;
	}
}

$first = new First;
$second = new Second;
// здесь нужно вывести "First"
echo $second->getNumber();


Часовой пояс GMT +3, время: 23:02.