本文目录一览:
php7中的php-fpm默认安装在什么地方
安装后的PHP7配置文件所在路径是 /usr/local/php7/etc 。该目录下会有两个配置文件: php-fpm.conf 和 php.ini ,以及一个文件夹 php-fpm.d (包含 文件)。
Php7有哪些新特性
PHP 7.4 的主要特性包括以下几个,
短闭包函数(short closure) 预加载提交性能 属性类型限定 Improved type variance(不会翻译) 三元运算简写 数组展开运算 新增类的魔术方法:serialization 数字分隔符 运算优先顺序 允许在__toString中抛出异常 支持反射引用 新增字节分割函数 移除php短标签 弃用左关联运算符 不再向后兼容的变更 短闭包函数
短闭包函数可以减少冗余代码:
array_map(function (User $user) { return $user-id; }, $users) array_map(fn(User $user) = $user-id, $users)
需要注意几点:
短闭包可以直接访问闭包函数外面的变量,所以不需要再写?use?关键词 以fn关键词开始 $this?可以像普通的闭包一样使用 短闭包只有一行代码,仅仅做返回声明使用,不允许使用return?关键词
还可以使用更严格类型的方式
$ids = array_map(fn(User $user): int = $user-id, $user); 预加载
PHP预加载可以极大的提高性能
优点:在PHP 7.4以前,如果你使用了框架来开发,每次请求文件就必须加载和重新编译。预加载在框架启动时在内存中加载文件,而且在后续请求中永久有效。
缺点:性能的提升会在其他方面花费很大的代价,每次预加载的文件发生改变时,框架需要重新启动。
属性类型限定 class A { public string $name; public Foo $foo; }
不得不说,PHP越来越接近Java等强类型语言
Improved type variance
协变返回类型:
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }
依赖(是不是很熟悉):
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } } 简写三元运算符
在目前 PHP 7以后的写法:
$data['date'] = $data['date'] ?? new DateTime(); 在PHP 7.4你可以这样写: $data['date'] ??= new DateTime(); 数组展开运算
合并数组到另一个数组中,返回一维数组
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]
注意? :只对数字索引有效
新增类的魔术方法
RFC添加了两个新的魔术方法__serialize和__unserialize
数字分隔符
允许使用下划线更直观的分隔数值
$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88; 运算优先顺序
PHP 7.4之前,如果你这样写:
echo "sum: " . $a + $b; PHP会解析为: echo ("sum: " . $a) + $b; PHP 8将会解析为: echo "sum :" . ($a + $b); __toString中抛出异常支持反射引用
PHP 7.4将会新增ReflectionReference?类
移除php短标签
?将会在PHP 8中移除,?=会继续保留
弃用左关联运算符
PHP遗留了一些奇怪的怪癖,比如
1 ? 2 : 3 ? 4 : 5; // 将会在 PHP 7.4 中废弃,在 PHP 8中会抛出编译错误 (1 ? 2 : 3) ? 4 : 5; // 正确 不再向后兼容的变更 弃用在没有父类的情况下调用parent:: 调用var_dump打印DateTime和DateTimeImmutableshi’实例,将不再保留对象上的可访问属性 openssl_random_pseudo_bytes?会在调用错误时抛出异常 序列化PDO和PDOStatement?实例将会生成一个Exception而不是PDOException异常 调用get_object_vars()打印ArrayObject?实例将会返回ArrayObject?自己的属性,而不是被包裹的数组或对象的值,
数组强制转换不受影响
PHP7如何在php.ini文件中开启自动转义功能? php.ini中不包含magic-quote
首先说明下magic-quote在PHP5.4版本中就已经废除了。详情请参考:
1. magic_quotes_gpc和magic_quotes_runtime作用
magic_quotes_gpc主要是作用是自动转义GET/POST/COOKIES请求的数据,也就是自动执行 addslashes()。magic_quotes_gpc在5.4版本之前的配置中有两个值,分别是0(关闭)和1(开启),默认配置是1(开启)。
magic_quotes_runtime主要作用是自动转移sql,为了防止恶意攻击获取数据库信息。magic_quotes_runtime在5.4版本前的配置也有两个值,分别是0(关闭)和1(开启),默认配置是0(关闭)。
2. magic_quotes_gpc和magic_quotes_runtime的应用
假设提交过来的数据分别是$datastr= 'aaa'; $datafile= implode(file('demo.txt'));第一个数据是一个字符串,第二个是读取的文件信息,但是你不知道是否安全。就可以使用get_magic_quotes_gpc()和get_magic_quotes_runtime()进行判断。
注意:一般来说为了运行效率会将get_magic_quotes_gpc()和get_magic_quotes_runtime()设置成常量进行判断