`
lebwade
  • 浏览: 2079 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

PHP 5.3中的新特性

阅读更多

一.PHP 5.3中的新特性
  • 支持命名空间Namespace
毫无疑问,命名空间是PHP5.3所带来的最重要的新特性。有了命名空间的概念,在开发大型站点时,就比较容易设计出灵活的结构,同时避免不同包中的类名或变量名产生冲突。

在PHP5.3之前,惯例的划分Package的办法是通过目录名来分隔代码文件,代码中的类名则用下划线_来表示目录。例如

 

 

代码示例:
<?php
class
 Zend_Db_Table_Select {}
// 
表示当前这个类的文件位于Zend/Db/Table/Select目录下
?>

 

 

 

这样的命名方式被PEAR、Zend Framework及各种PHP项目广泛采用。虽然该方法可以避免不同包或类库中的类名产生冲突,但在书写代码的时候显得较为麻烦和笨拙。

在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符为反斜杆\。
 
 

 

代码示例:
<?php
namespace
 Zend\Db\Table;
class Select 
{}
?>

 

 

这样即使其它命名空间下存在名为Select的类,程序在调用时也不会产生冲突。代码的可读性也有所增加。
  • 支持延迟静态绑定(Late Static Binding
在PHP5中,我们可以在类中通过self关键字或者__CLASS__来判断或调用当前类。但有一个问题,如果我们是在子类中调用,得到的结果将是父类。因为在继承父类的时候,静态成员就已经被绑定了。例如:
 
 
代码示例:
<?php
class 
{
    public static function 
who
() {
        echo 
__CLASS__
;
    }
    public static function 
test
() {
        
self::who
();
    }
}

class 
extends 
{
    public static function 
who
() {
         echo 
__CLASS__
;
    }
}

B::test
();
?>
以上代码输出的结果是:
A

 

 

 

这和我们的预期不同,我们原来想得到子类的相应结果。

PHP 5.3.0中增加了一个static关键字来引用当前类,即实现了延迟静态绑定:
 
代码示例:
<?php
class 
{
    public static function 
who
() {
        echo 
__CLASS__
;
    }
    public static function 
test
() {
        static::
who(); // 这里实现了延迟的静态绑定

    
}
}

class 
extends 
{
    public static function 
who
() {
         echo 
__CLASS__
;
    }
}

B::test
();
?>
以上代码输出的结果是:
B
 
  • 支持goto语句
多数计算机程序设计语言中都支持无条件转向语句goto,当程序执行到goto语句时,即转向由goto语句中的标号指出的程序位置继续执行。尽管goto语句有可能会导致程序流程不清晰,可读性减弱,但在某些情况下具有其独特的方便之处,例如中断深度嵌套的循环和if语句。
 
 
代码示例:
<?php
goto a;
echo 
'Foo';
 
a:
echo 
'Bar';

for($i=0,$j=50$i<100$i++) {
  while(
$j--) {
    if(
$j==17) goto end
  }  
}
echo 
"i = $i";
end:
echo 
'j hit 17';
?>
  • 支持闭包、Lambda/Anonymous函数
闭包(Closure)函数和Lambda函数的概念来自于函数编程领域。例如JavaScript 是支持闭包和lambda 函数的最常见语言之一。
PHP中,我们也可以通过create_function()在代码运行时创建函数。但有一个问题:创建的函数仅在运行时才被编译,而不与其它代码同时被编译成执行码,因此我们无法使用类似APC这样的执行码缓存来提高代码执行效率。

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

 

代码示例:
<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return 
strtoupper($match[1]);
}, 
'hello-world');
// 输出 helloWorld
 
$greet = function($name)
{
    
printf("Hello %s\r\n"$name);
};

$greet('World');
$greet('PHP');
 
//...在某个类中
$callback =      function ($quantity$product) use ($tax, &$total)         {
   
$pricePerItem constant(__CLASS__ "::PRICE_" .  strtoupper($product));
   
$total += ($pricePerItem $quantity) * ($tax 1.0);
 };
array_walk($products$callback);
?>
 
 
  • 新增两个魔术方法__callStatic()__invoke()

PHP中原本有一个魔术方法__call(),当代码调用对象的某个不存在的方法时该魔术方法会被自动调用。新增的__callStatic()方法则只用于静态类方法。当尝试调用类中不存在的静态方法时,__callStatic()魔术方法将被自动调用。

 

 
代码示例:
<?php
class MethodTest 
{
    public function 
__call($name$arguments
) {
        
// 参数 $name 大小写敏感

        
echo "调用对象方法 '$name' "
             
implode(' -- '$arguments). "\n"
;
    }

    
/**  PHP 5.3.0 以上版本中本类方法有效
  */
    
public static function __callStatic($name$arguments
) {
        
// 参数 $name 大小写敏感

        
echo "调用静态方法 '$name' "
             
implode(' -- '$arguments). "\n"
;
    }
}

$obj = new MethodTest
;
$obj->runTest('通过对象调用'
);

MethodTest::runTest('静态调用');  
// As of PHP 5.3.0
?>
以上代码执行后输出如下:

调用对象方法'runTest' –- 通过对象调用
调用静态方法'runTest' –- 静态调用
 

 

以函数形式来调用对象时,__invoke()方法将被自动调用。

 
 
 
代码示例:
<?php
class MethodTest 
{
    public function 
__call($name$arguments
) {
        
// 参数 $name 大小写敏感

        
echo "Calling object method '$name' "
             
implode(', '$arguments). "\n"
;
    }

    
/**  PHP 5.3.0 以上版本中本类方法有效
  */
    
public static function __callStatic($name$arguments
) {
        
// 参数 $name 大小写敏感

        
echo "Calling static method '$name' "
             
implode(', '$arguments). "\n"
;
    }
}

$obj = new MethodTest
;
$obj->runTest('in object context'
);

MethodTest::runTest('in static context');  
// As of PHP 5.3.0
?>
  • 新增Nowdoc语法,用法和Heredoc类似,但使用单引号。Heredoc则需要通过使用双引号来声明。
Nowdoc中不会做任何变量解析,非常适合于传递一段PHP代码。
 
 
 
代码示例:
<?php
 
// Nowdoc 单引号PHP 5.3之后支持
$name 'MyName';

echo <<<'EOT'
My name is "$name". 
EOT;
 
//上面代码输出 My name is "$name". ((其中变量不被解析)
// Heredoc不加引号
echo <<<FOOBAR
Hello World!
FOOBAR;
 
//或者双引号 PHP 5.3之后支持
echo <<<"FOOBAR"
Hello World!
FOOBAR;
 
?>
 
  • 支持通过Heredoc来初始化静态变量、类成员和类常量。
代码示例:
<?php
// 静态变量

function foo()
{
    static 
$bar 
= <<<LABEL
Nothing in here...
LABEL;
}

// 类成员、常量

class foo
{
    const 
BAR 
= <<<FOOBAR
Constant example
FOOBAR;

    public 
$baz 
= <<<FOOBAR
Property example
FOOBAR;
}
?>
  • 在类外也可使用const来定义常量
PHP中定义常量通常是用这种方式:
 
 
代码示例:
<?php
define
("CONSTANT""Hello world.");
?>

 

PHP5.3新增了一种常量定义方式:

 
 
代码示例:
<?php
const 
CONSTANT 'Hello World';
?>
  • 三元运算符增加了一个快捷书写方式: ?:
原本格式为是(expr1) ? (expr2) : (expr3) 
如果expr1结果为True,则返回expr2的结果。
PHP5.3新增一种书写方式,可以省略中间部分,书写为expr1 ?: expr3
如果expr1结果为True,则返回expr1的结果
  • HTTP状态码在200-399范围内均被认为访问成功
  • 支持动态调用静态方法
代码示例:
<?php 
class Test 

    public static function testgo() 
    { 
         echo "gogo!"
    } 


$class 'Test'
$action 'testgo'
$class::$action();  //输出 "gogo!" 
?>
  • 支持嵌套处理异常(Exception)
  • 新的垃圾收集器(GC),并默认启用
二.PHP5.3中其它值得注意的改变

 

1.      修复了大量bug

2.      PHP性能提高

3.      php.ini中可使用变量

4.      mysqlnd进入核心扩展 理论上说该扩展访问mysql速度会较之前的MySQL  MySQLi 扩展快(参见http://dev.mysql.com/downloads/connector/php-mysqlnd/
5.      ext/phar、ext/intl、ext/fileinfo、ext/sqlite3和ext/enchant等扩展默认随PHP绑定发布。其中Phar可用于打包PHP程序,类似于Java中的jar机制。
6.      ereg正则表达式函数不再默认可用,请使用速度更快的PCRE 正则表达式函数
结语:
PHP 5.3是一个有很大改进的PHP版本,但它仍然遵循着PHP的设计原则强大、易用。 PHP5.3一方面在面向对象开发等方面有所加强,使PHP更合适于进行企业应用开发,另一方面也增加了不少实用的语法特性和新扩展。我们期待着它能够早日稳定,成为WEB开发中的又一个利器。

分享到:
评论

相关推荐

    PHP5.3新特性

    PHP5.3是PHP编程语言的一个重要版本更新,它在2009年发布,带来了多项新特性和改进。以下是根据文件提供的信息,对PHP5.3新特性知识点的详细总结: 1. 命名空间的引入 命名空间是PHP5.3中最大的一个新增功能。它为...

    PHP 5.3新特性.pdf

    PHP 5.3新特性.pdf

    PHP5.3最新版本

    PHP5.3是PHP语言的一个重要版本,发布于2010年,它引入了许多新特性和改进,为开发者提供了更强大的工具和更高的性能。在这个版本中,PHP进行了许多内部优化,增强了其在Web开发中的功能,特别是对于大型应用程序的...

    PHP5.3.2011中文帮助文档手册

    PHP5.3版本是PHP的一个重要里程碑,它引入了许多新特性、改进和优化,以提升性能和开发效率。2011年的修订版中文帮助文档手册为中文开发者提供了详尽的指导,帮助他们理解和利用PHP5.3的新功能。 **主要特性与更新*...

    php5.3php_curl

    描述中提到“php5.3X64位支持win2008r2”,这意味着这个cURL扩展是为64位的PHP 5.3编译的,并且适用于Windows Server 2008 R2操作系统。Windows Server 2008 R2是一个基于Windows 7的服务器操作系统,广泛用于企业...

    php5.3 64位WampServer

    总的来说,"php5.3 64位WampServer"是开发人员在Windows环境中进行PHP开发的理想工具,尤其是对于那些依赖于PHP 5.3特性的项目。它的集成环境使得本地开发和测试变得更加便捷,而64位版本则确保了高效的数据处理能力...

    php5.3版本中文全手册及正确的打开方式

    PHP 5.3 版本是 PHP 语言发展的一个重要里程碑,它引入了许多新特性、改进和优化,为开发者提供了更强大的功能和更好的性能。这份中文全手册是学习和掌握 PHP 5.3 的宝贵资源,它涵盖了语言基础、函数库、面向对象...

    php5.3安装包(LINUX)

    PHP 5.3是PHP语言的一个重要版本,它在2010年发布,引入了许多新特性、性能优化以及安全改进。在Linux环境下安装PHP 5.3是为服务器配置Web开发环境的关键步骤。以下是对PHP 5.3在Linux系统安装过程中的详细解释和...

    php5.3的memcache

    PHP5.3是PHP的一个重要版本,引入了新的特性并修复了一些问题。由于PHP5.3是非线程安全的,因此在选择Memcache扩展时,需要使用与之匹配的非线程安全版本。描述中提到“好些都是单独版本”,这意味着针对特定PHP...

    PHP.zip_php5.3_php5.3 chm

    PHP(PHP: Hypertext Preprocessor)是一种广泛使用的开源脚本...《PHP5.3参考手册》正是为了帮助开发者掌握这些技术而编写的,包含了全面的文档和实例,对于学习和查阅PHP 5.3的特性和用法,无疑是一份宝贵的资源。

    兼容到php5.3以上(php5.6,php7)的Smtp类

    标题提到的"兼容到php5.3以上(php5.6,php7)的Smtp类"正是为了解决这个问题。在PHP 5.3及以上版本中,有一些函数发生了变化或被废弃,导致基于早期版本PHP编写的SMTP类无法正常工作。描述中提到的"email.class....

    PHP_5.3_与_PHP_5.2_开发区别和新特性

    升级到 PHP 5.3 时,开发者需要注意代码中可能存在的与新特性冲突的地方,确保所有功能都能正常工作。同时,利用这些新特性可以使代码更加优雅、高效。名称空间和闭包尤其对大型项目和框架开发有着显著的改进。

    PHP5.3到7的特性总结

    ### PHP5.3到PHP7的新特性总结 ...通过以上分析可以看出,从PHP5.3升级到PHP7的过程中,不仅解决了许多遗留问题,还引入了许多新特性,极大地提升了开发效率和程序性能。对于开发者而言,掌握这些新特性是非常重要的。

    php5.3-php5.4mongo扩展

    本文所提及的资源“php5.3-php5.4mongo扩展”正好解决了这个问题,它包含了适用于不同环境的预编译扩展,确保了在PHP 5.3和5.4版本下的可用性。 在提供的压缩包文件中,有四个不同版本的扩展: 1. ...

    php_solr.dll ,php5.3版本

    描述中提到“php5.3版本的php_solr.dll,很难找到的哦”,这暗示了几个关键点: 1. **兼容性问题**:随着 PHP 不断更新,旧版本的支持逐渐减少,像 PHP 5.3 这样的较早版本的扩展可能难以在官方源或常规渠道找到。 2...

    PHP 5.3入门经典(所有的源码)

    在PHP 5.3版本中,引入了一些重要的新特性,这些特性对于提升开发效率和代码质量起到了关键作用。首先,让我们了解一下这个版本中的主要改进: 1. **命名空间(Namespaces)**:这是PHP 5.3引入的一个重要特性,...

    php_mongo.dll php5.3 vc6

    标题中的"php_mongo.dll php5.3 vc6"指的是PHP的一个扩展模块,用于连接和操作MongoDB数据库。这个特定的版本是为PHP 5.3编译的,并且使用了Visual C++ 6 (VC6)作为编译器。在PHP环境中,扩展通常以动态链接库(DLL...

    PHP5.3入门经典(Beginning PHP 5.3)源码+中文PDF+英文PDF

    PHP5.3是该语言的一个重要版本,引入了许多新特性,包括命名空间、晚期静态绑定、闭包等,这些在本书中都会详尽讲解。 1. **命名空间(Namespace)**:PHP5.3引入了命名空间的概念,允许开发者在同一个项目中使用...

    php5.3-dxk

    PHP 5.3是该语言的一个重要版本,它引入了许多新特性,增强了性能和稳定性,为开发者提供了更为强大的工具。本文将深入探讨PHP 5.3的改进之处,以及在DXKphp框架中的具体应用。 1. PHP 5.3的关键特性 - 函数命名...

    php5.3版本开发环境源代码

    PHP5.3是PHP发展过程中的一个重要里程碑,引入了许多新特性,优化了性能,并修复了大量的bug,为开发者提供了更为强大的工具和更稳定的开发环境。本文将深入探讨PHP5.3版本的开发环境源代码,揭示其中的关键知识点。...

Global site tag (gtag.js) - Google Analytics