php5.3与5.3以下版本的区别

如题所述

Namespaces
php 5.3最大的改动,毫无疑问就是Namespaces(此前有一篇相关的PHP Namespaces FAQ)。这给php开发人员带来的好处不少,广为人们所诟病的函数命名问题也得到了解决。代码更清晰
5.3之前常见的代码,需要自定义前缀区分函数和类名PLAIN TEXTCODE:function MY_wrapper() {}
class MY_DB { }
define('MY_CONN_STR', '');
MY_wrapper();
new MY_DB();
MY_CONN_STR;
使用名称空间之后,代码看上去更加clean。PLAIN TEXTCODE:namespace MY;
function wrapper() {}
class DB { }
const CONN_STR = '';
use MY AS MY;
wrapper();
new DB();
CONN_STR;
一个文件中定义了多个namespace
如果一个文件中定义了多个namespace,应该怎样处理?PLAIN TEXTCODE:namespace LIB;
class MySQL {}
class SQLite {}
$b = new SQLite();
namespace LIB_EXTRA;
class MScrypt {}
$a = new MScrypt();
var_dump(
get_class($a),
get_class($b)
);
以上代码输出为:PLAIN TEXTCODE:string(18)"LIB_EXTRA::MScrypt"
string(11)"LIB::SQLite"
php是解释执行的语言,以上结果合情合理。namespace的优先级
namespace中定义的函数,类和常量优先,其次才是全局的。PLAIN TEXTCODE:namespace foo;
function strlen($foo) { return htmlentities($foo); }
echo strlen("test"); // test
echo ::strlen("test"); // 4
echo namespace::strlen("test"); // test
namespace和autoload的友情
autoload会根据namespace名称以及class名称来解析类文件位置
仅当namespace和全局范围都没找到class定义的情况下,autoload才会被触发
在namespace中定义的__autoload不会被自动调用
PLAIN TEXT

CODE:
function __autoload($var) { var_dump($var); } // LIB::foo
require "./ns.php"; /*
<?php
namespace LIB;
new foo();
*/
namespace一些辅料
PLAIN TEXTCODE:namespace really::long::pointlessly::verbose::ns;
__NAMESPACE__; // 新增的魔法常量,表示当前namespace名称
class a{}
get_class(new a()); // really::long::pointlessly::verbose::ns::a
use really::long::pointlessly::verbose::ns::a AS b;// 从名称空间中引用一个类
注:这里的内容节选自pdfIntroduction to PHP 5.3 Slides,后文不再复述。性能提升
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以前,为了获得当前脚本的目录,需要一次函数调用PLAIN TEXTCODE:echo dirname(__FILE__); // < PHP 5.3
在5.3,只需要一个魔术常量__DIR__就解决了。PLAIN TEXTCODE:echo __DIR__; // >= PHP 5.3
?:操作符
便捷的?:操作符,可以从两个值/表达式中快速取得非空值。PLAIN TEXTCODE:$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方法有效。PLAIN TEXTCODE:class helper {
static function __callStatic($name, $args) {
echo $name.'('.implode(',', $args).')';
}
}
helper::test("foo","bar"); // test(foo,bar)
动态调用static方法
动态的调用静态方法?动静结合。PLAIN TEXTCODE: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才符合咱们想当然的思维。PLAIN TEXTCODE: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。PLAIN TEXTCODE: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驱动但是PDO_MySQL暂时还不支持mysqlnd,目前只有mysql(i)扩展可以用到之前介绍的php 5.3的新特性,都是方便开发人员的东东。下面介绍个很讨虚拟主机提供商喜欢的特性。增强的ini文件支持
CGI/ FastCGI支持类似.htaccess的INI配置
每个目录下都可以有INI设置,ini的文件名取决于php.ini的配置,但是[PATH=/var/www/domain.com], [HOST=www.domain.com]段落的设置用户不能修改。
增强的error handling
允许在ini文件中定义变量和常量,可以在程序中直接调用。
附上一段ini文件的例子PLAIN TEXTCODE:#用户自定义的php.ini文件名(.htaccess). 默认是".user.ini"
user_ini.filename=".user.ini"

