[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Порядок чтения методов в классе
GET
Привет.

Может кому будет интересно.

Есть класс:
class x
{
public function __construct()//инициализируем и проверяем переменные
{
$this->x1();//запускаем функцию
echo 'D';
}
public function x1()
{
echo 'E'.$this->x2();
}
public function x2()//виртуальная функция
{
echo 'C';
}
}

class y extends x
{
public function x2()
{
echo 'B';
return 'A';
}
}

$yyy=new y();


Результат: BEAD Почему?

Вот как он читает:

$yyy=new y(); инициация класса:
дальше, он запускает public function x2() из class y - попутно, первой, появляется B
т.е. сначала производит все вычисления внутри класса для того чтоб найти результат А для $this->x2();

Потом уже function x1() Е, потом результат ранее полученный А...и в конце концов echo 'D';

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
SerginhoLD
что тебя здесь смущает?

сначала _construct
внутри сначала x1 потом echo
внутри x1: сначала x2 потом echo

в итоге все задом наперед
x2: B
x1: EA
_c: D



_____________
"internet explorer всех правильней отображает страницы" ©
GET
SerginhoLD
Да...да я разобрался.

Может быть кому-то будет полезно, немного модифицировал метки, добавил второй конструктор, как все работает -> полиморфизм.

//полиморфизм
class x
{
public function __construct($G)//инициализируем и проверяем переменные
{
$this->G=$G;
$this->x1();//запускаем метод на старте
echo 'A';
}
public function x1()
{
echo 'B';
echo $this->x2().$this->G;
}
public function x2()//виртуальный метод
{
echo 'C';
}
}

class y extends x
{
public function __construct($G)
{
parent::__construct($G);
echo 'D';
}
public function x2()
{
echo 'E';
return 'F';
}
}

$yyy=new y('G');

Результат: BEFGAD

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.