Проблема вызова класса из другого класса PHP
У меня 3 класса расширяются по цепочке путем: class2 extends class1, class3 extends class2. Но из последнего 3-го класса не работает метод 2-го класса, который в свою очередь обращается к методам 1-го класса. Какие пути решения проблемы ?
Каким образом идёт вызов class2.method и class1.method из class3.method? Какова область видимости методов?
Использовать parent и проверить модификаторы доступа.
Цитата: Romik
Каким образом идёт вызов class2.method и class1.method из class3.method? Какова область видимости методов?
Области видимости нигде не выставлены, статических методов тоже нет. Из 3-го класса вызываю метод 2-го путем $this->lang('VARIABLE'). Ошибок не пишет, ничего не отдает.
Код:
class First
{
public function Hello()
{
echo 'Hello from First class!<br/>';
}
}
class Second extends First
{
public function Hello()
{
echo 'Hello from Second class!<br/>';
parent::Hello();
}
}
class Third extends Second
{
public function Hello()
{
echo 'Hello from Third class!<br/>';
}
public function HelloFromSecond()
{
parent::Hello();
}
}
$obj = new Third();
$obj->Hello();
$obj->HelloFromSecond();
{
public function Hello()
{
echo 'Hello from First class!<br/>';
}
}
class Second extends First
{
public function Hello()
{
echo 'Hello from Second class!<br/>';
parent::Hello();
}
}
class Third extends Second
{
public function Hello()
{
echo 'Hello from Third class!<br/>';
}
public function HelloFromSecond()
{
parent::Hello();
}
}
$obj = new Third();
$obj->Hello();
$obj->HelloFromSecond();
Выведет:
Hello from Third class!
Hello from Second class!
Hello from First class!
Цитата: MrLinker
Я же написал, используйте ключевое слово parent:
Выведет:
Hello from Third class!
Hello from Second class!
Hello from First class!
Код:
class First
{
public function Hello()
{
echo 'Hello from First class!<br/>';
}
}
class Second extends First
{
public function Hello()
{
echo 'Hello from Second class!<br/>';
parent::Hello();
}
}
class Third extends Second
{
public function Hello()
{
echo 'Hello from Third class!<br/>';
}
public function HelloFromSecond()
{
parent::Hello();
}
}
$obj = new Third();
$obj->Hello();
$obj->HelloFromSecond();
{
public function Hello()
{
echo 'Hello from First class!<br/>';
}
}
class Second extends First
{
public function Hello()
{
echo 'Hello from Second class!<br/>';
parent::Hello();
}
}
class Third extends Second
{
public function Hello()
{
echo 'Hello from Third class!<br/>';
}
public function HelloFromSecond()
{
parent::Hello();
}
}
$obj = new Third();
$obj->Hello();
$obj->HelloFromSecond();
Выведет:
Hello from Third class!
Hello from Second class!
Hello from First class!
Вызывая метод 3-го класса, он обращается ко 2-му. 2-й обращается к методам 1-го и отдает ему массив. 3-й разбирает массив и отдает html. Parent не срабатывает. И если я создаю в 3-м классе объект 2-го тоже не работает.
Цитата: vathsven
Вызывая метод 3-го класса, он обращается ко 2-му. 2-й обращается к методам 1-го и отдает ему массив. 3-й разбирает массив и отдает html. Parent не срабатывает. И если я создаю в 3-м классе объект 2-го тоже не работает.
такого не бывает, как и телепатов. Обоснуй, вобщем, как это так "parent не срабатывает". не для того его сочиняли, чтобы "не срабатывал". Вобщем, без кода не понятно, что там не срабатывает.
Приведи кусок кода.