文档章节

php5各个版本的区别

stone_
 stone_
发布于 2016/08/09 15:38
字数 1100
阅读 41
收藏 3
点赞 1
评论 0

本文目录:
PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束
PHP5.2:JSON 支持
PHP5.3:弃用一些功能、匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar
PHP5.4:Short Open Tag, 数组简写形式,trait, 内置 Web 服务器,细节修改,移除safemode
PHP5.5:yield, list() 用于 foreach, 细节修改
PHP5.6: 常量增强,可变函数参数,命名空间增强

1. PHP5.2以前。


#__autoload

function __autoload($classname)
{
    require_once("{$classname}.php")
}

但该函数已经不被建议使用,原因是一个项目中仅能有一个这样的 __autoload() 函数,因为 PHP 不允许函数重名。取而代之:

spl_autoload_register(function($classname)
{
    require_once("{$classname}.php")
});

约束类型:


// 限制第一个参数为 MyClass, 第二个参数为可执行类型,第三个参数为数组
function MyFunction(MyClass $a, callable $b, array $c)
{
    // ...
}

2. PHP5.2

json_encode和json_decode

3. PHP5.3

弃用的功能:

register_globals (将post,get自动转化成变量)

if(isAuth())
    $authorized = true;
if($authorized)
    include("page.php");

如果访问 /auth.php?authorized=1 来定义该变量值,绕过身份验证。

Magic Quotes(自动转义用户输入)

Safe Mode

新增的功能:

匿名函数

function aa($func){

    echo $func();
}



aa(function(){

   return 'AA';
});


$a = function(){


    return 123;
};  //这个分号必须有,要不报错

echo $a();

魔术方法:新增__invoke(), __callStatic()魔术方法

命名空间:

<?php
// 命名空间的分隔符是反斜杠,该声明语句必须在文件第一行。
// 命名空间中可以包含任意代码,但只有 **类, 函数, 常量** 受命名空间影响。
namespace XXOO\Test;
// 该类的完整限定名是 \XXOO\Test\A , 其中第一个反斜杠表示全局命名空间。
class A{}
// 你还可以在已经文件中定义第二个命名空间,接下来的代码将都位于 \Other\Test2 .
namespace Other\Test2;
// 实例化来自其他命名空间的对象:
$a = new \XXOO\Test\A;
class B{}
// 你还可以用花括号定义第三个命名空间
namespace Other {
    // 实例化来自子命名空间的对象:
    $b = new Test2\B;
    // 导入来自其他命名空间的名称,并重命名,
    // 注意只能导入类,不能用于函数和常量。
    use \XXOO\Test\A as ClassA
}

Heredoc 和 Nowdoc

$name = "MyName";
echo <<< TEXT
My name is "{$name}".
TEXT;

#result: My name is "MyName".

Nowdoc

$name = "MyName";
echo <<< 'TEXT'
My name is "{$name}".
TEXT;


#result: My name is "{$name}"

Nowdoc 的行为像一个单引号字符串,不能在其中嵌入变量,和 Heredoc 唯一的区别就是,三个左尖括号后的标识符要以单引号括起来。

const 可以用在class外部,像define,但不能进行运算

<?php


const E = 123;


class A{


   const A = 123;
}


#错误的写法

const E = 123 * 123;

三元运算符简写

#旧的
echo $a ? $a : "No Value";


#新的
echo $a ?: "No Value";


//三元运算符的简写,其中 true的那个位置是给的 问号 前面的值

$a = 'aa';
echo isset($a) ?: 'bbb';  返回 1

后期静态绑定:


class ATest {

    public function say()
    {
        echo 'Segmentfault';
    }

    public function callSelf()
    {
        self::say();
    }

    public function callStatic()
    {
        static::say();
    }
}

class BTest extends ATest {
    public function say()
    {
        echo 'PHP';
    }
}

$b = new BTest();
$b->say(); // output: php
$b->callSelf(); // output: segmentfault
$b->callStatic(); // output: php

4. PHP5.4

Short Open Tag 自 PHP5.4 起总是可用

数组的简写


$arr = array(1, 2, 3);

$arr = [1, 2, 3]

trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method

#trait 实现多继承


// trait不能被单独实例化,只能被类所包含
trait SayWorld
{
    public function sayHello()
    {
        echo 'World!';
    }
}

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

内置web服务器

5. PHP5.5

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

function number10()
{
    for($i = 1; $i <= 10; $i += 1)
        yield $i;
}

#结果

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

list() 用于 foreach
可以用 list() 在 foreach 中解析嵌套的数组:

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


#result:

1 2 3
4 5 6

6. PHP5.6

const支持计算

更好的可变函数参数用于代替 func_get_args()

function add(...$args)
{
    $result = 0;
    foreach($args as $arg)
        $result += $arg;
    return $result;
}


$arr = [2, 3];
add(1, ...$arr);


#result: 6

命名空间增强。可以在里面定义常量和方法

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

 

© 著作权归作者所有

共有 人打赏支持
stone_
粉丝 19
博文 163
码字总数 163611
作品 0
洛阳
程序员
linux 编译安装 phpredis 后 phpinfo 中没有 redis 扩展

问题描述: 目前各个组建都安装好了,单独运行也是正常的。但是在打印出来的 phpinfo() 中没有 redis 的扩展,求大牛帮忙解决! 系统 Ubuntu 12.04 源码存储路径 /home/wzw/workstation/src ...

酒肉穿肠过 ⋅ 2013/09/20 ⋅ 11

使用mysqli方式进行数据库查询

一、mysql与mysqli的概念相关: 1、mysql与mysqli都是php方面的函数集,与mysql数据库关联不大。 2、在php5版本之前,一般是用php的mysql函数去驱动mysql数据库的,比如mysqlquery()的函数,...

AwesomeQA ⋅ 2016/04/21 ⋅ 0

php ts nts v6 v9的区别

VC6:legacy Visual Studio 6 compiler,就是使用这个编译器编译的。 VC9:Visual Studio 2008 compiler,就是用微软的VS编辑器编译的 由于apache.org只提供VC6的版本,所以使用原版apache时...

mickelfeng ⋅ 2012/11/24 ⋅ 0

PHPer面试指南-PHP 篇

本书的 GitHub 地址:https://github.com/todayqq/PHPerInterviewGuide PHP 篇收集了一些常见的基础、进阶面试题,基础的面试题不再作答。 基础篇 Get 和 POST 的区别 Cookie 和 Session 的区...

angkee ⋅ 01/24 ⋅ 0

Jackok/LAMP Stack Vagrant and Puppet

#Install LAMP Stack with Vagrant and Puppet ##使用Vagrant和Puppet搭建LAMP开发虚拟机 ##要求 安装Vagrant, 推荐版本1.2.2 Vagrant Box使用官方的Ubuntu precise64. (已经内置Puppet支持)......

Jackok ⋅ 2015/02/11 ⋅ 0

PHP5的MVC框架--TMPHP

