php 5.5.9 myclass::class,PHP5的新特性

PHP5给我们带来的全新面向对象开发(OOP特性):

◆  支持PPP特性(Public/Private/Protected)

◆  例外以及异常处理(Exception)

◆  对象重载

◆  对象克隆(Object Cloning)

◆  接口(Interfaces)

◆  自动调用(Autoload)

◆  重写的增强的内置函数以及函数库

PHP5中最根本也是最重要的变化是使用了对象句柄(或对象ID),比如在复制对象时只引用或复制句柄(ID编号),而不像PHP4那样复制对象的所有属性和方法。

除了这些基本的特点外,因为已经更换了内核,PHP5执行的速度要比PHP4快得多,我们完全有理由相信,PHP已经正在成为这个世界最好的WEB开发语言之一。

一、新的面向对象特性

1、public/private和protected关键字

class MyClass{

private $id = 1000;

public function getId(){

return $this->id;

}

}

2、统一的构造方法和析构方法

在PHP5中,以 __construct()命名的方法作为一个类的构造方法。用于一个类被实例后的初始化操作。

class MyClass{

function __construct(){

echo "这是PHP5标准的构造方法";

}

}

与构造方法相反,由__destructor()关键字描述的方法被称析构方法,该方法用在运行时销毁一个对象实例。

class MyClass{

function __destruct(){

echo "析构方法,用于销毁一个对象";

}

}

3、接口- interface

接口(interface)是一个抽象类,接口中并不包含任何实现的代码,要求所有implement(实现)了它的类都实现它所描述的那些方法,单个简单例子:

interface Display{

//描述一个方法

function  display();

}

//实现上面接口中的方法

class Circle  implements Display{

function  display(){

echo "画一个圆!";

}

}

4、判断对象的隶属 -  instanceof

PHP5支持使用instanceof关键字来检查一个对象是否属于某个类的实例关系。

//如果对象$obj是否是MyClass的实例

if($obj instanceof MyClass){

echo "$obj对象属于MyClass类!";

}

5、final 方法

在PHP5中使用Final关键字来声明类中的某个方法是不是可重载的集成关系。final后不可重载。

//定义一个类,名称为MyClass

class MyClass{

//将 getBaseClassName 声明为Final类型的方法

final function getBaseClassName(){

return  __CLASS__ ;

}

}

6、final类

同样的,我们把一个类声明为final时,那么这个类也是不可再继承的类,如果有其他子类试图继承一个final类时,会提示错误不再执行。

final class FinalClass{

…………

}

class BogusClass extends FinalClass{

…………

}

?>

由于子类不可继承一个final类,上面脚本会报错。

7、对象的克隆

由于PHP5中对于对象的复制做了改进,不再是在内存中再复制一个对象,而只是复制一个对象的句柄编号(ID),如果要像PHP4那样复制一个对象的所有属性和成员方法,需要使用克隆操作,也就是要声明 __clone()方法,告诉PHP引擎将要执行对象的克隆操作。请见下面的例子:

class MyClass{

function __clone(){

echo "对象已被克隆!";

}

}

$obj = new MyClass();

//克隆一个新对象 $obj__copy

$obj_copy = clone $obj;

?>

8、类内部的常量定义与引用

类中可以定义常量,称为类常量,类常量可以在任何位置引用,下面是引用类常量的例子:

class MyClass{

const SUCCESS = "Loading is Success !";

const FAILURE = "Loading is Failure!";

}

//打印MyClass中SUCCESSC常量的值

echo MyClass::SUCCESS ;

?>

9、静态方法定义与引用

在PHP5中,可以在一个类中定义一些静态(static)方法,这样允许用户使用一个非对象实例的上下文引用,也就是不用声明对象也可以引用一个类中的静态方法,使用::关键字来引用。

class MyClass{

//声明一个静态方法

public static function helloStatic(){

echo "我是一个静态方法!";

}

}

//直接引用静态方法,不需要实例化对象

MyClass :: helloStatic();

?>

10、静态成员变量

类里面允许有静态方法,也可以有静态属性(static property)(也称成员变量),调用的方式与调用静态方法相同,使用::关键字来操作。

class Singleton{

//创建一个静态变量$instace

static private $instace = NULL;

//构造方法

private function __construct(){

static public function getInstance(){

//内部调用这个静态变量

if(self :: $instance == NULL){

self :: $instance = new Singleton();

}

return self :: $instance ;

}

}

11、定义抽象类

当一个类被定义为抽象(abstract)类时,它将会禁止实例化,而只允许其他类继承。

abstract class MyBaseClass{

function display(){

echo "display()方法被调用!" ;

}

}

12、定义抽象方法

类中也可以定义抽象方法,声明该类只可以被继承,同样道理,如果一个类包括抽象方法,那它也一定是个抽象类。

abstract class MyBaseClass{

abstract function display();

}

13、声明参数类型为对象

在PHP5中,在定义函数或方法时,可以声明它所接受参数的类型必须是一个对象,如果传递的是一个非对象时,PHP5会提示有错误从而中断执行。如下示例:

function expectsMyClass(MyClass $obj){

//etc

}

14、从方法中返回对象的引用

在PHP4里,我们不能从方法中直接返回的引用对象,而需要从第一次分配对象到一个虚拟的引用。PHP4引用对象的语法如下:

$dummy = $obj->method() ;

$dummy ->method2() ;

PHP5引用对象的语法如下:

$obj->method()->method2() ;

15、_autoload()方法

_autoload()是PHP5提供的魔术方法(Magic Method)之一,可以实现文件以及类的自动加载。我们在编写面向对象应用程序时,为了查找和方便规范,一般每定义一个类都会分别保存成一个PHP源文件,这样在调用这些类时,在脚本中要包含这些类文件(一个文件要引入很多的类库),有时会很多,有时候显得比较麻烦。那么在PHP5中,可以定义一个_autoload()方法,可以实现自动调用要使用的类,而不需要的类可以不必再重复包含。

以下方法PHP将尝试调用传递过来的以$class_name变量命名的文件,并创建不同的对象实例。

function _autoload($class_name){

include("libs/".$class_name.".inc.php) ;

}

$DB = new Mysql() ;

$Smarty = new Smarty() ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值