新特性
传参类型拓展
指定形参类型是PHP 5就支持的一项特性, 形参支持 array - 数组、 object - 对象两种类型。现在可以使用下列类型参数: 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。在旧版中,函数的参数声明只能是(Array obj)等,基本类型比如Int,String等是不能够被声明的。
返回值类型声明
PHP 7 增加了对返回类型声明的支持,返回类型声明指明了函数返回值的类型,可用的类型与参数声明中可用的类型相同。
null合并运算符
新增了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回第二个操作数
组合比较符
PHP 7 新增加的太空船运算符(组合比较符 <=>)用于比较两个表达式 b,如果 b时,它分别返回-1、0或1。
匿名类
现在支持通过new class 来实例化一个匿名类
interface Logger {
public function log(string $msg);
}
class Application {
private $logger;
public function getLogger(): Logger {
return $this->logger;
}
public function setLogger(Logger $logger) {
$this->logger = $logger;
}
}
$app = new Application;
$app->setLogger(new class implements Logger {
public function log(string $msg) {
echo $msg;
}
});
define() 支持定义常量数组
define('ARR',['a','b']);
echo ARR[1];// a
命名空间引用优化
// PHP7以前语法的写法
use FooLibrary\Bar\Baz\ClassA;
use FooLibrary\Bar\Baz\ClassB;
// PHP7新语法写法
use FooLibrary\Bar\Baz\{ ClassA, ClassB};
Throwable接口
Throwable 是 PHP 7 中可以用作任何对象抛出声明的基本接口,包括 Expection (异常)和 Error (错误)。(在5中只支持扔出 Expection )
过去的 PHP,处理致命错误几乎是不可能的。致命错误不会调用, set_error_handler() 设置的处理方式,而是简单的停止脚本的执行。
在 PHP7 中,当致命错误和可捕获的错误(E_ERROR 和 E_RECOVERABLE_ERROR)发生时会抛出异常,而不是直接停止脚本的运行。
Throwable {
/* 抽象方法 */
abstract public string getMessage ( void ) // 获取抛出的消息内容
abstract public int getCode ( void ) // 获取抛出的错误代码
abstract public string getFile ( void ) // 获取产生异常的文件名
abstract public int getLine ( void ) // 获取相关行号
abstract public array getTrace ( void ) // 获取追踪信息,返回数组形式
abstract public string getTraceAsString ( void ) // 获取追踪信息,返回字符串形式
abstract public Throwable getPrevious ( void ) // 返回上一个 Throwable
abstract public string __toString ( void ) // 抛出的对象以字符串形式返回,可以用 echo 打印相应结果
}
不支持老式的构造方法
不推荐以类名为构造函数的使用方法。
session_start方法选项数组
session_start支持调用时传入session配置。
废弃方法和功能
define大小写不敏感的常量
大小写不敏感的常量声明现已被废弃, 将 TRUE
作为第三个参数传递给 define()会导致一个废弃警告。
在字符串中搜索非字符串内容
废弃:将一个非字符串内容传递给字符串搜索函数。 在将来所有待搜索的内容都将被视为字符串,而不是 ASCII 编码值。如果需要依赖这个特性,你应该 要么显示地进行类型转换(转为字符串),或者显示地调用 chr()。 以下是受到影响的方法:
图像处理和 GD 库
image2wbmp() 已被废弃。
ODBC废弃
不再支持odbc编程。
mcrypt系列函数
mcrypt_*系列函数都将被移除。推荐使用:openssl 序列函数。
foreach修改
foreach()循环对数组内部指针不再起作用
$arr = [1,2,3];
foreach ($arr as &$val) {
echo current($arr);// php7 全返回0
}
按照值进行循环的时候, foreach是对该数组的拷贝操作
杂项
-
1.debug_zval_dump() 现在打印 “int” 替代 “long”, 打印 “float” 替代 “double”
-
2.dirname() 增加了可选的第二个参数, depth, 获取当前目录向上 depth 级父目录的名称。
-
3.getrusage() 现在支持 Windows.mktime() and gmmktime() 函数不再接受 is_dst 参数。
-
4.preg_replace() 函数不再支持 “\e” (PREG_REPLACE_EVAL). 应当使用 preg_replace_callback() 替代。
-
5.setlocale() 函数不再接受 category 传入字符串。 应当使用 LC_* 常量。
-
6.exec(), system() and passthru() 函数对 NULL 增加了保护.
-
7.shmop_open() 现在返回一个资源而非一个int, 这个资源可以传给shmop_size(), shmop_write(), shmop_read(), shmop_close() 和 shmop_delete().
-
8.为了避免内存泄露,xml_set_object() 现在在执行结束时需要手动清除 $parse。
网友评论