问题标签 [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 投票
1 回答
97 浏览

php - 检查 PHP 枚举是否包含大小写,例如基本(非支持)枚举的 try() 方法

我有基本的枚举

以及一些使用该枚举键入的函数:

和具有未知内容的变量

我在文档中找不到检查枚举是否包含特定情况的简单方法。

像这样的支持枚举是可能的

这将起作用,但from在我的第一个示例中的非支持枚举上不存在。

0 投票
1 回答
54 浏览

php - PHP公共只读属性与带有getter的私有字段

PHP 8.1 引入了readonly类属性。例如,在我写之前:

但现在我可以这样做:

后者显然更紧凑,所以我想知道这种语法是否完全取代了每个用例的前者,还是仍然存在应该首选“旧”语法的情况?

0 投票
2 回答
133 浏览

php-8.1 - PHP 纤维和内存

据我所知,PHP 将类加载到内存中并且从不释放它们。这在使用属性时可能会出现问题。

我想知道是否可以使用纤维。光纤的独立性如何?最终的问题是:如果一个 PHP 纤程加载一个类,它会自动加载到 PHP 代码的其余部分,还是一个单独的内存空间?

0 投票
1 回答
290 浏览

php - PHP 8.1.1 PDO 驱动程序未加载

为什么 PHP 8.1.1 不使用 Apache 2.4.52 加载 PDO 驱动程序,即使模块已加载到 PHP CLI 上?

我正在运行一个 windows 11 64 位系统,我从 https://www.apachehaus.com/cgi-bin/download 尝试了 Apache/2.4.52 (Win64) (Apache 2.4 VS16) 和 Apache 2.4.x OpenSSL 1.1.1 VC15 。 plx#MODULES24VS16

我也从上面的站点安装了 Microsoft Visual C++ 2019 Redistributable (VS16)。我从https://windows.php.net/download#php-8.1安装了 PHP 8-1.1 VS16 x64 Thread Safe (2021-Dec-15 11:08:34) 。

我启用了扩展(未注释)。

现在的问题:

在 Apache 2.4 VS16 版本中,Apache 未启动 httpd.exe -t 无法将 c:\php-8.1.1\php8apache2_4.dll 加载到服务器中:%1 不是有效的 Win32 应用程序。

httpd.conf 上的配置:

在 Apache VC15 服务器启动但 PDO 驱动程序未加载 phpinfo() PDO 驱动程序无值 curl 未加载 pgsql 未加载

php cli 正在工作。

0 投票
0 回答
185 浏览

php - 不允许将 null 传递给参数的函数列表

我开始升级到 PHP 8.1,我遇到的问题之一是Passing null to parameter #1 ($string) of type string is deprecated。(请参阅相关问题和有问题的 RFC

例如,默认情况下,我的所有数据库结果都运行通过htmlspecialchars(),如果该字段是 ,这将导致问题null,如下所示:

由于遗留代码依赖于鸭式打字,这可能会出现在任何地方,并且有谁知道有多少功能。我将不得不手动搜索所有遗留代码以找到可能被评估的null 实例

到目前为止,我还没有找到已被破坏修复的内部函数的列表。任何人都可以指出这些功能的列表吗?

0 投票
1 回答
613 浏览

php - 将主机升级到 php 8.1 后的 Laravel 问题

下面是修改后的代码,在 `composer update.

PHP 8.1.1 (cli) (built: Dec 15 2021 04:17:42) (NTS) 版权所有 (c) The PHP Group Zend Engine v4.1.1, 版权所有 (c) Zend Technologies

这是错误日志:

请给我一个解决这个问题的方法。

0 投票
2 回答
68 浏览

php - 自制安装后的PHP版本问题

MacOS 12.1 使用自制软件(以及 apache/mySQL 和 phpmyadmin)成功安装 php 8.1 后,我尝试安装/链接 php 7.4 失败。按照说明安装、取消链接、链接后, php -v 返回 7.4 但 phpinfo() 显示 8.1。我究竟做错了什么?

0 投票
3 回答
49 浏览

php - 您如何访问枚举案例的属性?

根据RFC on Enumerations,可以通过使用将属性添加到案例中Attribute::TARGET_CLASS_CONSTANT。(实际上,RFC 说TARGET_CLASS_CONST,但这要么是错字,要么是后来的更改。)但是,我在尝试使用反射访问它们时遇到了麻烦。

鉴于此设置:

我希望下面的代码给我一个具有单个属性的数组,但是它返回一个空数组。

此处演示:https ://3v4l.org/uLDVQ#v8.1.2

我在PHP src中找到了一个测试用例,但是用法不是我所期望的。我需要分解它,而不是使用实例:

此处演示:https ://3v4l.org/BsA9r#v8.1.2

我可以使用这种格式,但感觉真的很hacky,因为我几乎在反射中使用反射:

此处演示:https ://3v4l.org/YY6Oa#v8.1.2

具体来说,该new \ReflectionClassConstant($obj::class, $obj->name)模式似乎奇怪的样板。

是否有另一种方法可以访问我缺少的单个枚举案例属性?

0 投票
0 回答
102 浏览

php - 来自 PHP 8.1 的 vscode + PHP intelephense 命名参数显示为错误

在用 PHP8.1 编写的代码中,我在方法调用中使用命名参数:

但是扩展 PHP Intelephene 显示 2 个错误:
Undefined constant 'App\Some\Namespace\name'.intelephense(1011)
Unexpected ':'.intelephense(1001)

我已经尝试过(没有成功):

  • 全系统安装 PHP8.1 并将其设置为默认版本(cli 版本 PHP 8.1.2)
  • 为用户和工作区设置这些
    • "intelephense.environment.phpVersion": "8.1.2",
    • "php.validate.executablePath": "/usr/bin/php8.1",
  • 重启(完全关闭 vscode 并再次重新打开工作区文件夹)

编辑/回答 - 将您的 VSCODE 更新为最新!

如果您不确定在哪里可以找到 - 请查看帮助 > 关于,然后查看 vscode 更新网站。最后的问题实际上是一个过时的 Visual Studio Code 问题,导致扩展无法正确更新。这怎么发生的?我不小心使用了没有自我更新的 vscode,apt install code它可以与 snap 版本一起安装 - 对于 ubuntu,解决方案是删除 apt 代码并只保留 snap 版本或安装它sudo snap install --classic code- 感谢https: //askubuntu.com/a/1217734/277898让我实现 x)

0 投票
0 回答
35 浏览

php - Uncaught TypeError: sqlsrv_fetch_array() 错误,因为升级到 PHP8.1

今天我升级到php8.1,从那以后我遇到了以下问题。我运行以下查询:

然后我想遍历数组并输出数据:

到目前为止,这一直有效(php7.2)。自从升级以来,不幸的是,这只有时有效。有时它运行没有问题,有时我在日志中收到以下错误:

平均而言,我每执行 5 次就会收到一次错误。

作为requestet完整的代码: