当传递给内置函数strpos()的参数'needle'不是字符串时,如何显式调用内置函数chr()?

How to perform an explicit call to the built-in function chr() when the parameter 'needle' passed to the built-in function strpos() is not a string?

我在家用机器上使用 PHP 7.3.4 Windows 10 Home Single Language 64-位 操作系统

我已经在这台机器上安装了最新版本的 ox XAMPP 安装程序。

今天,我从 PHP Manual 看到以下文字:

needle

If needle is not a string, it is converted to an integer and applied as the ordinal value of a character. This behavior is deprecated as of PHP 7.3.0, and relying on it is highly discouraged. Depending on the intended behavior, the needle should either be explicitly cast to string, or an explicit call to chr() should be performed.

从上面的语句中,我很明白如果传递给内置函数strpos()的参数'needle'不是一个string 我必须将它显式地转换为 string 但我不明白如何对内置函数 chr() 执行显式调用传递给内置函数 strpos() 的参数 'needle' 不是 string.

因为我使用的是 PHP 的最新稳定版本,即 PHP 7.3.4,我想要 工作代码PHP 7.3.x 版本的示例 将演示如何显式调用内置函数 chr()当传递给内置函数 strpos() 的参数 'needle' 不是 字符串 时执行。

如果有人能给我提供工作代码示例会更好,该示例将演示参数 'needle' 是否传递给内置函数 strpos() 不是 string 如何将其显式转换为 string.

简而言之,我需要两个工作代码示例来演示 手册文本

谢谢。

$vs = [42, '42'];
foreach ($vs as $v) {
    var_dump(
        strpos('zz*z', is_string($v) ? $v : chr($v)),
        strpos('zz42z', (string)$v)
    );
}

输出:

int(2)       // chr of 42 is "*"
int(2)       // casting 42 to string gives you "42"
bool(false)  // There's no "42" in first string
int(2)       // casting string "42" to string still gives you a string "42"

在 php7.2 及更早版本中:

var_dump(
    strpos('zz*z', 42),
    strpos('zz42z', 42)
);

输出:

int(2)        // 42 implicitly converted to "*"
bool(false)   // 42 implicitly converted to "*"

在 php 7.3 中,您将得到 相同的结果,但有警告:

Deprecated: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior in /.. on line ..