PHP 7.4添加了对弱引用的支持,以此作为保留对对象的引用的一种方式,这种引用不会阻止对象本身被破坏 。
在长时间运行的进程中,这将防止内存泄漏并提高性能 。:
$map = new WeakMap;
$obj = new stdClass;
$map[$obj] = 42;
var_dump($map);
使用PHP 8,上面的代码执行结果如下:
object(WeakMap)#1 (1) {
[0]=>
array(2) {
[“key”]=>
object(stdClass)#2 (0) {
}
[“value”]=>
int(42)
}
}
如果取消设置对象,则键会自动从弱Map中删除:
unset($obj);
var_dump($map);
现在的结果如下:
object(WeakMap)#1 (0) {
}
参数列表中的尾部逗号尾随逗号是附加到不同上下文中的项目列表的逗号 。PHP 7.2在列表语法中引入了结尾逗号,PHP 7.3在函数调用中引入了结尾逗号 。
PHP 8现在在参数列表中以函数,方法和闭包形式引入尾部逗号,如以下示例所示:
class Foo {
public function __construct(
string $x,
int $y,
float $z,
) {
// do something
}
}
在对象上允许:: class语法为了获取类的名称,可以使用Foo\Bar::class语法 。建议将相同的语法扩展到对象,以便现在可以获取给定对象的类的名称,如下例所示:
$object = new stdClass;
var_dump($object::class); // “stdClass”
$object = null;
var_dump($object::class); // TypeError
使用PHP 8,$object::class提供与相同的结果get_class($object) 。如果$object不是对象,则抛出TypeError异常 。
属性v2属性,也称为注释,是结构化元数据的一种形式,可用于指定对象,元素或文件的属性 。
在PHP 7.4之前,文档注释是将元数据添加到类,函数等的声明中的唯一方法 。Attributes v2 RFC引入了PHP属性,这些属性将它们定义为结构化的语法元数据的形式,可以将其添加到类,属性,函数,方法,参数和常量 。
将属性添加到它们所引用的声明之前 。示例:
<<ExampleAttribute>>
class Foo
{
<<ExampleAttribute>>
public const FOO = ‘foo’;
<<ExampleAttribute>>
public $x;
<<ExampleAttribute>>
public function foo(<<ExampleAttribute>> $bar) { }
}
$object = new <<ExampleAttribute>> class () { };
<<ExampleAttribute>>
function f1() { }
$f2 = <<ExampleAttribute>> function () { };
$f3 = <<ExampleAttribute>> fn () => 1;
可以在文档块注释之前或之后添加属性:
<<ExampleAttribute>>
/** docblock */
<<AnotherExampleAttribute>>
function foo() {}
每个声明可以具有一个或多个属性,并且每个属性可以具有一个或多个关联值:
<<WithoutArgument>>
<<SingleArgument(0)>>
<<FewArguments(‘Hello’, ‘World’)>>
function foo() {}
新的PHP函数PHP 8为该语言带来了几个新功能,str_contains,str_starts_with(),str_ends_with()和get_debug_type
str_contains在PHP 8之前,strstr和strpos是开发人员在给定字符串中搜索针的典型选择 。问题是,这两个函数并不是很直观,它们的用法可能会使新人员感到困惑 。
$mystring = ‘Managed WordPress Hosting’;
$findme = ‘WordPress’;
$pos = strpos($mystring, $findme);
if ($pos !== false) {
echo “The string has been found”;
} else {
echo “String not found”;
}
在上面的示例中,使用了!==比较运算符,该运算符还检查两个值是否属于同一类型 。如果针的位置为0,这可以防止我们出错:
经验总结扩展阅读
- 2020年11月开始施行 交通违法记分罚款有重大调整
- 常见的SEM面试题及最佳答案 sem面试技巧
- 乒乓球底板用什么木做最好
- 裙装 优雅女人到底是什么样子?裙装和头发的细节,最能证明一切
- 下雨天怎么发朋友圈表示一下心情2022最新
- 女孩起名大全2020最新版
- 2020年属鼠新生宝宝取名字大全
- 2020年鼠年女孩取名用字技巧
- 2020年属鼠男孩寓意好的名字
- 2020年属鼠男孩怎样起名字