いくつかのコードをデバッグしていたところ、
$id = null;
$field = $id === null ? true : false;
$field = $id ? true : false;
どちらも $field を TRUE 値に設定する必要があります。しかし、何らかの理由で意図したとおりに動作しません。最初の 1 つは true を返し、もう 1 つは false を返します。
Edit1: 質問を書いているときに、うっかり間違えてしまいました。それが違う理由です。
Edit2:この動作は2つの異なるサーバーで異なるため、質問します。2番目の例はTrueを返すことが期待されていますが、どういうわけかサーバーの1つでtrueを返しません。
Edit3: これが実際のコードです。Prestashop 1.5 の class/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[$id_language] の代わりに $this->$field を使用する必要があります。ただし、CentOS マシンに設定されたサーバーでは、この動作が異なり、値が null に設定されている場合、$this->$field[$id_language] が値として取得されます。