PHP 7.2.25 错误!= 错误?

Posted

技术标签:

【中文标题】PHP 7.2.25 错误!= 错误?【英文标题】:PHP 7.2.25 FALSE != false? 【发布时间】:2019-12-05 01:43:18 【问题描述】:

谁能解释一下?我假设我正在做一些令人难以置信的愚蠢的事情,并且急切地等待启蒙。

<?php
echo "phpversion() == " . phpversion() . "\n\n";

var_dump(FALSE);
var_dump(False);
var_dump(false);

echo "\n";
echo "(FALSE === false) == " . ((FALSE === false) ? "true" : "false") . "\n";
echo "(((bool)FALSE) === false) == " . ((((bool)FALSE) === false) ? "true" : "false") . "\n";
?>

我得到这个输出:

phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108445

int(0)
bool(false)
bool(false)

(FALSE === false) == false
(((bool)FALSE) === false) == true

关心的原因是,fopen() 的文档说它在失败时返回FALSE。但是,至少在这个 PHP 版本中,它返回了false,所以我的if ($fh === FALSE) 检查失败了,这让我觉得fopen() 成功了,尽管它确实失败了。

我的朋友正在运行一个不同的版本(Ubuntu 上的 PHP 7.2.24),并且在那里,FALSE === false。我假设如果FALSE != false 到处都是爆炸,那么……到底发生了什么?

【问题讨论】:

PHP 的真/假常量不区分大小写,并且始终将var_dumpbool 相同。您必须在其他地方定义了一个常量... 不过,这就是我的全部剧本!该常量定义是否可能在其他地方完成,在某个 .ini 文件中? 顺便说一句,它的行为与您在我的 Ubuntu 机器上所期望的完全一样:phpversion() == 7.2.19-0ubuntu0.18.04.2bool(false)bool(false)bool(false)(FALSE === false) == true(((bool)FALSE) === false) == trueDERP 好吧,想象一下格式正确. 您是否将名为FALSE 的环境变量设置为0 想法用尽了......httpd.conf.htaccess 呢? 【参考方案1】:

我还没有弄清楚原因,但它是我自己构建的两个 PHP 扩展之一:删除它们,它可以按预期工作:

phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108445

bool(false)
bool(false)
bool(false)

(FALSE === false) == true
(((bool)FALSE) === false) == true

可能添加我如何设法在 PHP 扩展中意外地重新定义 FALSE 的详细信息;取决于他们有多尴尬。

编辑:我仍在查看细节,但简短的版本是,我使用 SWIG 围绕 libmodbus 构建了一个包装器,它的 src/modbus.h 具有:

#ifndef FALSE
#define FALSE 0
#endif

... 这不是不合理的,但是我懒惰地包含了 libmodbus 中的“所有内容”,而不是指定我想要公开的各个函数,我猜这就是 FALSE 进入那里的方式。 (但是,作为 PHP 扩展部署的结果 .so 似乎不包含名称中带有 FALSE 的符号,所以......我还在寻找。)

编辑 2: 是的,只要在 SWIG .i 中有一个 #define 就足以让 SWIG 将其定义为用于 PHP 的常量。 (这是有道理的。)

顺便说一句,SWIG documentation 中可能让我有点错误的部分(让我告诉 SWIG 包含所有 libmodbus 的标头而不是指定每个函数)是 "真正懒惰的人 SWIG。” 看,当我看到一个部分看起来像是 为我写的, 这就是我正在阅读的内容。 p>

【讨论】:

很高兴看到你弄明白了。这将为遇到此问题的任何其他人提供有用的参考。

以上是关于PHP 7.2.25 错误!= 错误?的主要内容,如果未能解决你的问题,请参考以下文章

PHP的错误处理

php504错误

php错误处理

为啥php会出现500错误呢?急!

怎么让php打印错误日志?

PHP之错误处理