array_key_first():参数#1($array)必须是数组类型,如果使用php 8.1则为null,但php 7.4工作正常[重复]

nfs0ujit  于 4个月前  发布在  PHP
关注(0)|答案(1)|浏览(71)

此问题在此处已有答案

Laravel 9 in_array(): Argument #2 ($haystack) must be of type array, null given(3个答案)
10天前关门了。
我需要帮助。当我使用php 8.1时,出现了错误,但当我使用php 7.4时,它没有出现。我想使用php 8.1我的代码是

$categorySlug = @array_key_first($post->terms['category']);
    if($categorySlug) {
        $request = new Request();
        $request->per_page = 10;
        $request->category = $categorySlug;
        $related = $this->getAllPost($request);
    }

字符串
错误:array_key_first():参数#1($array)必须是数组类型,行:$categorySlug = @array_key_first($post->terms['category']);中给定的值为空
我该如何解决问题?
谢谢

ltqd579y

ltqd579y1#

Kiko的评论是一个很好的建议。
你也可以像这样快速修复

$categorySlug = @array_key_first($post->terms['category'] ?? []);
// ...

字符串
关于$post->terms['category'] ?? []
如果$post->terms['category']为null,则传递给array_key_first的值将为空数组
正如Kiko所建议的,你必须谨慎对待这个测试。

if($categorySlug) {
//...
}


array_key_first可以返回0如果你的数组的第一个键是0.如果array_key_first失败,函数将返回null(检查php手册)所以你必须做这样的严格测试

if($categorySlug !== null) {
// ...
}


总是对php进行严格的测试是一个好习惯。
(Out奇怪的是,在php7.4中你没有一个警告。也许php7.4和php8.1的error_reporting配置是不同的
(Out 2)对于干净的代码和代码类型弱点检测(如if($categorySlug)),您可以查看phpstan包。

相关问题