我只是在调试一些代码,发现
$id = null;
$field = $id === null ? true : false;
$field = $id ? true : false;
两者都应将 $field 设置为 TRUE 值。但是由于某种原因,它不能按预期工作。第一个返回真,另一个返回假。
Edit1:我在写问题时不小心弄错了东西。这应该是它不同的原因。
Edit2:我问我的问题,因为这种行为在 2 个不同的服务器上是不同的。预计第二个示例将返回 True,但不知何故,它在我的一台服务器上没有返回 true。
Edit3:这是真正的代码。Prestashop 1.5 中的类/ObjectModel.php
/* Copy the field, or the default language field if it's both required and empty */
if ((!$this->id_lang AND isset($this->{$field}[$id_language]) AND !empty($this->{$field}[$id_language]))
OR ($this->id_lang AND isset($this->$field) AND !empty($this->$field)))
$fields[$id_language][$field] = $this->id_lang === null ? pSQL($this->$field) : pSQL($this->{$field}[$id_language]);
elseif (in_array($field, $this->fieldsRequiredLang))
$fields[$id_language][$field] = $this->id_lang === null ? pSQL($this->$field) : pSQL($this->{$field}[Configuration::get('PS_LANG_DEFAULT')]);
else
$fields[$id_language][$field] = '';
预期的行为(在大多数服务器上都是如此)是如果 $this->id_lang 设置为 null,那么应该使用 $this->$field 而不是 $this->$field[$id_language]。但是,在我在 CentOS 机器上设置的服务器上,这种行为有所不同,当值设置为 null 时,它会将 $this->$field[$id_language] 作为值。