热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php5.3介绍-PHP源码

ec(2);PHP 5.3 介绍PHP 2008 魁北克- Ilia Alshanetsky . 新版本的特性* 兼职老版本下的代码* 重点主要放在现有的功能的改进* 更少的bug* 更快的发布周期1. 命名空间(Namespaces)*&



PHP 5.3 介绍
PHP
2008 魁北克- Ilia Alshanetsky


. 新版本的特性

* 兼职老版本下的代码
* 重点主要放在现有的功能的改进
* 更少的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";
/**
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__); //

/* 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
&
推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
author-avatar
虽虽___Hui
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有