博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php5.3到5.6新特性总结
阅读量:5756 次
发布时间:2019-06-18

本文共 5630 字,大约阅读时间需要 18 分钟。

  hot3.png

参考网站

原文1:  这个更全面

原文2:

个人在原文基础上总结的的常用的新特性。


php5.3

1、支持命名空间

//select.php 
test();

2、延迟静态绑定

在PHP5中,我们可以在类中通过self关键字或者__CLASS__来判断或调用当前类。但有一个问题,如果我们是在子类中调用,得到的结果将是父类。因为在继承父类的时候,静态成员就已经被绑定了。 例如: 

3、goto语句

数计算机程序设计语言中都支持无条件转向语句goto,当程序执行到goto语句时,即转向由goto语句中的标号指出的程序位置继续执行。尽管goto语句有可能会导致程序流程不清晰,可读性减弱,但在某些情况下具有其独特的方便之处,例如中断深度嵌套的循环和 if 语句。

4、支持闭包(使用use传递变量)、Lambda/Anonymous函数(即用即弃)

闭包(Closure)函数和Lambda函数的概念来自于函数编程领域。例如JavaScript 是支持闭包和 lambda 函数的最常见语言之一。 

在PHP中,我们也可以通过create_function()在代码运行时创建函数。但有一个问题:创建的函数仅在运行时才被编译,而不与其它代码同时被编译成执行码,因此我们无法使用类似APC这样的执行码缓存来提高代码执行效率。

在PHP5.3中,我们可以使用Lambda/匿名函数来定义一些临时使用(即用即弃型)的函数,以作为array_map()/array_walk()等函数的回调函数。

5、类外使用const定义常量

//PHP中定义常量通常是用这种方式define("CONSTANT", "Hello world.");//并且新增了一种常量定义方式const CONSTANT = 'Hello World';

6、三元运算符快捷书写方式

原本格式为是(expr1) ? (expr2) : (expr3) 

如果expr1结果为True,则返回expr2的结果。

PHP5.3新增一种书写方式,可以省略中间部分,书写为expr1 ?: expr3 
如果expr1结果为True,则返回expr1的结果 

//原格式$expr=$expr1?$expr1:$expr2//新格式$expr=$expr1?:$expr2

7、弃用magic_quotes_gpc

8、新增__callStaic和__invoke()

PHP中原本有一个魔术方法__call(),当代码调用对象的某个不存在的方法时该魔术方法会被自动调用。新增的__callStatic()方法则只用于静态类方法。当尝试调用类中不存在的静态方法时,__callStatic()魔术方法将被自动调用。 

runTest('通过对象调用');  MethodTest::runTest('静态调用');  // As of PHP 5.3.0

9、新增Nowdoc语法

用法和Heredoc类似,但使用单引号。Heredoc则需要通过使用双引号来声明。 

Nowdoc中不会做任何变量解析,非常适合于传递一段PHP代码。

10、支持动态调用静态方法

class Test{      public static function testgo()      {           echo "gogo!";      }  }  $class = 'Test';  $action = 'testgo';  $class::$action();  //输出 "gogo!"

11、php.ini中可使用变量

12、erge正则表达式默认不可用,建议使用PCRE正则表达式

13、HTTP状态码在200-399范围均被 认为访问成功


php5.4

1、数组简短写法

$arr = [1,'james', 'james@fwso.cn'];$array = [  "foo" => "bar",  "bar" => "foo"  ];

2、快捷返回数组值

对函数返回数组的成员快捷访问

//例子1function myfunc() {    return array(1,'james', 'james@fwso.cn');}echo myfunc()[1];//例子2$name = explode(",", "Laruence,male")[0];explode(",", "Laruence,male")[3] = "phper";

3、得到文件上传进度

Session提供了上传进度支持,通过$_SESSION["upload_progress_name"]就可以获得当前文件上传的进度信息,结合Ajax就能很容易实现上传进度条了。

4、快捷实例化类,实例化的视同直接访问静态方法

 //这样写:(new Foo)->bar();class test{    function show(){        return 'test';    }}echo (new test())->show();

5、无论php.ini是否设置short_open_tag,总是可用

6、新增了动态访问静态方法的方式

$func = "funcXXOO";A::{$func}();

7、让 json 更懂中文

echo json_encode("中文", JSON_UNESCAPED_UNICODE);  //"中文"

8、Json新增了一个JsonSerializable接口

可以在输出之前,按照自己想法修改最后的值

9、default_charset从ISO-8859-1已经变为UTF-8

默认发送“Content-Type: text/html; charset=utf-8”

你再也不需要在HTML里写meta tag,也无需为UTF-8兼容而传送额外的header了。

htmlspecialchars() 和 htmlentities() 现在可更好地支持亚洲字符。

10、函数类型提示的增强

