问题标签 [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.
php - preg_match 在大文本上比 strpos 快吗?
我目前正在为 PHP 8.1.2 更新为 PHP 5.2.17 编写的非常旧的脚本。有很多文本处理代码块,几乎都是preg_match/preg_match_all。我曾经知道,字符串匹配的 strpos 一直比 preg_match 快,但我决定再检查一次。
代码是:
和
我拿了 php8.1.2 发行版附带的 readme-redist-bins.txt 文件,大约 30KB。
结果(preg_match_all):
结果(strpos):
仔细检查... 在两台机器上尝试了 Windows 和 Linux PHP 构建。
用小文件(200B)尝试了相同的代码
结果(preg_match_all):
结果(strpos):
现在时间安排好了。
那么,怎么可能 preg_match 在大文本上匹配得更快呢?有任何想法吗?
PS:尝试 PHP_7.2.10 - 结果相同。
php - PHP 8.1 fastcgi exe 在非线程安全版本中不可用
我正在将我的 php 从 7.2 升级到 8.1,以便与 IIS FastCgi 一起使用。当我按照 PHP for IIS FastCGI 的建议从下面的 url 下载非线程安全版本时,下载的文件夹中没有 php-cgi.exe。
https://windows.php.net/downloads/releases/php-8.1.2-nts-Win32-vs16-x64.zip
如果我下载线程安全版本,那么它就在那里。
在 php 下载页面中显示,IIS 如果您使用 PHP 作为 IIS 的 FastCGI,您应该使用 PHP 的非线程安全 (NTS) 版本。
https://windows.php.net/download#php-8.1
有人可以建议我这样做的正确方法是什么?
我附上了如何在我的 IIS 中设置 FastCgi。
php - 如何在 PHP8.1 中启用“imageavif”
我使用新的 php8.1 函数是imageavif但抛出错误消息undefined 函数然后打印gdinfo()但未启用 avif 那么如何启用它?
php - 从动态名称获取 PHP 枚举
我正在尝试从动态名称创建一个 php 8.1 枚举。似乎不可能。所以给定一个枚举
当然,以下工作:Foo::bar
虽然这不是:
这导致:访问未声明的静态属性 App\Console\Commands\Foo::$bar
我在这里尝试了各种技巧,但无济于事。似乎不可能从动态名称中获取枚举实例。我的自定义和快速解决方法如下所示,一个静态工厂:
我可以把它放在一个特征中并在我所有的枚举中继承它,是的,问题解决了。
我的问题是:我在这里错过了什么吗?用原生 php 方法实例化枚举真的不可能吗?还是我想错了方向?
php8.1 之前的 class-as-enum 作曲家包曾经有那些方便的方法,请参阅https://github.com/bensampo/laravel-enum 那么为什么这个非常常见的情况不属于规范的一部分(只是好奇)?
php - 处理未定义数组键的 PHP 8.1 警告
我们正在升级到 PHP 8.1。一个新功能是未定义的数组键会引发警告。
不幸的是,这会干扰轻松使用关联数组(例如 $_SESSION 变量)的能力。我理解预定义变量的优点,我不是在寻找关于这些优点的讨论。关联数组的想法是您可以轻松地将内容添加到会话中,并且所有未分配的内容都被评估为空。但现在它也发出警告;必须采取一些措施来解决这个问题。
这是一些代码的示例:
在代码的另一个地方,出现以下情况
如果这发生在未定义“is_condition”会话变量的上下文中,则将其值评估为 null 的预期结果就是我们想要的。但是现在必须做其他事情来处理它未定义的可能性。
有几种方法可以解决这个问题:
预定义所有值为 null 的会话变量。似乎它不是关联数组的精神。现在每个脚本都必须调用一组冗长的代码。
每当需要关联数组元素的值时,请使用空合并运算符。在整个代码库中放置许多额外的运算符是一个丑陋的要求。
更改我们的自定义错误处理函数以忽略未定义的数组键错误。抑制警告并增加开销是一个非常糟糕的主意。
这些方法都不是非常理想的。
解决此问题的一种理论方法是使用数组初始化语句,将所有可能的关联键分配给 null。我不知道有这样的事情。
我的问题是我是否缺少其他一些方法,例如仅抑制此特定警告的参数。
php - 不推荐使用 PHP:第 154 行不推荐使用将 false 自动转换为数组的 adodb-mssqlnative.inc.php
我们正在将 PHP 升级到 8.1 版。使用 MS Sql Server 数据库。这一切似乎工作正常,但我在日志文件中看到重复的消息:
[2022 年 2 月 3 日 11:51:18 America/New_York] PHP 已弃用:在 C:...\includes\adodb\drivers\adodb-mssqlnative.inc.php 第 154 行不推荐将 false 自动转换为数组
我已将 adodb 更新到 5.22 版,但这并没有阻止消息记录。ini 文件有
有谁知道如何解决这个问题?
php - Laravel Enum 转换错误调用未定义的方法 App\\Enums\\UserType::from()
当我尝试将模型中的属性转换为我的一个枚举时,它会引发错误:
调用未定义的方法 App\Enums\UserType::from()
我找不到有关所需find()
方法的任何信息。
我按照这里的说明进行操作。
我的枚举UserType
:
我的用户模型:
php - PHP 和 imagecreatefromstring 替代方案
有人可以为php函数提供替代方案吗
我用 php 8.1 安装了最新的 xampp,而 php.ini 没有 GD2 库。
php - 在 Symfony WebTestCase 中将 null 反序列化为 DateTime 类型失败
示例代码基于 Symfony 6 和 PHP 8.1。
我编写了一个测试来验证 RESTful API 端点/posts/{id}。
JSON 响应输出是这样的。
请注意,publishedAt
响应 JSON 中的null
.
我尝试使用该serializer
组件将响应内容反序列化为Post
对象。
运行测试时,我得到以下异常。
示例代码可在我的 Github 帐户上找到。publishedAt
ofPost
是DateTime|null
混合型。
让我困惑的是默认的序列化结果不能使用相同的
Serializer
组件反序列化。如果可以在将对象序列化为 JSON 字符串时,全局
Serializer
配置组件以跳过值和空值(字符串、数组和集合),如 Java 世界中的 Jackson。null
php - php 8.1 - explode():不推荐将 null 传递给字符串类型的参数 #2 ($string)
在 8.1 中遇到一些不推荐使用的错误,我想解决。
PHP Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in...
$result['comp_uids'] 在这种情况下为空,这就是显示 null 错误的原因。我不确定他们为什么要弃用此功能,但建议的更改是什么来避免这种情况?我看到strlen(): Passing null to parameter #1 ($string) of type string is deprecated
和其他一些人使用 8.1 类似。