PHP7新特性
1. 指定参数接收类型,格式: function 方法名(参数类型 $arg) { }
	示例如: function abc(int $a) { echo $a; }
2. 函数,类函数 均增加支持返回值类型(基本类型如int,float,array等和自定义类名,自定义接口名),
    function 方法名(参数, 参数可选): 返回值类型 { }
    如:
    function sum($a, $b): float { //返回浮点型数值
        return $a + $b;
    }
3. 参数类型验证级别声明
    declare(strict_types=1); //如果是strict_types=1 类型的强制校验,strict_types=0不强制校验,只做简单验证

4. null合并运算符 ??  如果变量值不为null则返回,否则返回第2个参数值
    $username = $data['user'] ?? 'nobody';
    等价
    $username = isset($data['user']) ? $data['user'] : 'nobody';

    $username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';

5. 太空船操作符(组合比较符): <=>   两边值相等返回0,前面大于后面返回1,前面小于后面返回-1
    echo 1 <=> 1; // 0
    echo 1 <=> 2; // -1
    echo 2 <=> 1; // 1

6. define()函数定义常量值为数组
    define('ALL_ENV', [
                        'dev',
                        'qa',
                        'test'
                    ]);
        echo ALL_ENV[1] . PHP_EOL; // 输出 "qa"

    define("LOG_EVEL", "info");
        echo LOG_EVEL . PHP_EOL; //info
        echo LOG_EVEL[2] . PHP_EOL; //f
    php5.6对应const常量可以定义为数组: const abc = ['a', 'hi'];

7. 支持匿名类: 用于创建一次性简单对象,http://php.net/manual/zh/language.oop5.anonymous.php
    匿名类语法: new class {}
    匿名类继承类: new class extends 类名 {}
    匿名类实现接口: new class implements 接口名{ }

8. 闭包增加call方法: 闭包名->call(类对象); 这样就把闭包作为类对象的方法且被执行

9. 新增intl扩展(类名IntlChar): 用于操作多字符集的 unicode 字符, http://php.net/manual/zh/class.intlchar.php

10. 命名空间在php5.3开始就有,php7开始对同一个命名空间的导入的类、函数和常量可以通过单个 use 语句批量导入.
    命名空间下可以定义: 类(包括普通类,抽象类和traits)、接口、函数和常量
    命名空间下常量: const 常量名=值;
    http://php.net/manual/zh/language.namespaces.importing.php
    命名空间导入(php5.3开始就支持):
        use My\Full\Classname类名 as Another别名;
        use My\Full\Classname类名;
        $obj = new namespace\Another; 表示实例化当前命名空间下的Another类
        $obj = new Another; 表示实例化My\Full\Classname类
    php5.6开始支持use导入单个函数:
        use function My\Full\functionName命名空间下的方法名;
        use function My\Full\functionName命名空间下的方法名 as func别名;
    php5.6开始支持单个常量导入:
        use const My\Full\CONSTANT命名空间下的常量名;
    php7支持命名空间下的类,常量,方法批量导入:
        批量导入类: use some\namespace\{ClassA类A, ClassB类B, ClassC类C as C别名};
        批量导入方法: use function some\namespace\{fn_a, fn_b, fn_c};
        批量导入常量: use const some\namespace\{ConstA, ConstB, ConstC};


11. 新增了一些方法 http://php.net/manual/zh/migration70.new-functions.php
    整数除法函数: intdiv(除数, 被除数);返回int值
12. 新增了一些类,如ReflectionType等: http://php.net/manual/zh/migration70.classes.php

13. 新增了一些常量: http://php.net/manual/zh/migration70.constants.php

14. php的session_start([选项配置可选]);
	该方法支持可选参数来配置sesion(php7之前是在php.ini或者在调用session_start()函数前用ini_set()来定义)
    如: // 会话选项配置见: http://php.net/manual/zh/session.configuration.php
		session_start([
                        'name'=>'token',
                        'use_cookies'=>0
                        'use_trans_sid'=>1,
                      ]);
    以上等价:
        ini_set('session.name', 'token');
        ini_set("session.use_cookies", 0);
        ini_set("session.use_trans_sid", 1);
        session_start();

15.php7支持** 运算符, <=>、**、?? 、\u{xxxx}操作符
       echo 2 ** 3; //php7才支持
       等价
       echo pow(2, 3) . PHP_EOL;//php5和php7都支持

16. func_get_args()获取的是当前方法的所有参数值,但php5和php7有区别.如下:
		test(123);//php5中是123, php7中是124
        function test ($num) {
            $num++;
            var_dump(func_get_args()[0]);
			//php5中是123, php7中是124  说明在php5中$num参数不能影响func_get_args的第1个参数
            //php7中说明test方法的第1个参数值变化会影响func_get_args()的第1个参数
        };

17. php7捕获错误
	try {
	    echo helloJelly('1'); //调用未定义的函数, php7抛出Error级别错误捕获
	} catch (Exception $e) {
	    echo 'Exception' . PHP_EOL;
	} catch (Error $e) {
	    echo 'Error: 调用不存在的函数' . PHP_EOL;
	}

php7废弃的特性

1. 16进制的字符串转换被废除了: 如php5中0x10和16是相等的,php7中是不相等的
//PHP5 是相等的
"0x10" == "16"
//PHP7中是不相等的
"0x10" != "16"
2. HTTP_RAW_POST_DATA移除了(可以使用file_get_contents("php://input");替代)
3. 短标记语法被移除: <?和<? language=“php”这样的标签被移除了
4. 移除SAPIs的支持
5. 移除一些旧扩展,如PECL, mysql
6. 静态函数里面不再支持通过一个不兼容的$this调用一个非静态的函数了
7. $o = & new className{},不再支持这样的写法
8. php.ini文件移除了#作为注释,统一用;去注释
9. String、int、float等关键字不能被作为类名使用
10. preg_replace()不再支持匹配模式/e
11.移除一些函数,类,扩展等

other-上传区别

//PHP5
curl_setopt(ch, CURLOPT_POSTFIELDS,
                array(
                    'file' => '@'.realpath('image.png'),
                ));
//PHP7
curl_setopt(ch, CURLOPT_POSTFIELDS,
            [
                'file' => new \CURLFile(realpath('image.png')),
            ]);