免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2829 | 回复: 6
打印 上一主题 下一主题

PHP5.3新特性之语言特性 [复制链接]

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-15 14:59 |只看该作者 |倒序浏览
新的语言特性


1) __DIR__

* 引入 __DIR__ magic常量 定位脚本的目录

echo dirname(__FILE__); // < PHP 5.3
   
/* vs */
   
echo __DIR__; // >= 5.3


2) ?:  操作符
* 允许从2个值的or/and表达式快速的获取一个非空的值
   
$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
   



3) __callStatic()
   
* 等价于 __call() , 但它是为调用静态方法准备的
   
class helper
{
static function __callStatic($name, $args){
echo $name.'('.implode(',' $args).')';
}   
}
   
helper::test("foo", "bar"; // test(foo,bar);


// 动态的函数/方法调用有点慢...

4) 动态的调用静态方法

* php 现在允许 动态的调用静态的方法
   
class helper
{
static function foo(){
echo __METHOD__;`
}   
}
   
$a = "helper";
$b = "foo";
   
$a:b(); // helper::foo

// 动态的函数/方法调用有点慢...

5) 延迟静态绑定

* 静态处理从编译时延迟到执行时
   
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
   
   
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
   

* 小心使用操作码缓存,没有向后兼容



6) MySQLInd

* 特殊的,高速的专门为PHP设计的MySQL调用库接口




* 更好的性能
* 内存的使用优化
* 内置的驱动(不是适应性的再次扩展)
* Many future options due to tight integration with PHP
* 目前还没有PDO_MySQL 支持 mysql(i) only for now





7) INI Magic

* CGI/FastCGI 支持".htaccess" 形式的INI控制
* 用户可以自己设定每个目录的INI在php.ini中通过[PATH=/var/www/domain.com]设定
* 优化错误处理
* 允许用户使用INI变量和常量任何定义的INI文件中
* 其他几个小的优化


用户自定义的php.ini(.htaccess) 文件名. 默认为".user.ini"
user_ini.filename = ".user.ini"


禁止这个特性 设置这个选项为空值


用户自定义php.ini 的缓存失效期(time-to-live) 秒数. 默认is 300s (5分钟)
user_ini.cache_ttl = 300s
   
[PATH=/var/www/domain.com]
variables_order = GPC
safe_mode = 1

[my varibles]
somevar = "1234"
anothervar = ${somevar}; anothervar == somevar

[ini arrays]
foo[bar] = 1
foo[123] = 2
foo[] = 3



扩展的 OpenSSL 函数

* 使用 OpenSSL Digest 函数

foreach (openssl_get_md_methods() as $d) {// MD4, MD5, SHA512... (12 all in all)
echo $d. " - ". openssl_digest("foo", "md5"; // acbd18db4cc2f85cedef654fccc4a4d8
}

* 使用 OpenSSL 加密函数

// BF-CBC, AES-256 CFB1... (54 all in all)
foreach(openssl_get_cipher_methods() as $v) {
$val = openssl_encrypt("value", $v, "secret";
openssl_decrypt($val, $v, "secret"; // value
}


* 扩展的 openssl_pkey_new() 和 openssl_pkey_get_details()
函数 允许访问 内部的 DSA, RSA 和 DH 密匙.


其目标在PHP中实现一个简单的OpenId


9) SPL(Standard PHP Library) 优化

* 优化嵌套的目录迭代次数由文件系统迭代

* 引入 GlobIterator

* 各种各样的数据结构类: 双链表, 堆栈, 队列, 堆, 小型堆, 大型堆, 优先级队列


* 其他的很绕口的一些特征


10) 时间处理进行扩展了和添加

* 可控制的 strtotime() 由 date_create_from_format()实现
   
$date = strtotime("08-01-07 00:00:00";
var_dump(date("Y-m-d", $date)); // string(10) "2008-01-07"
$date = date_create_from_format("m-d-y", "08-01-07";
var_dump($date->format('Y-m-d')); // string(10) "2007-08-01"

* 添加了 date_get_last_errors(),并且返回时间语法分析的错误和警告
array(4) {
["warning_count"] => int(0)
["warnings"] => array(0) { }
["error_count"] => int(2)
["errors"]=>
array(2) {
[2]=> string(40) "The separation symbol could not be found"
[6]=> string(13) "Trailing data"
}
}


11) getopt() 优化

* 影响 Windows 平台

* 本地的执行不依赖于本地getopt()实现.

* 跨平台支持长选项 (--option)
// input: --a=foo --b --c
var_dump(getopt("", array("a:","b::","c"));
/* output: array(3) {
["a"]=>
string(3) "foo"
["b"]=>
bool(false)
["c"]=>
bool(false)
} */


12) XSLT Profiling
* 引入 Xslt Profiling 通过 setProfiling()实现

$xslt = new xsltprocessor();
$xslt->importStylesheet($xml);
$xslt->setProfiling("/tmp/profile.txt";
$xslt->transformToXml($dom);
   
Resulting In:
number match name mode Calls Tot 100us Avg
0 date 5 58   11
Total 5 58


13) E_DEPRECATED 标记
* 怎么样将一个php发行为一个没有错误的模式? 废弃

* E_DEPRECATED用来指定废弃的功能,或许未来的版本中会消除。


14) 垃圾回收器
* 为复杂和长时间运行脚本的执行结束周期释放内存的清理

gc_enable(); // 允许垃圾回收
var_dump(gc_enabled()); // true
var_dump(gc_collect_cycles()); // 某个元素的清理
gc_disable(); // 禁止垃圾回收
   
15) NOWDOC
* 一个 HEREDOC 不再进行转译

HEREDOC
$foo = <<<ONE
this is $fubar
ONE;
/* string(10) "this is" */
   
NOWDOC
$bar = <<<‘TWO’
this is $fubar
TWO;
/* string(16) "this is $fubar" */
本篇文章来源于 PHP资讯 原文链接:http://www.phpq.net/research/php5.3-features.html

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2009-12-16 15:41 |只看该作者
没办法,有些字符在帖子里就被转成表情符号了。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
3 [报告]
发表于 2010-01-13 18:21 |只看该作者
哦,还有这么个说道,不是很清楚。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
4 [报告]
发表于 2010-01-15 23:26 |只看该作者
现在有人开始用PHP53了吗?

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
5 [报告]
发表于 2010-01-19 17:05 |只看该作者
我也只做了一个PHP的项目。用的好像是52

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
6 [报告]
发表于 2010-01-21 15:13 |只看该作者
我也看不了。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
7 [报告]
发表于 2010-01-23 22:46 |只看该作者
希望有人用PHP53的来讲解一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP