欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > 网站制作教程 >

PHP5.3言语特性

发表于2019-04-24 16:12| 次阅读| 来源网络整理| 作者session

摘要:PHP5.3言语特性
PHP5.3言语特性

  功能降职

  php 5.3的总体功能降职了5 - 15%

  md5()快了10-15%

  Better stack implementation in the engine

  Constants移到read-only内存里

  exception解决过程改进(简化,opcodes更少)

  (require/include)_once改进,去掉反复open

  Smaller binary size & startup size with gcc4

  新言语特性

  __DIR__

  在5.3以前,为了获得以后脚本的目录,需求一次函数调用

  CODE:

  echo dirname(__FILE__); // < PHP 5.3

  在5.3,只有要一个魔术常量__DIR__就处理了。

  CODE:

  echo __DIR__; // >= PHP 5.3

  ?:操作符

  便捷的?:操作符,可能从两个值/表达式中快速取得非空值。

  CODE:

  $a = true ?: false; // true

  $a = false ?: true; // true

  $a = "" ?: 1; // 1

  $a = 0 ?: 2; // 2

  $a = array() ?: array(1); // array(1);

  $a = strlen("") ?: strlen("a"); // 1

  __callStatic()

  新增了魔术方法__callStatic,性能和__call类似,然而仅对static方法有效。

  CODE:

  class helper {

         static function __callStatic($name, $args) {

                 echo $name.'('.implode(',', $args).')';

         }

  }

  helper::test("foo","bar"); // test(foo,bar)

  动态调用static方法

  动态的调用静态方法?动静联合。

  CODE:

  class helper {

         static function foo() { echo __METHOD__; }

  }

  $a = "helper";

  $b = "foo";

  $a::$b(); // helper::foo

  Late Static Binding

  不知道怎样译,能够留个原文更容易理解。静态方法的事情解决机遇有变化,以前是在编译期解决,如今是执行时期解决。

  在php 5.3之前,下面的代码会输出一个A,然而这不是我们要的,whoami方法已经在class B中重新定义,它本该输出B才符合我们想当然的思想。

  CODE:

  class A {

    public static function whoami() {

       echo __CLASS__;

    }

    public static function identity() {

      self::whoami();

    }

  }

  class B extends A {

    public static function whoami() {

       echo __CLASS__;

    }

  }

  B::identity(); // A <-- PHP <5.3

  下面代码中利用了static::whoami()来调用静态方法。php 5.3之后,因为__CLASS__是在执行期被解决,那么这个例子中能顺利抓到class B。

  CODE:

  class A {

    public static function whoami() {

       echo __CLASS__;

    }

    public static function identity() {

       static::whoami();

    }

  }

  class B extends A {

    public static function whoami() {

       echo __CLASS__;

    }

  }

  B::identity(); // B <-->= PHP 5.3

  mysqlnd

  mysqlnd成为php 5.3中的默许mysql驱动,它有如下优点:

  mysqlnd更容易编译: 由于它是php源码树的一个组成局部

  mysqlnd和php内部机制联合更紧密,是优化过的mysql驱动

  mysqlnd更节俭内存,从测试后果来看,比传统的mysql扩充节俭40%的内存

  mysqlnd更快

  mysqlnd提供了丰富的功能统计性能

  mysqlnd利用了PHP license以避免不必要的版权纠纷

  这个改动应同时对mysql和pdo_mysql扩充生效。

  mysqlnd是什么

  mysqlnd是mysql原装的php驱动

  然而PDO_MySQL临时还不支持mysqlnd,目前只要mysql(i)扩充可能用到