首页 > 解决方案 > 为什么我需要“重新分配” stdClass 的对象以将其值用作字符串?

问题描述

这个错误:

可恢复的致命错误:stdClass 类的对象无法转换为字符串

$$site->nomCommission[$site->opponent][$alltheSeat->categorie] = (object) [
   'gamesDate' => $gameDate,
   'idGames' => $site->idGames
];

这不会:

$nomCommission = $site->nomCommission;

$$nomCommission[$site->opponent][$alltheSeat->categorie] = (object) [
   'gamesDate' => $gameDate,
   'idGames' => $site->idGames
];

现在,如果我转储两个变量,它们显然包含相同的字符串,因为它们是相等的。那么为什么一个被认为是一个对象,因为 var dump 告诉我它们都是字符串。也许我应该使用另一种语法?

$nomCommission = $site->nomCommission;
string(11) "Groupe Test" 

我习惯“重命名”我的变量,因为它节省了我的时间,我避免了错误,而且这样做通常更干净,但取决于项目,我有时最终会重命名很多。我知道一个是一个对象(或者是一个对象?)但是我应该记住什么逻辑,什么时候重命名它们会浪费代码?

例如,有时这不起作用,它会引发相同类型的错误,但在这种情况下它确实有效,所以我有点困惑。分享一些光任何人?

$$nomCommission [$site->nomCommission]

标签: phpobject

解决方案


添加花括号以强制进行所需的解析:

${$site->nomCommission}[$site->opponent][$alltheSeat->categorie] = ...

您的代码被视为:

$obj = $$site;
$obj->nonCommission[$site->opponent][$alltheSeat->categorie] = ...

$$site需要$site是一个包含变量名称的字符串,但$site它是一个对象,而不是一个字符串。

也就是说,你可以对变量变量做的任何事情几乎总是可以使用关联数组来完成,而且语法更容易理解。


推荐阅读