TMPHP 是一个简洁高效的PHP5 MVC框架,基本核心特点是:简洁、高效、优雅。 核心特点 纯粹的PHP5面向对象代码特点,纯粹的MVC框架支持 支持多种配置文件 (ini/array) 支持多种模板 (原生PHP...

匿名 ⋅ 2010/10/14 ⋅ 0

PHP安装多进程pcntl扩展

# mkdir php # cd php # apt-get source php5 # cd php5-(WHATEVER_RELEASE)/ext/pcntl # phpize # ./configure (注一) # make # make install 7.复制pcntl/module文件夹下的pcntl.so文件到自......

hejunyi1204 ⋅ 2014/10/22 ⋅ 0

PHP版本VC6与VC9、Thread Safe与None-Thread Safe等的区别

转载一篇 最近发现很多PHP程序员对PHP版本知识了解不是很清楚,自己也看了不少类似的文章,还是感觉不够明确和全面,网上的结论又都是模棱两可,在此,给出最完整甚至武断的解释。 本文讲解:...

杨雨2012 ⋅ 2012/05/28 ⋅ 2

不重新编译PHP的情况下独立添加扩展

服务器运行一段时间后,可能突然会需求添加某个扩展,如curl、pdo、xmlrpc等,这就需要在不重新编译PHP的情况下独立添加扩展。 下面以安装curl为例,介绍具体安装步骤。 1.安装crul wget htt...

JasonWung ⋅ 2016/08/02 ⋅ 0

php4和php5区别

PHP5 中的对象已经进行了较系统、较全面的调整,现在的样子可能看起来会有些类似于 Java。本小节着重讲述 PHP5 中新的对象模式,并举了一些较简易的例子来说明。就让本节成为你的 PHP5 之旅的...

沉淀岁月 ⋅ 2016/09/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Mahout推荐算法API详解

前言 用Mahout来构建推荐系统,是一件既简单又困难的事情。简单是因为Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口;困难是因为我们不了解算法细节,很难去根...

xiaomin0322 ⋅ 23分钟前 ⋅ 0

WampServer默认web服务器根目录位置

安装WampServer之后的web服务器根目录默认位置在WampServer安装目录下的www:

临江仙卜算子 ⋅ 24分钟前 ⋅ 0

Redux的一些手法记录

Redux Redux的基本概念见另一篇文。 这里记录一下Redux在项目中的实际操作的手法。 actions 首先定义action.js,actions的type,可以另起一个action-type.js文件。 action-type.js用来存...

LinearLaw ⋅ 25分钟前 ⋅ 0

android 手势检测(左右滑动、上下滑动)

GestureDetector类可以让我们快速的处理手势事件,如点击,滑动等。 使用GestureDetector分三步: 1. 定义GestureDetector类 2. 初始化手势类,同时设置手势监听 3. 将touch事件交给gesture...

王先森oO ⋅ 39分钟前 ⋅ 0

java 方法的执行时间监控 设置超时(Future 接口)

java 方法的执行时间监控 设置超时(Future 接口) import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor......

青峰Jun19er ⋅ 44分钟前 ⋅ 0

一名开源小白的Apache成长自述

今天收到了来自Apache Vote我成为Serviceomb项目Committer的邮件,代表自己的贡献得到了充分的肯定;除了感谢团队的给力支持,我更希望将自己的成长经历——如何践行Apache Way的心得介绍给大...

微服务框架 ⋅ 46分钟前 ⋅ 0

vim介绍、颜色显示和移动光标、一般模式下复制、剪切和粘贴

1.vim 是 vi 的升级版 vim 是带有颜色显示的 mini安装的系统,一般都不带有vim [root@aminglinux-128 ~]# yum install -y vim-enhanced已加载插件:fastestmirror, langpacksLoading mir...

oschina130111 ⋅ 46分钟前 ⋅ 0

Deepin 操作系统四面楚歌

作为国内做的最好的 Linux 发行版,源自 Debian sid 的 Deepin 目前正面临重重困境,新版本不断延期,开发人员离职,bug 长期得不到修复,和 Debian/Ubuntu 的兼容性问题也面临越来越严重的挑...

六库科技 ⋅ 47分钟前 ⋅ 0

MyBatis之动态sql

我们需要知道的是,使用mybatis重点是对sql的灵活解析和处理。在原先的UserMappser.xml中,我们这样查询表中满足条件的记录 : 123 <select id="findUserList" parameterType="userQuery...

瑟青豆 ⋅ 47分钟前 ⋅ 0

这届俄罗斯世界杯的冷门那么多怎么办?

最纯粹的世界杯,最神奇的大冷门。 德国0比1被墨西哥摩擦了。 日本历史性的赢了哥伦比亚。 C罗也挑平了西班牙。 梅西被冰岛狮吼吼愣神了。 就连11次进世界杯4强的巴西也被瑞士逼平了。 天台已...

开源中国众包平台 ⋅ 48分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部