PHP 5(ZEND引擎2)中,公有办法和回护办法也被引入。
示例:
<?phpclass Foo { private function aPrivateMethod() { echo "Foo::aPrivateMethod() called.\n"; } protected function aProtectedMethod() { echo "Foo::aProtectedMethod() called.\n"; $this->aPrivateMethod(); }}class Bar extends Foo { public function aPublicMethod() { echo "Bar::aPublicMethod() called.\n"; $this->aProtectedMethod(); }}$o = new Bar;$o->aPublicMethod();?>
之前代码中的用户自界说类或办法中固然没有界说"public," "protected" 或 "private"等关头字,但无需修正便可运转。
笼统类和办法
PHP 5还引入了笼统类和办法。笼统办法只声明办法的”符号”,而不供应它的完成。一个包括笼统办法的类需求声明为”abstract”。
例如:
<?phpabstract class AbstractClass { abstract public function test();}class ImplementedClass extends AbstractClass { public function test() { echo "ImplementedClass::test() called.\n"; }}$o = new ImplementedClass;$o->test();?>
笼统类不克不及实例化。
旧的代码中的用户自界说类或办法中虽不决义"abstract”关头字,但无需修正就能够运转。
接口(Interfaces)
ZEND引擎2.0引入了接口。一个类可以完成恣意的接口列表。
例如:
<?phpinterface Throwable { public function getMessage();}class Exception implements Throwable { public function getMessage() { // ...}?>
旧的代码中的用户界说类或办法中固然没有界说"interface”关头字,但无需修正就能够正常运转。
类类型提醒(Class Type Hints)
在保存类无需界说类型的同时,PHP 5引入了类类型提醒来声明,以希冀把对象的类经由过程参数传递给一个办法。
例如:
<?phpinterface 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);?>
这些类类型提醒不是象一些需求类型界说的言语那样在编译中停止反省,而是在运转时停止反省。这就意味着:
<?phpfunction foo(ClassName $object) { // ...}?>
is equivalent to:
<?phpfunction foo($object) { if (!($object instanceof ClassName)) { die("Argument 1 must be an instance of ClassName"); }}?>
这类语法只用于对象或类,不合用于内建(built-in)类型。
PHP5答应常量中包括表达式,但在编译经常量中的表达式将被盘算,
因而常量不克不及在运转中改动它的值。
<?php
class Bar {
const a = 1<<0;
const b = 1<<1;
const c = a | b;
}
?>
之前代码中的用户自界说类或办法中固然不决义"const”关头字,
但无需修正就能够运转。
异常(Exceptions)
PHP4中没异常处置,PHP5引入了与其它与言语类似的异常处置模子。
<?php
class MyExceptionFoo extends Exception {
function __construct($exception) {
parent::__construct($exception);
}
}