为什么要检查 stripslashes 函数是否存在?

Why check if stripslashes function exists?

我发现以下代码检查 stripslashes() 函数是否存在。

if ( function_exists( 'stripslashes' ) ) {
    // Do something
} else {
    // Do something
}

stripslashes()函数作用于PHP4和PHP5,所以我想知道为什么它需要一个条件语句来检查函数是否存在。没看懂。

这不是一个主观问题。告诉我使用这个语句和不使用它有什么区别。提前致谢!

以下是有关它们使用位置的相关链接:

PHP 中曾经有一个被称为 magic quotes 的功能,虽然本意是好的,但引起了无穷无尽的混乱。

这段代码很可能是为了检测魔术引号,但这不是正确的方法,尤其是因为它不起作用。

检测是否启用魔术引号的正确方法是使用为此目的制作的函数,get_magic_quotes_gpc 就像这样。

if (get_magic_quotes_gpc()) {

或者可能是以下内容,如果您担心这将被删除。

if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {

也就是说,整个魔术引号功能在 PHP 5.4 中被删除了,所以除非你需要支持 PHP 的过时版本,否则你可以忘记整个事情曾经存在过(除非你使用的是 WordPress...).

附带一提,我想 stripslashes 功能可能会在未来被删除,并且可能在某一时刻不存在,但在这种情况下,这可能不是原因。

旁注:转录自我的一些评论(略有修改)以提供对亚历山大的评论的补充回答。


这可能是为了检查是否有一些编码员创建了一个自定义函数,调用了相同的函数(一个人的疯狂方法?),或者有人黑了 PHP核心并将其删除;我当然是在猜测,也不是不可能。

然而,if ( function_exists( 'mysql_real_escape_string' ) )也是如此。

如果服务器不支持那些旧的和已弃用的 mysql_ functions,则需要条件语句并且证明 effective/useful 可以使用那种性质的东西。

参考资料:(从 PHP 7 开始删除 mysql_,以及其他弃用通知)

就个人而言,function_exists() should only be used against probable deprecated functions; mysql_ being one of them and session_register() - 我相信还有更多。

根据 Alexander (O'Mara) 在评论中所说,它在贡献的注释手册中列出 http://php.net/manual/en/function.stripslashes.php and it seems to have something to do with magic_quotes_gpc


N.B.:

我绝不希望从中得到任何东西,但对于其他访问该问题的人来说。