免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1476 | 回复: 1
打印 上一主题 下一主题

php5 学习记录(1) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-27 15:54 |只看该作者 |倒序浏览
php5 学习记录(1)





一、php5主要的新特性

        1.public /private/protected访问修饰符,针对对象中的方法和属性。

        可以使用通用的面向对象访问修饰符来控制方法和属性的访问级别:

        class MyClass {

Php代码
  1. 1.    private $id = 18;   
  2. 2.  
  3. 3.    public function getId() {   
  4. 4.        return $this->id;   
  5. 5.    }   
  6. 6.}  
  7.     private $id = 18;

  8.     public function getId() {
  9.         return $this->id;
  10.     }
  11. }  
复制代码
2.统一的构造函数名称__construct().

        为避免构造函数的名字和类的名字相同,现在用__construct()来声明,从而让你更加容易在类的分层中转移类:



Php代码
  1. 1.class MyClass {   
  2. 2.    function __construct() {   
  3. 3.        print 'Inside constructor';   
  4. 4.    }   
  5. 5.}  
  6. class MyClass {
  7.     function __construct() {
  8.         print 'Inside constructor';
  9.     }
  10. }
复制代码
3.通过__destructor()定义对象的析构方法。

        允许定义一个析构函数来注销一个对象:



Php代码
  1. 1.class MyClass {   
  2. 2.    function __destruct() {   
  3. 3.        print ' Destroying object';   
  4. 4.    }   
  5. 5.}  
  6. class MyClass {
  7.     function __destruct() {
  8.         print ' Destroying object';
  9.     }
  10. }
复制代码
4.接口。

        一个使用接口的类可以加载不止一个相关的接口。一个类只能继承自另一个类,但是可以实现任意多个接口:



Php代码
  1. 1.interface Display {   
  2. 2.    function display();   
  3. 3.}   
  4. 4.class Circle implements Display {   
  5. 5.    function dispaly() {   
  6. 6.        print ' Dispalying circle \n';   
  7. 7.    }   
  8. 8.}  
  9. interface Display {
  10.     function display();
  11. }
  12. class Circle implements Display {
  13.     function dispaly() {
  14.         print ' Dispalying circle \n';
  15.     }
  16. }
复制代码
5.instanceof操作符。

        instanceof用来检测一个给定的对象是否属于(继承于)某个类(class)、某个类的子类、某个接口(interface)。如果是则返回true。

       



Java代码
  1. 1.if ($obj instanceof Circle) {   
  2. 2.    print '$obj is a Circle';   
  3. 3.}  
  4. if ($obj instanceof Circle) {
  5.     print '$obj is a Circle';
  6. }  
复制代码
6.Final 标记方法。

        Final关键字允许你用来标识方法,使其不能被子类重载。



Php代码
  1. 1.class MyClass {   
  2. 2.    final function getBaseClassName() {   
  3. 3.        return __CLASS__;   
  4. 4.    }   
  5. 5.}  
  6. class MyClass {
  7.     final function getBaseClassName() {
  8.         return __CLASS__;
  9.     }
  10. }  
复制代码
7.Final标记类。

        声明一个类为final类型后,它将不能被继承。下面的例子将报错。



Php代码
  1. 1.final class FinalClass {   
  2. 2.}   
  3. 3.  
  4. 4.class BogusClass extends FinalClass {   
  5. 5.}  
  6. final class FinalClass {
  7. }

  8. class BogusClass extends FinalClass {
  9. }
复制代码
8.强制复制对象

        为了克隆一个对象,你必须使用clone关键字。你可以再类中声明一个__clone()方法,它将在克隆过程中被调用(调用在属性和方法从原对象复制过来以后进行):



Php代码
  1. 1.class MyClas {   
  2. 2.    function __clone() {   
  3. 3.        print 'Object is being cloned';   
  4. 4.    }   
  5. 5.}   
  6. 6.$obj = new MyClass();   
  7. 7.$obj_copy = clone $obj;  
  8. class MyClas {
  9.     function __clone() {
  10.         print 'Object is being cloned';
  11.     }
  12. }
  13. $obj = new MyClass();
  14. $obj_copy = clone $obj;  
复制代码
9.类中的常量。

        类定义中现在包含常量,而且可以用类来引用:



