如何访问PHP对象结构中的变量
我想分析这个MongoDB错误消息。我无法访问对象中的变量。我想我忽略了一些琐碎的事情,但我想不出来 var_dump如何访问PHP对象结构中的变量,php,mongodb,Php,Mongodb,我想分析这个MongoDB错误消息。我无法访问对象中的变量。我想我忽略了一些琐碎的事情,但我想不出来 var_dumpvar_dump($error) 我尝试访问消息并使用echo将其打印出来 echo$错误->消息 抛出:警告:未定义的属性:MongoDB\Driver\WriteError::$message echo$error[“message”] 抛出:未捕获错误:无法将MongoDB\Driver\WriteError类型的对象用作数组。 MongoDB\Driver\WriteEr
var_dump($error)代码>
我尝试访问消息并使用echo
将其打印出来
echo$错误->消息代码>
抛出:警告:未定义的属性:MongoDB\Driver\WriteError::$message
echo$error[“message”]代码>
抛出:未捕获错误:无法将MongoDB\Driver\WriteError类型的对象用作数组。
MongoDB\Driver\WriteError有一个方法[getMessage][1]
我的第一个假设是用var_dump检查我得到的结果,不可能看到这些变量是否受保护/私有(以及它们是否有函数)
我做了更多的研究,将一个对象转换为json和echo,至少显示了哪些变量是公共的(在本例中为无)
echo json_encode($error)代码>
给出:{}
处理对象时,您的第一反应应该是查找。通常,这些对象的许多属性都不会公开,因此您应该假设存在getter-您只需要找到文档来查看它的名称。谢谢@El_Vanja。事实上,类文档提到了getMessage(),这很有效。有没有办法从var_转储中看出这些变量不是公共的?通常,它应该是可见的(请参阅)。他们可能故意掩盖了这些信息的细节。我发现了如何修改和编辑我的评论。如果你只是想找一些快速的方法来调试东西,这个方法完全有效。如果你想深入研究和/或做一些更实用的东西,你可能想研究反射,或者一个函数,比如get\u object\u vars
,或者,我建议使用一个转储库(我自己使用Kint),它具有高级功能,能够提供大量关于对象的信息(包括所有属性和可用方法)。基本上,其他人已经设计出了更复杂的解决方案,可以深入研究,正如Chris所建议的。不妨使用它。
object(MongoDB\Driver\WriteError)#11 (4) {
["message"]=>
string(362) "E11000 duplicate key error collection: database.collection index: c_address collation: { locale: "nl", caseLevel: false, caseFirst: "off", strength: 1, numericOrdering: false, alternate: "non-ignorable", maxVariable: "punct", normalization: false, backwards: false, version: "57.1" } dup key: { address: "0x", city: "0x" }"
["code"]=>
int(11000)
["index"]=>
int(0)
["info"]=>
NULL
}