首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
node.js
future
main
filter
email
ip
bitmap
express
keyword
python
eval
nodejs
instance
utf-8
uml
audio
perl
select
fetch
expression
hashtable
lua
integer
vba
substring
yaml
range
post
less
version
heap
list
settings
merge
triggers
cSharp
flutter
typescript
tree
bytecode
dagger
schema
php5
go
cpython
cPlusPlus
golang
match
window
install
callback
string
get
solr
hook
md5
header
bit
loops
format
web3
jsp
usb
erlang
scala
require
uri
httprequest
export
default
netty
c语言
spring
process
iostream
php7
foreach
grid
heatmap
当前位置:
开发笔记
>
编程语言
> 正文
php5.3介绍-PHP源码
作者:虽虽___Hui | 来源:互联网 | 2018-07-17 13:15
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
,
class
和
constant
引用在一个名字空间中首先指向这个名字空间
,
其次才是一个全局的范围
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
&
php
mysql
sql
html
linux
windows
xml
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
xml
Hibernate基础映射
在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ...
[详细]
蜡笔小新 2023-12-14 10:57:47
xml
SpringBoot集成前端模版(thymeleaf)的配置步骤
本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ...
[详细]
蜡笔小新 2023-12-14 10:11:46
perl
Android 新闻App的本地服务器搭建教程
本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ...
[详细]
蜡笔小新 2023-12-14 17:15:19
version
Alink回归预测的不完善问题及期待
本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ...
[详细]
蜡笔小新 2023-12-14 14:25:33
ip
Metasploit攻击渗透实践
本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ...
[详细]
蜡笔小新 2023-12-14 12:14:09
ip
Linux进程控制块PCBtask_struct结构体结构及作用详解
本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ...
[详细]
蜡笔小新 2023-12-13 21:31:18
ip
解决Mac上无法使用localhost连接mysql的问题
本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ...
[详细]
蜡笔小新 2023-12-13 17:48:58
python
如何实现织梦DedeCms全站伪静态
本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ...
[详细]
蜡笔小新 2023-12-14 19:45:47
post
Oracle Database 10g许可授予信息及高级功能详解
本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ...
[详细]
蜡笔小新 2023-12-14 13:12:10
main
OC学习笔记之@property和@synthesize
本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ...
[详细]
蜡笔小新 2023-12-14 12:05:06
main
知识图谱——机器大脑中的知识库
本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ...
[详细]
蜡笔小新 2023-12-14 10:06:19
main
测试人的性格,点火让他着急,考验婚姻问题的善意玩人
本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ...
[详细]
蜡笔小新 2023-12-14 09:10:09
select
PHP中的MySQL函数库及其常用函数介绍
本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ...
[详细]
蜡笔小新 2023-12-14 08:19:53
select
java 线程死锁模拟
1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ...
[详细]
蜡笔小新 2023-12-13 19:12:25
select
后台获取视图对应的字符串
1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ...
[详细]
蜡笔小新 2023-12-13 18:03:01
虽虽___Hui
这个家伙很懒,什么也没留下!
Tags | 热门标签
node.js
future
main
filter
email
ip
bitmap
express
keyword
python
eval
nodejs
instance
utf-8
uml
audio
perl
select
fetch
expression
hashtable
lua
integer
vba
substring
yaml
range
post
less
version
RankList | 热门文章
1
华为手机无法录入面部_OPPOfindX无法录入面部解锁,需要怎么弄
2
显卡换散热器后花屏
3
语言按键长按没程序_原来iPhone手机自带翻译功能,长按屏幕2秒,即可翻译多国语言...
4
手机忘记苹果4密码怎么恢复出厂设置?:苹果四恢复出厂设置
5
金立M2017续航出色不仅是因为电池大,还有超强快充
6
windows中能否使用safari浏览器
7
华为平板公布首支品牌态度视频 以“没得怕的”表达创新底气
8
苹果6怎么给微信设置密码?
9
苹果提示预购客户为iPhone
10
日历+石墨做团队管理
11
开发转测试没人要_iOS13beta8发布,微信再次测试新功能
12
ios14天气小组件不显示怎么办ios14天气小组件不显示解决方法
13
RUI手机桌面,开年大更新绝对值得拥有!
14
強迫症糾結了,聽聽你們的意見。。照片到底是放到照片 還是 iCloud Drive。
15
APP Store 上应用演示视频,是如何将 iPhone/iPad 界面的操作录制下来?
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有