问题标签 [php-8.1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
78 浏览

php - 当重载一个父方法时,为什么 PHP8.1 转向弃用不兼容的返回类型?

我像这样重载query了类的方法mysqli

在 PHP8.0 中这不是问题。但是,从 PHP8.1 开始,我现在收到此错误:

已弃用:返回类型 ofRepository\MySql\MySql::query($sql, $resultmode = null)应与 兼容mysqli::query(string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool,或者#[\ReturnTypeWillChange]应使用该属性暂时抑制第repository\src\MySql\MySql.php30 行中的通知

我知道如何修复错误——我可能最终会更改方法的名称,因为我想返回一个我自己的自定义对象。

问题

我正在寻找一个从理论和面向对象的角度捕捉这种变化需求的答案,可能使用语言理论,或者将其与其他语言进行比较。

为什么这个改变是必要的?进行此更改的需要或原因是什么?扩展类时,有什么方法可以在 PHP 中允许重载返回类型?

0 投票
1 回答
136 浏览

php - php 8.1 - 旧脚本中不推荐使用的返回类型

尝试更新到 php 8.1 并注意到这个已弃用的通知出现在我想要处理的错误日志中。

[14-Feb-2022 14:48:25 UTC] PHP Deprecated: Return type of TLDExtractResult::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/example/public_html/assets/tldextract/tldextract.php on line 299

我能够抑制警告,但实际上想更新脚本,以便将来没有问题。

这是有问题的代码部分:

php 8.1 到底不喜欢这里什么?这比我通常用 php 做的稍微高一点,并且不能完全确定这个问题。听起来像是需要指定特定的返回类型?

0 投票
1 回答
840 浏览

php - 参考:...的返回类型应该与...兼容,或者应该使用#[\ReturnTypeWillChange] 属性

在 PHP 8.1 中,以下代码在以前的版本中有效:

发出弃用通知:

不推荐使用:Example::count() 的返回类型应该与 Countable::count(): int 兼容,或者应该使用 #[\ReturnTypeWillChange] 属性来暂时抑制通知

这是什么意思,我应该如何解决?

0 投票
0 回答
34 浏览

enums - 在 Laravel 唯一验证 where 子句中检查支持的枚举的标量值

在 Laravel 9 和 PHP 8.1 中,我无法比较 laravel 验证规则中支持的枚举,您可以在其中使用 ->where 子句。它需要一个标量值来比较。有没有其他方法可以与枚举对象而不是标量值进行比较?

JProjectStatus 是一个支持的枚举

当我试图检查经理在项目是否处于活动状态时是唯一的时,我遇到了一个类型错误,我完全理解它正在将stringenum object进行比较。

消息“str_replace():参数 #3 ($subject) 必须是数组|字符串类型,App\Enums\JProjectStatus 给定”异常“TypeError”

但是,如果我像下面这样写,这是一个与 str_replate() 完全匹配的缩放器值。

因为现在'JProjectStatus::Active->value''active'的标量值

当然,我可以在 where 条件下通过闭包,但想知道最佳实践。我的问题是,这样写可以吗,或者有没有其他方法可以用枚举对象编写最佳实践。

0 投票
1 回答
43 浏览

laravel-8 - Laravel Route Model Binding,当我通过加密的 Id 进行编辑时显示 404

当我以前编辑语言表时,我使用了更容易的路由模型绑定方法。但我的客户要求所有通过 URL 的 id 都应该加密。在这里我的尝试以 404 失败

编辑.blade.blade

语言控制器

在此处输入图像描述

0 投票
1 回答
66 浏览

php - Lumen v9 缺少 php artisan schedule 命令

在 lumen v8 中,我可以访问artisan schedule:*命令。

将流明升级到 v9 后:

工匠命令控制台缺少artisan schedule:*命令(如artisan schedule:run)!

它们在 lumen v9 中被移除了吗?文档没有提到它们是否是。 https://lumen.laravel.com/docs/9.x/releases

谢谢!

0 投票
1 回答
71 浏览

php - PHP 类可以在不调用方法或变量的情况下返回一个类数组吗?

在 PHP 中,我希望能够遍历一组类以帮助设置、插入和验证值。在方法 args 中使用类作为类型将使代码更加严格,这将有助于避免错误。

我能够访问该集合,但只能通过公共数组或方法($values->array$values->get())。我希望能够$values直接用于更简洁的代码。例如,要访问引用,我需要使用$values->array[0]or$values->get()[0]而不是$values[0]. 如何用 PHP 实现这一点?

预期用途:

课程:

0 投票
1 回答
26 浏览

php - 我如何将这个奇怪的 PHP 行翻译成不那么紧凑的东西?

我有这段代码,它是我用来确定给定字符串是否是保留的 PHP 关键字的函数的一部分(因为 PHP 没有内置的函数):

它使 PHPStan 吠叫:

参数 #1 $array of function reset 需要给出 array|object, array<int, int|string>|string。

我不知道为什么,但希望错误消失,所以我试图“展开”这条紧凑的线路,但我意识到我不明白它在做什么。你能解释一下并帮助我吗?我经常发现将事情分成单独的行/操作会使 PHPStan 停止吠叫。

0 投票
1 回答
50 浏览

php - PHP 8.1 中是否有特定类的对象数组的类型提示?

是否有类型提示PHP 8.1允许用于ExampleClass[]声明它是类的对象数组ExampleClass


在我的具体情况下,ExampleClass称为Task

我想要但不起作用:

我的 PHPStorm IDE 告诉我,复数类型只允许在文档类型
中使用- 说只有在PHPDoc使用中才Tasks[]可以。但我想使用普通的 PHP

错误是 :PHP Parse error: syntax error, unexpected token "[", expecting variable


如果我只需要一个对象Task而不是一组对象Task[],它将使用:


这是我目前的工作解决方法:

0 投票
2 回答
35 浏览

php - PHP file_get_contents() 和 curl_exec() 从网站失败,但从命令行工作

使用一行代码创建 .test.php 文件:

当我从浏览器打开 .test.php 时,它显示 bool(false) 但是当我从命令行运行它时,它按预期显示我的 WAN IP。

我正在使用 CentOS 9、nginx 1.20.1 和 PHP 8.1.3(虽然我也尝试过 RHEL8 和 Apache)

我尝试设置/etc/php-fpm.d/www.conf以使用我的用户 ID 和组来确保这不是权限问题。

phpinfo() 显示allow_url_fopen设置为 On 并且 curl 7.76.1 已启用并且 OpenSSL 已启用版本 3.0.1

我还尝试了一个 http: URL

我还尝试在 .php 文件中使用curl()库,这些库以相同的方式失败。

如果调用php -v或另一个 .php 文件,则从 .php 文件调用exec()有效,但如果调用curl则无效

不知道还能尝试什么,所以我可能会再次对整个服务器进行核攻击。

更新:在 /var/log/nginx/error.log 中找到了这个 FastCGI sent in stderr: "PHP message: PHP Warning: file_get_contents(https://checkip.amazonaws.com): Failed to open stream: Permission denied

怎么办?