Ключевое слово final

В PHP5 введено ключевое слово “final”, используемое для определения финальных элементов и методов класса. Элементы и методы, в объявлении которых указано ключевое слово “final”, нельзя переопределить в классе-потомке.

Пример:
class Foo {
final function bar() {
// ...
}
}
?>

Также возможно использовать ключевое слово “final” в определении самого класса, что запретит создание производных от него классов. При этом все элементы и методы такого класса автоматически являются финальными, и определять их таковыми явно нет необходимости.

Пример:
final class Foo {
// определение класса
}

// следующая строка вызовет ошибку времени выполнения
// class Bork extends Foo {}
?>

Свойства не могут быть финальными.

Существующие программы, не испольующие собственные классы или функции, названные “final”, будут работать без каких-либо изменений.

[fixxxer] Примечание: в PHP все методы класса являются виртуальными.

Март 3, 2008 — Рубрика: PHP
Метки: ,

Уточнение типа класса (Class Type Hints)

Оставаясь слабо типизированным языком, PHP5 предоставляет возможность использовать уточнения типа класса (class type hints) для указания ожидаемого класса объекта, передаваемого методу в качестве параметра.

Пример:
interface Foo {
function a(Foo $foo);
}

interface Bar {
function b(Bar $bar);
}

class FooBar implements Foo, Bar {
function a(Foo $foo) {
// ...
}

function b(Bar $bar) {
// ...
}
}

$a = new FooBar;
$b = new FooBar;

$a->a($b);
$a->b($b);
?>

Уточнения типов класса не проверяются не при компиляции, как в большинстве языков со строгой типизацией, а во время исполнения. Это означает, что следующие фрагменты кода эквивалентны:
function foo(ClassName $object) {
// ...
}
?>

function foo($object) {
if (!($object instanceof ClassName)) {
die("Argument 1 must be an instance of ClassName");
}
}
?>

Данный синтаксис применим только к объектам/классам, но не к встроенным типам данных.

Март 1, 2008 — Рубрика: PHP
Метки: ,