php 5.3新特性介绍-Php-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝30
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:284回复:0

  php 5.3新特性介绍

楼主#
更多 发布于:2016-05-13 15:02


php 5.3最大的改动,毫无疑问即是Namespaces(此前有一篇有关的PHP Namespaces FAQ)。这给php开发人员带来的优点不少,广为大家所诟病的函数命名疑问也得到了处理。
之前连续介绍了php 5.3的一些新特性,恰好上星期看到ZendCon对于5.3的ppt,介绍的更为具体,那么这儿做个归总或者说翻译:)
Namespaces
php 5.3最大的改动,毫无疑问即是Namespaces(此前有一篇有关的PHP Namespaces FAQ)。这给php开发人员带来的优点不少,广为大家所诟病的函数命名疑问也得到了处理。
代码更明晰
5.3之前多见的代码,需求自界说前缀区别函数和类名
PLAIN TEXT
CODE:
function MY_wrapper() {}
class MY_DB { }
define('MY_CONN_STR', '');
MY_wrapper();
new MY_DB();
MY_CONN_STR;
使用称号空间以后,代码看上去愈加clean。
PLAIN TEXT
CODE:
namespace MY;
function wrapper() {}
class DB { }
const CONN_STR = '';
use MY AS MY;
wrapper();
new DB();
CONN_STR;
一个文件中界说了多个namespace
假如一个文件中界说了多个namespace,应该如何处理?
PLAIN TEXT
CODE:
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 TEXT
CODE:
string(18) "LIB_EXTRA::MScrypt"
string(11) "LIB::SQLite"
php是解说履行的言语,以上结果入情入理。
namespace的优先级
namespace中界说的函数,类和常量优先,其次才是大局的。
PLAIN TEXT
CODE:
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"; /*
namespace LIB;
new foo();
*/
namespace一些辅料
PLAIN TEXT
CODE:
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; // 从称号空间中引证一个类
注:这儿的内容节选自pdf Introduction 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 TEXT
CODE:
echo dirname(__FILE__); // < PHP 5.3
在5.3,只需求一个戏法常量__DIR__就处理了。
PLAIN TEXT
CODE:
echo __DIR__; // >= PHP 5.3
?:操作符
便捷的?:操作符,能够从两个值/表达式中迅速取得非空值。
PLAIN TEXT
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办法有用。
PLAIN TEXT
CODE:
class helper {
static function __callStatic($name, $args) {
echo $name.'('.implode(',', $args).')';
}
}
helper::test("foo","bar"); // test(foo,bar)
动态调用static办法
动态的调用静态办法?动态联系。
PLAIN TEXT
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才契合我们想当然的思想。
PLAIN TEXT
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。
PLAIN TEXT
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驱动
可是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 TEXT
CODE:
#用户自界说的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






[font=Tahoma  ]


优质IT资源分享社区为你提供此文。
本站有大量优质php教程视频,资料等资源,包含php基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

php教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客