出于某种原因,当我运行.php
脚本时:
$s = yaml_parse_file("../config.yaml") || die("YAML file not found");
var_dump($s);
它返回:
布尔(真)
到底是怎么回事?这已经发生了,它一直工作正常一个星期,我似乎无法解决它。我已经安装了使用pecl install yaml
并将"extension=yaml.so"
添加到php.ini
?
我使用过在线yaml正则表达式测试仪,他们回来说它没关系。格式是(显然有内容):
title:
email: hello@
logo: images/logo.png
download-file: .dmg
recaptcha:
pub:
priv:
meta:
keywords: mac, osx
description:
ico: images/icon.ico
您将布尔运算的结果赋给$s
,因为||
运算符的优先级高于赋值。所以它的评估如下:
$s = (yaml_parse_file("../config.yaml") || die("YAML file not found"));
返回true,因为初始表达式返回“truthy”值。
如果您将赋值括在括号中,它将按预期工作:
($s = yaml_parse_file("../config.yaml")) || die("YAML file not found");
...
代码工作之前,以前用于阅读:
$s = yaml_parse_file("../config.yaml") or die("YAML file not found");
你最近用or
改变了||
(为什么?),却不知道他们是不同的运营商,他们有different precedence。
or
具有最低优先级,上面的表达式被评估为:
($s = yaml_parse_file(...)) or die(...)
||
的优先级高于赋值(=
),问题中的表达式评估为:
$s = (yaml_parse_file(...) || die(...))
要解决这个问题,首先你应该忘记or die()
。这是15年前PHP教程传播的错误编码实践。令人遗憾的是,他们中的许多人仍然可以上网,并教新手们在发生错误时如何在访客面前扔白页。
or die()
没用。如果yaml_parse_file()
(或者你使用它“处理”的任何函数)返回FALSE
,那么尝试使用结果的下一个语句最有可能会失败。并且您将在php_errors.log
中获得或多或少的描述性错误消息。该错误消息可帮助您调试代码并识别和修复错误。 or die
没有任何帮助。它只是将错误隐藏在地毯下并告诉访问者他们自己可以看到的内容:您的网站无法正常工作。但它并没有告诉你错误是什么或如何解决它。