一.PHP 5.3中的新特性
毫无疑问,命名空间是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 A { public static function who() { echo __CLASS__; } public static function test() { self::who(); } }
class B extends A { public static function who() { echo __CLASS__; } }
B::test(); ?>
|
以上代码输出的结果是: A
|
这和我们的预期不同,我们原来想得到子类的相应结果。
PHP 5.3.0中增加了一个static关键字来引用当前类,即实现了延迟静态绑定:
代码示例:
|
<?php class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 这里实现了延迟的静态绑定 } }
class B extends A { public static function who() { echo __CLASS__; } }
B::test(); ?>
|
以上代码输出的结果是: B
|
多数计算机程序设计语言中都支持无条件转向语句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'; ?>
|
闭包(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; } ?>
|
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中其它值得注意的改变
2. PHP性能提高
3. php.ini中可使用变量
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是PHP编程语言的一个重要版本更新,它在2009年发布,带来了多项新特性和改进。以下是根据文件提供的信息,对PHP5.3新特性知识点的详细总结: 1. 命名空间的引入 命名空间是PHP5.3中最大的一个新增功能。它为...
PHP 5.3新特性.pdf
PHP5.3是PHP语言的一个重要版本,发布于2010年,它引入了许多新特性和改进,为开发者提供了更强大的工具和更高的性能。在这个版本中,PHP进行了许多内部优化,增强了其在Web开发中的功能,特别是对于大型应用程序的...
PHP5.3版本是PHP的一个重要里程碑,它引入了许多新特性、改进和优化,以提升性能和开发效率。2011年的修订版中文帮助文档手册为中文开发者提供了详尽的指导,帮助他们理解和利用PHP5.3的新功能。 **主要特性与更新*...
描述中提到“php5.3X64位支持win2008r2”,这意味着这个cURL扩展是为64位的PHP 5.3编译的,并且适用于Windows Server 2008 R2操作系统。Windows Server 2008 R2是一个基于Windows 7的服务器操作系统,广泛用于企业...
总的来说,"php5.3 64位WampServer"是开发人员在Windows环境中进行PHP开发的理想工具,尤其是对于那些依赖于PHP 5.3特性的项目。它的集成环境使得本地开发和测试变得更加便捷,而64位版本则确保了高效的数据处理能力...
PHP 5.3 版本是 PHP 语言发展的一个重要里程碑,它引入了许多新特性、改进和优化,为开发者提供了更强大的功能和更好的性能。这份中文全手册是学习和掌握 PHP 5.3 的宝贵资源,它涵盖了语言基础、函数库、面向对象...
PHP 5.3是PHP语言的一个重要版本,它在2010年发布,引入了许多新特性、性能优化以及安全改进。在Linux环境下安装PHP 5.3是为服务器配置Web开发环境的关键步骤。以下是对PHP 5.3在Linux系统安装过程中的详细解释和...
PHP5.3是PHP的一个重要版本,引入了新的特性并修复了一些问题。由于PHP5.3是非线程安全的,因此在选择Memcache扩展时,需要使用与之匹配的非线程安全版本。描述中提到“好些都是单独版本”,这意味着针对特定PHP...
PHP(PHP: Hypertext Preprocessor)是一种广泛使用的开源脚本...《PHP5.3参考手册》正是为了帮助开发者掌握这些技术而编写的,包含了全面的文档和实例,对于学习和查阅PHP 5.3的特性和用法,无疑是一份宝贵的资源。
标题提到的"兼容到php5.3以上(php5.6,php7)的Smtp类"正是为了解决这个问题。在PHP 5.3及以上版本中,有一些函数发生了变化或被废弃,导致基于早期版本PHP编写的SMTP类无法正常工作。描述中提到的"email.class....
升级到 PHP 5.3 时,开发者需要注意代码中可能存在的与新特性冲突的地方,确保所有功能都能正常工作。同时,利用这些新特性可以使代码更加优雅、高效。名称空间和闭包尤其对大型项目和框架开发有着显著的改进。
### PHP5.3到PHP7的新特性总结 ...通过以上分析可以看出,从PHP5.3升级到PHP7的过程中,不仅解决了许多遗留问题,还引入了许多新特性,极大地提升了开发效率和程序性能。对于开发者而言,掌握这些新特性是非常重要的。
本文所提及的资源“php5.3-php5.4mongo扩展”正好解决了这个问题,它包含了适用于不同环境的预编译扩展,确保了在PHP 5.3和5.4版本下的可用性。 在提供的压缩包文件中,有四个不同版本的扩展: 1. ...
描述中提到“php5.3版本的php_solr.dll,很难找到的哦”,这暗示了几个关键点: 1. **兼容性问题**:随着 PHP 不断更新,旧版本的支持逐渐减少,像 PHP 5.3 这样的较早版本的扩展可能难以在官方源或常规渠道找到。 2...
在PHP 5.3版本中,引入了一些重要的新特性,这些特性对于提升开发效率和代码质量起到了关键作用。首先,让我们了解一下这个版本中的主要改进: 1. **命名空间(Namespaces)**:这是PHP 5.3引入的一个重要特性,...
标题中的"php_mongo.dll php5.3 vc6"指的是PHP的一个扩展模块,用于连接和操作MongoDB数据库。这个特定的版本是为PHP 5.3编译的,并且使用了Visual C++ 6 (VC6)作为编译器。在PHP环境中,扩展通常以动态链接库(DLL...
PHP5.3是该语言的一个重要版本,引入了许多新特性,包括命名空间、晚期静态绑定、闭包等,这些在本书中都会详尽讲解。 1. **命名空间(Namespace)**:PHP5.3引入了命名空间的概念,允许开发者在同一个项目中使用...
PHP 5.3是该语言的一个重要版本,它引入了许多新特性,增强了性能和稳定性,为开发者提供了更为强大的工具。本文将深入探讨PHP 5.3的改进之处,以及在DXKphp框架中的具体应用。 1. PHP 5.3的关键特性 - 函数命名...
PHP5.3是PHP发展过程中的一个重要里程碑,引入了许多新特性,优化了性能,并修复了大量的bug,为开发者提供了更为强大的工具和更稳定的开发环境。本文将深入探讨PHP5.3版本的开发环境源代码,揭示其中的关键知识点。...