【发布时间】:2017-02-15 23:15:31
【问题描述】:
我购买了一个 Drupal 主题,但缺乏支持。所以我想我会尝试自己解决它。我对 PHP 编程比较陌生,所以请放轻松:)
我得到的错误是: 注意:Drupal\Core\Field\FieldItemList 类的对象无法在 theme_css_alter() 中转换为 int
深入研究错误,它来自此 if 语句的第一行代码:
if(isset($node->nid) && $node->nid == 90){
//do stuff
}
我进行了研究,发现使用 == 运算符时出现 PHP 错误,可能是因为 $node->nid 是作为字符串获取的,而 90 是整数,它无法将 nid 转换为苍蝇。
我在谷歌搜索时发现的可能解决方案要么使用 === 运算符制作“getter”以将 nid 作为整数获取(这听起来比必要的更复杂);而且我自己猜测,如果我将 90 转换为字符串,它也会起作用吗?
现在,进行测试运行,=== 确实阻止了错误的显示,但我的研究表明 === 仅在值和类型相等时才有效,并且假设我正在比较字符串和整数,我假设它永远都是假的。
所以...
- 我是否正确地说在 PHP 90(作为字符串)中不 == 90(作为整数)?
- 我是否正确地说使用 === 而不是 == 不是比较字符串和整数的正确方法?
- $node->nid == (string)90{ 是比较这个 if 语句的正确方法吗?进行这种比较的最正确方法是什么?
【问题讨论】:
-
将字符串与数字进行比较通常可以达到您的预期。错误消息表明
$node->nid是FieldItemList,而不是字符串。 -
谢谢巴马尔。我假设 nid 将是一个字符串,因为这通常是其他地方的字符串,并且 FieldItemList 只是 Drupal 8 中的 PHP 类。这也不正确吗?
-
它可能有转换为字符串的方法,所以你可以在需要字符串的地方使用它,但它实际上不是字符串。
标签: php string drupal integer drupal-8