Глава 6 учебника по PHP

Листинг 6.5. Создание абстрактных классов

<?

class Vehicle {

Объявления атрибутов...

function Vehicle() }

die ("Cannot create Abstract Vehicle class!");

}

Объявления других методов...

}

class Land extends Vehicle {

Объявления атрибутов...

function Land() }

die ("Cannot create Abstract Land class!");

}

Объявления других методов. } class Car extends Land {

Объявления атрибутов...

Объявления методов...

}

?>

Попытка создания экземпляра этих абстрактных классов приведет к выдаче сообщения об ошибке и завершению программы.

Перегрузка методов

Перегрузкой методов называется определение нескольких методов с одинаковыми именами, но разным количеством или типом параметров. Как и в случае с абстрактными классами, в РНР эта возможность не поддерживается, но существует простое обходное решение, приведенное в листинге 6.6.

Листинг 6.6. Перегрузка методов

<?

class Page {

var $bgcolor;

var $textcolor;

 function Page() {

// Определить количество переданных аргументов

// и вызвать метод с нужным именем

$name = "Page".func_num_args();

// Call $name with correct number of arguments passed in

if ( func_num_args() == 0 ) :

$this->$name();

else :

$this->$name(func_get_arg(0));

endif;

}

function Page0() {

$this->bgcolor = "white";

$this->textcolor = "black";

print "Created default page";

}

function Page1($bgcolor) {

$this->bgcolor = $bgcolor;

$this->textcolor = "black";

print "Created custom page";

}

}

$html_page - new Page("red");

?>

В этом примере при создании нового объекта с именем $html_page передается один аргумент. Поскольку в классе был определен конструктор по умолчанию (Раgе( )), вызывается именно он. Однако конструктор по умолчанию всего лишь выбирает, какому из конструкторов (Page0( ) или Page1( )) следует передать управление. При выборе конструктора используются функции func_num_args( ) и func_get_arg( ), которые, соответственно, определяют количество аргументов и читают эти аргументы.

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 все