当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP5.3新特性:新语言特性

PHP
php面向对象全攻略 (十五) 多态的应用
php面向对象全攻略 (十六) 对象的串行化
php面向对象全攻略 (十七) 自动加载类
PHP parse_url 一个好用的函数
PHP 字符串分割和比较
全世界最小的php网页木马一枚 附PHP木马的防范方法
PHP 日期加减的类,很不错
PHP 日期时间函数的高级应用技巧
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Ha0k 0.3 PHP 网页木马修改版
PHP iconv 函数转gb2312的bug解决方法
关于页面优化和伪静态
使用zend studio for eclipse不能激活代码提示功能的解决办法
PHP 身份验证方面的函数
基于OpenCV的PHP图像人脸识别技术
用mysql触发器自动更新memcache的实现代码
php 数学运算验证码实现代码
PHP网站开发方案实例
PHP教程:挖掘细节提升网站性能
搜索引擎技术核心揭密(PHP)

PHP5.3新特性:新语言特性


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 211 ::
收藏到网摘: n/a

性能提升

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)扩展可以用到