首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
cSharp
bash
instance
httpclient
char
vbscript
erlang
shell
php8
iostream
blob
loops
scala
spring
dockerfile
yaml
audio
default
regex
lua
triggers
web3
expression
hashset
ip
javascript
php7
header
less
cPlusPlus
copy
replace
range
sum
text
select
join
python
perl
ascii
function
import
runtime
hashtable
typescript
const
config
jar
tree
post
nodejs
node.js
dll
vba
bit
case
emoji
jsp
python3
utf-8
chat
random
subset
byte
md5
version
solr
heap
main
testing
require
substring
include
format
bytecode
metadata
web
merge
grid
当前位置:
开发笔记
>
编程语言
> 正文
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
spring
SpringBoot集成前端模版(thymeleaf)的配置步骤
本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ...
[详细]
蜡笔小新 2023-12-14 10:11:46
ip
Android 新闻App的本地服务器搭建教程
本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ...
[详细]
蜡笔小新 2023-12-14 17:15:19
ip
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
ip
asp.net微信公众平台开发目录汇总陆续更新的相关内容
本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ...
[详细]
蜡笔小新 2023-12-14 22:40:22
default
如何实现织梦DedeCms全站伪静态
本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ...
[详细]
蜡笔小新 2023-12-14 19:45:47
lua
lua语言闭包、模式匹配、日期、编译、模块的特性及应用
本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ...
[详细]
蜡笔小新 2023-12-14 18:18:21
lua
Oracle Database 10g许可授予信息及高级功能详解
本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ...
[详细]
蜡笔小新 2023-12-14 13:12:10
lua
求解hdu 1003 java题目的动态规划优化方法
本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ...
[详细]
蜡笔小新 2023-12-14 13:11:00
lua
Windows下配置PHP5.6的方法及注意事项
本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ...
[详细]
蜡笔小新 2023-12-14 12:37:25
ip
PHP中的MySQL函数库及其常用函数介绍
本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ...
[详细]
蜡笔小新 2023-12-14 08:19:53
ip
解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ...
[详细]
蜡笔小新 2023-12-13 16:31:57
虽虽___Hui
这个家伙很懒,什么也没留下!
Tags | 热门标签
cSharp
bash
instance
httpclient
char
vbscript
erlang
shell
php8
iostream
blob
loops
scala
spring
dockerfile
yaml
audio
default
regex
lua
triggers
web3
expression
hashset
ip
javascript
php7
header
less
cPlusPlus
RankList | 热门文章
1
关于android中位运算的一些看法
2
怎么用canvas制作一个猜字母的小游戏
3
单一权责问题
4
FlutterWidgets对话框Dialog
5
如何跟踪在asp.net中重定向的页面请求 - How to track from which page request is redirected in asp.net
6
开发笔记:Spring 4.0 最基本的注入
7
Incorrect ARN output for aws_ssm_parameter
8
jdbctemplate oracle xml文件,hibernateTemplate,jdbcTemplate 一起使用
9
怎么在手机上把浏览器设置成兼容性试图?
10
记一次渗透测试中利用存储型XSS添加用户
11
(六)Hibernate 映射类型
12
大数据必学Java基础(三十八):包和import讲解
13
你的数据安全么?Hadoop再曝安全漏洞| 黑客利用Hadoop Yarn资源管理系统未授权访问漏洞进行攻击...
14
Sitecore CMS中创建模板
15
java容器化部署,90%的人看完都说好
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有