一、php5主要的新特性
1.public /private/protected访问修饰符,针对对象中的方法和属性。
可以使用通用的面向对象访问修饰符来控制方法和属性的访问级别:
class MyClass {
private $id = 18;
public function getId() {
return $this->id;
}
}
2.统一的构造函数名称__construct().
为避免构造函数的名字和类的名字相同,现在用__construct()来声明,从而让你更加容易在类的分层中转移类:
class MyClass {
function __construct() {
print 'Inside constructor';
}
}
3.通过__destructor()定义对象的析构方法。
允许定义一个析构函数来注销一个对象:
class MyClass {
function __destruct() {
print ' Destroying object';
}
}
4.接口。
一个使用接口的类可以加载不止一个相关的接口。一个类只能继承自另一个类,但是可以实现任意多个接口:
interface Display {
function display();
}
class Circle implements Display {
function dispaly() {
print ' Dispalying circle \n';
}
}
5.instanceof操作符。
instanceof用来检测一个给定的对象是否属于(继承于)某个类(class)、某个类的子类、某个接口(interface)。如果是则返回true。
if ($obj instanceof Circle) {
print '$obj is a Circle';
}
6.Final 标记方法。
Final关键字允许你用来标识方法,使其不能被子类重载。
class MyClass {
final function getBaseClassName() {
return __CLASS__;
}
}
7.Final标记类。
声明一个类为final类型后,它将不能被继承。下面的例子将报错。
final class FinalClass {
}
class BogusClass extends FinalClass {
}
8.强制复制对象
为了克隆一个对象,你必须使用clone关键字。你可以再类中声明一个__clone()方法,它将在克隆过程中被调用(调用在属性和方法从原对象复制过来以后进行):
class MyClas {
function __clone() {
print 'Object is being cloned';
}
}
$obj = new MyClass();
$obj_copy = clone $obj;
9.类中的常量。
类定义中现在包含常量,而且可以用类来引用:
class MyClass {
const SUCCESS = "Success";
const FAILURE = "Failure";
}
print MyClass::SUCCESS;
10.静态方法。
你现在可以定义静态方法,不用实例化就能使用他们。静态方法不能使用$this变量,因为它们并没有绑定到任何具体的对象:
class MyClass {
static function helloWorld() {
print 'Hello world';
}
}
MyClass::helloWorld();
11.静态成员。
类的定义现在包含静态成员(属性),可以通过类自身来访问。通常用的最多的是单件(Singleton)模式:
class Singleton {
static private $instance = NULL;
private function __construct() {
}
static public function getInstance() {
if (sell::$instance == NULL) {
self::$instance = new Singleton();
}
return self::$instance;
}
}
12.抽象类。
把类声明为抽象类可以防止它被实例化。但是你可以继承一个抽象类:
abstract class MyBaseClass {
function dispaly() {
print 'Default dispaly routine being called';
}
}
13.抽象方法。
把方法声明为抽象的,以便在继承的子类中再去定义。包含抽象方法的类本身必须是一个抽象类:
abstact class MyBaseClass {
abstract function dispaly();
}
14.对象类型提示。
函数声明中可以对参数进行对象类型提示。如果函数调用的时候没有传递正确的对象类型,系统报错:
function expectsMyClass(MyClass $obj) {
}
15.支持连续引用方法返回的对象。
在PHP4中,你不能直接引用方法返回的对象。你必须先赋值到一个中间变量,然后再使用该变量来引用。
php 4:
$dummy = $obj->method();
$dummy->method2();
php 5:
$obj->method()->method2();
16.迭代。
php5允许php类和php继承类实现iterator接口。在实现迭代接口后,你可以用foreach()语言结构遍历一个类的实例:
$obj = new MyIteratorImplementaion();
foreach ($obj as $value) {
print $value;
}
17.__autoload()方法。
__autoload()函数在你需要使用一个未定义的类的时候自动调用。通过调用这个函数,脚本的引擎在php抛出类未定义的错误之前提供最后一次加载类的机会:
function __autoload($class_name) {
include_once($class_name . "php");
}
$obj = new MyClass();
$obj2 = new MyClass2();
18.异常处理。
php5增加了著名的try/throw/catch架构的异常处理范例。使用时,你只能抛出从Exception类继承的对象:
class SQLException extends Exception {
public $problem;
function __construct($problem) {
$this->problem = $problem;
}
}
try{
...
throw new SQLException("Couldn't connect to database");
...
} catch (SQLException $e) {
print "SQLException";
} catch (Exception $e) {
print 'Other Exception';
}
19.foreach 函数支持引用。
在php 4中,你不能遍历一个数组的同时更改它的值。但是php 5可以通过给foreach()循环的参数加速&(引用)符号,让你在遍历数组的循环中更改数组的值:
foreach ($array as &$value) {
if ($value === "NULL") {
$VALUE = NULL
}
}
20.给引用参数设置默认值。
在php 4中,你只能给传递值的参数设置默认值。php 5 现在可以让你给传递引用的参数设置默认值:
function my_func(&$arg = null) {
if ($arg === NULL) {
print '$arg is empty';
}
}
my_func();