`

PHP 5.3 介绍

阅读更多


. 新版本的特性

* 兼职老版本下的代码
* 重点主要放在现有的功能的改进
* 更少的bug
* 更快的发布周期


1. 命名空间(Namespaces)

* PHP5.3最大的新功能
* 完全支持名字空间特征
* 大部分的功能的执行在编译时
* 简化命名惯例

1) 更清晰的代码

不使用 Namespaces
function MY_wrapper() {}
class MY_DB {}
define('MY_COMM_STR', '');


MY_wrapper();
new MY_DB();
MY_COMM_STR;

2) 使用 Namespaces

namespace MY;

function wrapper() {}

class DB { }

const CONN_STR = '';


use MY AS MY;

wrapper();

new DB();

CONN_STR;



3) 一个文件中多个名字空间

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)
};

// result:
// string(18) "LIB_EXTRA::MScrypt"
// string(11) "LIB::SQLite"






4) 名字空间的层级

namespace foo;

function strlen($foo) { return htmlspecialchars($foo); }

echo strlen("test"); // test
echo ::strlen("test") // 4
echo namespace::strlen("test"); // test

* function, classconstant 引用在一个名字空间中首先指向这个名字空间, 其次才是一个全局的范围


5) 名字空间 & 自动引入


function __autoload($var) { var_dump($var); } // LIB::foo
require "./ns.php";
/**
<?php
namespace LIB;
new foo();
?>
*/

* __autoload() 将处理为和名字空间的类名一起。
* autoload 仅在 class 不在名字空间和全局范围内存在时触发。
* __autoload() 声明在一个名字空间中将不别调用!




6) 其他的名字空间的语法技巧

namespace really::long::pointlessly::verbose::ns;

__NAMESPACE__; // 当前的名字空间名称

class a {}

get_class( new a() ); // really::long::pointlessly::verbose::ns::abs

use really::long::pointlessly::verbose::ns::a AS b; // 从一个名字空间引用class




2. 改进的性能
* md5() 速度提高了大概10-15%
* 引擎中更好的堆栈实现
* 常量移到只读内存区
* 改进Exception处理(更简单 & 更少的代码)
* 调用 (require/include)_once 去掉了使用open(2)(linux下的c函数)
* 使用gcc4编译的二进制更小更快

整体性能提高 5-15%



3. 新的语言特性


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



8) 扩展的 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" */


4. 其他优化
* SQLite 升级到 3.5.6
* 40 多个bug 被修复
* CGI/FastCGI SAPI 优化
* 各种流的优化
* 未来更多的优化










分享到:
评论

相关推荐

    ubuntu 同时装php5.3和5.2

    本文将详细介绍如何在Ubuntu环境下成功地安装并配置PHP 5.2和PHP 5.3,以便于开发和维护基于不同PHP版本的应用程序。 #### 知识点一:Ubuntu默认PHP版本与项目需求冲突 在Ubuntu系统中,默认安装的PHP版本为5.3。...

    php5.3php_curl

    标题“php5.3php_curl”提示我们关注的是PHP 5.3版本的一个特定功能模块,即PHP的cURL扩展。cURL是用于在PHP中处理URLs的库,它允许开发人员通过各种协议(如HTTP、HTTPS、FTP、FTPS等)传输数据。在PHP 5.3中,cURL...

    PHP5.3最新版本

    - `icudt49.dll`、`icuin49.dll`、`icuuc49.dll`、`icule49.dll`:这些是ICU(International Components for Unicode)库的组件,用于处理Unicode字符和国际化,PHP5.3可能依赖这些库进行多语言支持。 - `...

    php5.3的memcache

    **PHP5.3与Memcache** ...通过以上介绍,我们可以看到PHP5.3与Memcache的集成能显著提升Web应用的性能,尤其是在数据读取频繁的情况下。但同时,也需要注意其局限性和潜在的问题,以便在实际使用中做出最佳决策。

    php5.3-php5.4mongo扩展

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

    php5.3 64位WampServer

    在本例中,我们关注的是WampServer的特定版本——“php5.3 64位”。 **PHP 5.3的关键特性** PHP 5.3是PHP语言的一个重要版本,发布于2009年,引入了许多新功能和改进,其中包括: 1. **命名空间(Namespaces)**...

    php_imagick扩展 php 5.3

    《PHP Imagick扩展在PHP 5.3环境下的应用与详解》 PHP Imagick扩展是PHP语言中用于处理图像的强大工具,它提供了对ImageMagick库的接口,使得开发者能够执行复杂的图像操作,如图像的读取、写入、转换、编辑以及...

    APACHE2.4+PHP5.3安装环境必备文件

    所以如果需要配置PHP5.3环境,必须单独下载本文件才能正确配置。 注意:本文件仅适用于PHP 5.3 TS(线程安全)版本。不适合NTS,不适合PHP5.2 PHP5.4 如果需要PHP5.2 或PHP5.4 请下载我另外上存的资源。

    php_solr.dll ,php5.3版本

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

    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以上(php5.6,php7)的Smtp类

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

    PHP5.3.2011中文帮助文档手册

    这份2011年的PHP5.3中文帮助文档手册包含了所有这些特性的详细介绍,以及如何在实践中应用它们的示例。通过阅读和研究这个文档,开发者可以深入理解PHP5.3的语法、函数库以及最佳实践。此外,手册还涵盖了错误处理、...

    PHP.zip_php5.3_php5.3 chm

    ... ### 1.... ...闭包允许你在函数内部定义一个函数,并可以访问外部...《PHP5.3参考手册》正是为了帮助开发者掌握这些技术而编写的,包含了全面的文档和实例,对于学习和查阅PHP 5.3的特性和用法,无疑是一份宝贵的资源。

    php5.3安装包(LINUX)

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

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

    《PHP 5.3入门经典》是一本专为初学者设计的PHP编程教程,它涵盖了PHP 5.3版本的核心概念和技术。这个压缩包包含了该书的所有源代码,旨在帮助读者通过实践来深入理解PHP 5.3的编程原理。 在PHP 5.3版本中,引入了...

    windows下php5.3 v9 redis扩展 php_redis.dll

    标题中的“windows下php5.3 v9 redis扩展 php_redis.dll”指的是在Windows操作系统环境下,针对PHP 5.3版本的v9构建的Redis扩展,这个扩展的主要功能是让PHP能够与Redis内存数据存储系统进行交互。Redis是一个开源的...

    PHP5.3安装版

    php5.3安装版,win32位,线程安全

    php_igbinary.dll与vc9编译redis.dll扩展适合php5.3

    本文将深入探讨两个特定的PHP扩展:`igbinary`和`redis`,以及它们的VC9编译版本与PHP 5.3的兼容性。 首先,`igbinary`是一个PHP扩展,它提供了一种更高效的数据序列化和反序列化机制。传统的PHP序列化方式(如`...

    php5.3版本的wampserver

    php5.3版本的wampserver,可以兼容win10

    php5.3版本可用的memcache扩展

    标题中的“php5.3版本可用的memcache扩展”指的是PHP的一个扩展库——Memcache,它是专门为PHP设计的,用于与Memcached缓存系统交互。Memcached是一个高性能、分布式的内存对象缓存系统,可以用来存储和检索数据,如...

Global site tag (gtag.js) - Google Analytics