Php代码
  1. 1.class MyClass {   
  2. 2.    const SUCCESS = "Success";   
  3. 3.    const FAILURE = "Failure";   
  4. 4.}   
  5. 5.print MyClass::SUCCESS;  
  6. class MyClass {
  7.     const SUCCESS = "Success";
  8.     const FAILURE = "Failure";
  9. }
  10. print MyClass::SUCCESS;
复制代码
10.静态方法。

        你现在可以定义静态方法,不用实例化就能使用他们。静态方法不能使用$this变量,因为它们并没有绑定到任何具体的对象:

        class MyClass {

Php代码
  1. 1.    static function helloWorld() {   
  2. 2.        print 'Hello world';   
  3. 3.    }   
  4. 4.}   
  5. 5.MyClass::helloWorld();  
  6.     static function helloWorld() {
  7.         print 'Hello world';
  8.     }
  9. }
  10. MyClass::helloWorld();
复制代码
11.静态成员。

        类的定义现在包含静态成员(属性),可以通过类自身来访问。通常用的最多的是单件(Singleton)模式:



Php代码
  1. 1.class Singleton {   
  2. 2.    static private $instance = NULL;   
  3. 3.    private function __construct() {   
  4. 4.    }   
  5. 5.    static public function getInstance() {   
  6. 6.        if (sell::$instance == NULL) {   
  7. 7.            self::$instance = new Singleton();   
  8. 8.        }   
  9. 9.        return self::$instance;   
  10. 10.    }   
  11. 11.}  
  12. class Singleton {
  13.     static private $instance = NULL;
  14.     private function __construct() {
  15.     }
  16.     static public function getInstance() {
  17.         if (sell::$instance == NULL) {
  18.             self::$instance = new Singleton();
  19.         }
  20.         return self::$instance;
  21.     }
  22. }
复制代码
12.抽象类。

        把类声明为抽象类可以防止它被实例化。但是你可以继承一个抽象类:



Php代码
  1. 1.abstract class MyBaseClass {   
  2. 2.    function dispaly() {   
  3. 3.        print 'Default dispaly routine being called';   
  4. 4.    }   
  5. 5.}  
  6. abstract class MyBaseClass {
  7.     function dispaly() {
  8.         print 'Default dispaly routine being called';
  9.     }
  10. }  
复制代码
13.抽象方法。

        把方法声明为抽象的,以便在继承的子类中再去定义。包含抽象方法的类本身必须是一个抽象类:



Php代码
  1. 1.abstact class MyBaseClass {   
  2. 2.    abstract function dispaly();   
  3. 3.}  
  4. abstact class MyBaseClass {
  5.     abstract function dispaly();
  6. }
复制代码
14.对象类型提示。

        函数声明中可以对参数进行对象类型提示。如果函数调用的时候没有传递正确的对象类型,系统报错:



Php代码
  1. 1.function expectsMyClass(MyClass $obj) {   
  2. 2.}  
  3. function expectsMyClass(MyClass $obj) {
  4. }
复制代码
15.支持连续引用方法返回的对象。

        在PHP4中,你不能直接引用方法返回的对象。你必须先赋值到一个中间变量,然后再使用该变量来引用。

        php 4:



Php代码
  1. 1.$dummy = $obj->method();   
  2. 2.$dummy->method2();  
  3. $dummy = $obj->method();
  4. $dummy->method2();
复制代码
php 5:



Php代码
  1. 1.$obj->method()->method2();  
  2. $obj->method()->method2();
复制代码
16.迭代。

        php5允许php类和php继承类实现iterator接口。在实现迭代接口后,你可以用foreach()语言结构遍历一个类的实例:



Php代码
  1. 1.$obj = new MyIteratorImplementaion();   
  2. 2.foreach ($obj as $value) {   
  3. 3.    print $value;   
  4. 4.}  
  5. $obj = new MyIteratorImplementaion();
  6. foreach ($obj as $value) {
  7.     print $value;
  8. }

  9.        
复制代码
17.__autoload()方法。

        __autoload()函数在你需要使用一个未定义的类的时候自动调用。通过调用这个函数,脚本的引擎在php抛出类未定义的错误之前提供最后一次加载类的机会:



Php代码
  1. 1.function __autoload($class_name) {   
  2. 2.    include_once($class_name . "php");   
  3. 3.}   
  4. 4.$obj = new MyClass();   
  5. 5.$obj2 = new MyClass2();  
  6. function __autoload($class_name) {
  7.     include_once($class_name . "php");
  8. }
  9. $obj = new MyClass();
  10. $obj2 = new MyClass2();  
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-12-27 15:54 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP