В PHP5 введены интерфейсы (interfaces). Класс может реализовывать произвольное число интерфейсов.
Пример:
interface Throwable {
public function getMessage();
}
class Exception implements Throwable {
public function getMessage() {
// ...
}
}
?>
Существующие программы, не испольующие собственные классы или функции, названные «interface» или «implements», будут работать без каких-либо изменений.
Сентябрь
28,
2008
— Filed under: PHP
Метки: PHP5, Интерфейсы
PHP5 позволяет определить метод-конструктор класса. Классы, имеющие конструктор, вызывают его для каждого создаваемого объекта. Обычно конструкторы используются для присваивания переменным-элементам класса начальных значений, необходимых до использования объекта.
В PHP4 конструктором явзяется метод, который называется так же, как сам класс. Так как часто необходимо вызывать конструктор базового класса из класса производного, такой принцип именования конструкторов затрудняет работу со сложной иерархией классов. Если базовый класс изменен, приходится также менять имя вызываемого конструктора базового класса в коде производного класса.
В PHP5 введен стандартный способ объявления конструктора класса. Конструктором в PHP5 является метод с именем __construct().
Пример:
class BaseClass {
function __construct() {
print "В конструкторе базового класса BaseClass\n";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "В конструкторе производного класса SubClass\n";
}
}
$obj = new BaseClass();
$obj = new SubClass();
?>
Для обратной совместимости, предусмотрено следующее: если PHP5 не находит функцию __construct() в определении данного класса, используется старый стиль именования конструкторов. Таким образом, единственный случай несовместимости при переходе на PHP5 — присутствие в объявлении класса метода с именем __construct().
Март
9,
2008
— Filed under: PHP
Метки: PHP4, PHP5
В PHP5 также введены абстрактные (abstract) классы и методы. Абстрактный метод представляет собой только объявление метода и не предусматривает его реализации. Класс, содержащий абстрактные методы, должен быть объявлен абстрактным.
Пример:
abstract class AbstractClass {
abstract public function test();
}
class ImplementedClass extends AbstractClass {
public function test() {
echo "Вызван метод ImplementedClass::test().\n";
}
}
$o = new ImplementedClass;
$o->test();
?>
Создание экземпляра абстрактного класса невозможно.
Существующие программы, не испольующие собственные классы или функции, названные «abstract», будут работать без каких-либо изменений.
Февраль
29,
2008
— Filed under: PHP
Метки: PHP5, Абстрактные классы
В PHP5 также введены частные (private) и защищенные (protected) методы.
Пример:
class Foo {
private function aPrivateMethod() {
echo "Вызван метод Foo::aPrivateMethod().\n";
}
protected function aProtectedMethod() {
echo "Вызван метод Foo::aProtectedMethod().\n";
$this->aPrivateMethod();
}
}
class Bar extends Foo {
public function aPublicMethod() {
echo «Вызван метод Bar::aPublicMethod().\n»;
$this->aProtectedMethod();
}
}
$o = new Bar;
$o->aPublicMethod();
?>
Существующие программы, не испольующие собственные классы или функции, названные «public», «protected» или «private», будут работать без каких-либо изменений.
Февраль
28,
2008
— Filed under: PHP
Метки: PHP5, защищенные методы