class bar {    function foo(bar $foo) {    }    //其中函数foo中的参数规定了传入的参数必须为bar类的实例,否则系统会判断出错。同样对于数组来说,也可以进行判断,比如:    function foo(array $foo) {    }}foo(array(1, 2, 3)); // 正确,因为传入的是数组foo(123); // 不正确,传入的不是数组

11、新增加了$_SERVER['REQUEST_TIME_FLOAT']

这个是用来统计服务请求时间的,并用ms来表示

echo "脚本执行时间 ", round(microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"], 2), "s";

12、新增Traits

Traits不能被单独实例化,只能被类所包含,类似引用函数一样

trait SayWorld{       public function sayHello()    {                echo 'World!';    }}class MyHelloWorld{    // 将SayWorld中的成员包含进来    use SayWorld;}$xxoo = new MyHelloWorld();// sayHello() 函数是来自 SayWorld 构件的$xxoo->sayHello();


php5.5

1、新增了array_column()函数

$records = array(    array('id' => 2135,'name' => 'John'),    array('id' => 3245,'name' => 'Smith'),    array('id' => 5342,'name' => 'Peter'));//从结果集中取出 name 列$names = array_column($records, 'name');print_r($names);//从结果集中总取出 name 列,用相应的 id 作为键值$names = array_column($records, 'name', 'id');print_r($names);

2、新empty除了用在变量外,还可以用在表达式上(函数,类变量方法等)

function always_false() {    return false;}if (empty(always_false())) {    echo 'This will be printed.';}

3、参数跳跃,就是一个函数有多个参数,怎样设置后面的参数,而让之前的参数保存默认

答案使用使用 default

//有一个这样的函数function create_query($where, $order_by, $join_type='', $execute = false, $report_errors = true) { ... }//只设置后面的参数,让前面的参数保持默认,就是使用 defaultcreate_query("deleted=0", "name", default, default, false);

4、标量类型提示,就是定义好函数的变量类型

function foo(int $i) { ... }foo(1);      // $i = 1foo(1.0);    // $i = 1foo("1");    // $i = 1foo("1abc"); // not yet clear, maybe $i = 1 with noticefoo(1.5);    // not yet clear, maybe $i = 1 with noticefoo([]);     // errorfoo("abc");  // error

5、列表解析和生存期表达式,新增Generators 

yield关键字用于当函数需要返回一个迭代器的时候,逐个返回值。

//以前这样做$firstNames = [];foreach ($users as $user) {    $firstNames[] = $user->firstName;}//现在可以这样做$firstNames = [foreach ($users as $user) yield $user->firstName];//有一个例子function number10(){    for($i = 1; $i <= 10; $i += 1)        yield $i;}//返回一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

6、foreah支持list

$array = [    [1, 2],    [3, 4],];foreach ($array as list($a, $b)) {    echo "A: $a; B: $b\n";}

7、安装的时候支持opcache扩展

使用opcache会提高php的性能,你可以和其他扩展一样静态编译(--enable-opcache)或者动态扩展(zend_extension)加入这个优化项。

8、非变量的array和string支持下标获取

echo array(1, 2, 3)[0];echo [1, 2, 3][0];echo "foobar"[2];

9、新增finally关键字

031100_ISAu_107233.png


php5.6

1、允许常量计算,使用数字、字符串字面值和常量的标量表达式

const A = 2;const B = A + 1;class C{    const STR = "hello";    const STR2 = self::STR + ", world";}const ARR = ['a', 'b'];

2、允许使用变参,用三个点代替,代替了func_get_args()

function test(...$args){    print_r($args);}test(1,2,3);//输出Array(    [0] => 1    [1] => 2    [2] => 3)

3、参数解包功能

function add($a, $b, $c) {    return $a + $b + $c;}$arr = [2, 3];add(1, ...$arr);

4、命名空间usr操作符支持函数和常量导入

//use 运算符可以在类中导入外部的函数和常量了。 对应的结构为 use function 和 use const。namespace Name\Space {    const FOO = 42;    function f() { echo __FUNCTION__."\n"; }}namespace {    use const Name\Space\FOO;    use function Name\Space\f;    echo FOO."\n";    f();}

5、使用 ** 操作符计算乘方

加入右连接运算符 ** 来进行幂运算。 同时还支持简写的 **= 运算符,表示进行幂运算并赋值。

printf(2 ** 3); // 8$a = 2;$a **= 3;printf($a);  // 8

6、可以上传2G以上的大文件

转载于:https://my.oschina.net/kmwzjs/blog/494241

你可能感兴趣的文章
盘点2018云计算市场,变化大于需求?
查看>>
极光推送(一)集成
查看>>
Android项目实战(三十九):Android集成Unity3D项目(图文详解)
查看>>
MySQL 8.0 压缩包版安装方法
查看>>
TensorFlow系列专题(六):实战项目Mnist手写数据集识别
查看>>
JS中this的4种绑定规则
查看>>
Netty Pipeline源码分析(2)
查看>>
@Transient注解输出空间位置属性
查看>>
Ansible-playbook 条件判断when、pause(学习笔记二十三)
查看>>
深度学习的NLP工具
查看>>
arch下定时备份数据库
查看>>
head first python(第六章)–学习笔记
查看>>
Java LinkedHashMap工作原理及实现
查看>>
hadoop hive hbase 入门学习 (一)
查看>>
【一碗鸡汤】人生的六度发展方式
查看>>
zabbix自定义KEYUserParameter
查看>>
JavaScript—获取参数(23)
查看>>
通过Groovy来消除代码噪声
查看>>
NutzBoot v2.3.3.v20190329 支持 Fescar 分布式事务
查看>>
Java File
查看>>