0

我在Windows 10 Home Single Language 64 位操作系统上运行的家用计算机上使用PHP 7.3.4

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

今天,我从PHP 手册中看到了以下文本:

如果needle不是字符串,则将其转换为整数并用作字符的序数值。自 PHP 7.3.0 起,此行为已被弃用,并且强烈建议不要依赖它。根据预期的行为,应该将needle显式转换为字符串,或者显式调用chr()

从上面的陈述中,我很好地理解,如果传递给内置函数的参数“needle”strpos()不是字符串,我必须将其显式转换为字符串,但我不明白如何对内置函数执行显式调用-在函数中传递给内置函数chr()的参数“needle”strpos()不是字符串

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

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

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

谢谢你。

4

1 回答 1

4
$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(): 非字符串的 needles 将来会被解释为字符串。使用显式chr()调用来保留 /.. on line 中的当前行为 ..

于 2019-04-22T07:18:47.723 回答