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类时,会提示错误不再执行。
          <?php
                final class FinalClass{
                    …………
                }
                class BogusClass extends FinalClass{
                    …………
                }
           ?>
           由于子类不可继承一个final类,上面脚本会报错。
 
    7、对象的克隆
          由于PHP5中对于对象的复制做了改进,不再是在内存中再复制一个对象,而只是复制一个对象的句柄编号(ID),如果要像PHP4那样复制一个对象的所有属性和成员方法,需要使用克隆操作,也就是要声明 __clone()方法,告诉PHP引擎将要执行对象的克隆操作。请见下面的例子:
        <?php
                class MyClass{
                        function __clone(){
                                 echo "对象已被克隆!";
                        }
                }
                $obj = new MyClass();
               //克隆一个新对象 $obj__copy
               $obj_copy = clone $obj;
        ?>
 
    8、类内部的常量定义与引用
          类中可以定义常量,称为类常量,类常量可以在任何位置引用,下面是引用类常量的例子:
         <?php
                 class MyClass{
                          const SUCCESS = "Loading is Success !";
                          const FAILURE = "Loading is Failure!";
                 }
                 //打印MyClass中SUCCESSC常量的值
                echo MyClass::SUCCESS ;
         ?>
 
    9、静态方法定义与引用
          在PHP5中,可以在一个类中定义一些静态(static)方法,这样允许用户使用一个非对象实例的上下文引用,也就是不用声明对象也可以引用一个类中的静态方法,使用::关键字来引用。
          <?php
                  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() ;
 

你可能感兴趣的:(面向对象,职场,新特性,休闲)