• HOME
  • DOCS
  • WTF
  • TECH
  • LIFE
  • PAGES
    • ARCHIVE
    • TAGS
    • ABOUT
    • FRIENDS
    • RSS
  • TOOLS
    • GEO
    • RANDOM()
    • GOO.GL
    • CSS HEART
Aj's Blog

记录时间溜走的瞬间和折腾过的那些事

PHP v5.3 新特性

2012-08-02  TECH  __callStatic  __DIR__  Namespace  Nowdoc  php 5.3  php5  

PHP v5.3 是 PHP5 的一个里程碑版本,加入了大量新特性。

官方通告:http://php.net/releases/5_3_0.php

php 5.3的总体性能提升了5 – 15%

  1. md5()快了10-15%
  2. Better stack implementation in the engine
  3. Constants移到read-only内存里
  4. exception处理过程改进(简化,opcodes更少)
  5. (require/include)_once改进,去掉重复open
  6. Smaller binary size & startup size with gcc4

一、支持命名空间 (Namespace)

命名空间是PHP5.3所带来的最重要的新特性。
有了命名空间的概念,在开发大型站点时,就比较容易设计出灵活的结构,同时避免不同包中的类名、函数名、变量名产生冲突。
这样即使其它命名空间下存在名字相同的情况也不用担心冲突的问题了。代码的可读性也有所增加。

	// A.php
	namespace A;
	function test()
	{
		return "I'm A";
	}

	// B.php
	namespace B;
	function test()
	{
		return "I'm B";
	}

	// C.php
	include 'A.php';
	include 'B.php';
	use A as A;
	use B as B;
	$a = \A\test();
	$b = \B\test();
	echo $a,$b;

二、动态的调用静态方法

	class A
	{
		static function test()
		{
			echo "TEST";
		}
	}
	$a = "A";
	$b = "test";
	$a::$b();

三、 新增 __callStatic 方法

PHP中原本有一个魔术方法__call(),当代码调用对象的某个不存在的方法时该魔术方法会被自动调用。

新增的__callStatic()方法则只用于静态类方法。

当尝试调用类中不存在的静态方法时,__callStatic()魔术方法将被自动调用。

省去了 method_exists 的麻烦。

四、支持闭包、Lambda/Anonymous函数

闭包(Closure)函数和Lambda函数的概念来自于函数编程领域。

例如JavaScript 是支持闭包和 lambda 函数的最常见语言之一。

在PHP中,我们也可以通过create_function()在代码运行时创建函数。

但有一个问题:创建的函数仅在运行时才被编译,而不与其它代码同时被编译成执行码,因此我们无法使用类似APC这样的执行码缓存来提高代码执行效率。

在PHP5.3中,我们可以使用Lambda/匿名函数来定义一些临时使用(即用即弃型)的函数,以作为array_map()/array_walk()等函数的回调函数。

	$a = function(){
		return "TEST";
	};
	echo $a();

五、其他新增特性

获得当前脚本的目录: __DIR__

三元操作符: ?:

新增Nowdoc语法,用法和Heredoc类似,但使用单引号。Heredoc则需要通过使用双引号来声明

	$name = 'jason';

	//不解析$name变量
	echo <<<'EOS'
	My name is $name.
	EOS;

	//解析$name变量
	echo <<<"EOD"
	My name is $name.
	EOD;

	//解析$name变量
	echo <<<EON
	My name is $name.
	EON;
下一篇:   PHP自定义错误处理 set_error_handler
上一篇:   PHP MVC开发日志(三)MS Access数据库转 Mysql
暂无评论

Cancel reply