#如果要禁用这个特性,设置为空值即可
user_ini.filename=

#用户自定义的php.ini文件TTL时长(time-to-live),单位为秒,我理解为缓存过期时间。默认为300秒
user_ini.cache_ttl=300

[PATH=/var/www/domain.com]
variables_order = GPC
safe_mode =1

[my variables]
somevar = “1234”
anothervar = ${somevar}; anothervar == somevar

[ini arrays]
foo[bar]=1
foo[123]=2
foo[]=3
温馨提示:内容为网友见解,仅供参考
无其他回答

thinkphp需要多高的php版本
thinkphp3.1(包括3.1)版本要求PHP运行环境需达到5.3(包括5.3)及以上版本。这是因为较低版本的PHP在处理某些复杂的MYSQL语句时可能出现异常,导致程序无法正确执行。如果使用低于5.3版本的PHP,可能会遇到诸如语法错误、性能下降甚至数据不一致等问题。随着PHP版本的更新,thinkphp3.1也得到了相应的...

win7 winxp php不同点
没有不同。PHP不同只有版本区别。 例如5.3以上和5.3以下是就是区别, 有些函数被淘汰,有加入新的函数

如何选择不同的PHP版本
以下简单介绍不同的PHP之间的区别:PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束 PHP5.2:JSON 支持 PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细...

现在用的最多的是php5.2,然后是5.3 ,你用的5.5一定很多系统都不支持吗...
如果是做程序出售给客户用,那么最好是5.2或5.3的 如果是自己用 版本越高越好 并不是系统不支持高PHP的版本是有的空间商的虚拟主机不支持

现在用php5.3过时吗
不会。如果是做程序出售给客户用,那么最好是5.2或5.3的。如果是自己用 版本越高越好。并不是系统不支持高PHP的版本是有的空间商的虚拟主机不支持。

PHP的版本区别
而如果产品是自己开发自己使用,PHP5.3在某些方面更具优势,在稳定性上更胜一筹,增加了很多PHP5.2所不具有的功能,比如内置php-fpm、更完善的垃圾回收算法、命名空间的引入、sqlite3的支持等等,是部署项目值得考虑的版本,强烈推荐PHP5.3.3。除了版本号的不同,同一版本号的PHP版本也有区别,并且在...

php-5.3.6.tar.gz和php-5.3.6.tar.bz2区别
两个PHP的版本号是一样的。不同的是文件类型。GZ是UNIX系统中的压缩文件,ZIP的Gnu版本,功能和WINRAR一样压缩文件。bz2也是unix下常见的压缩文件格式,是由具有高压缩率的压缩工具bzip2生成,以后缀为.bz2结尾的压缩文件。|不同的是gz型的压缩文件的压缩工具为7-Zip 解压工具为WINZIP、WinMount。

目前的PHP主流版本,4\/5\/6,是哪一个
现在主流的就是5.3-5.5,另就是不存在php6版本,php跳过了6直接发布了7版本,php7的处理是5.x版本的一倍。

php哪个版本比较好哇
性能和安全综合方面,当然是最新稳定版了 实用角度,现在有的系统只支持php5.2,5.3,好点的支持php5.4,很少支持php7 如果你自己写的话,那就选择7,用别人的东西,那就看别人的环境配置要求

xdebug 各版本有什么区别
5.4,32位,线程安全 Windows binaries:PHP 5.2 VC9 (32 bit) (MD5: 4b5e00b0797cf1d1eacef60af13fbd3a)PHP 5.2 VC9 TS (32 bit) (MD5: 3a2e9d33cba0cdcaa6546a7d9d428282)PHP 5.3 VC9 (64 bit) (MD5: c35806f2188b73f0f8e762ebb4ed50a9)PHP 5.3 VC9 (32 bit) (MD5...

相似回答