访问键为PHP的对象
我有一个像这样的对象:访问键为PHP的对象,php,oop,object,Php,Oop,Object,我有一个像这样的对象: stdClass Object ( [page] => stdClass Object ( [1] => stdClass Object ( [element] => stdClass Object ( [background_col
stdClass Object
(
[page] => stdClass Object
(
[1] => stdClass Object
(
[element] => stdClass Object
(
[background_color] => stdClass Object
...
当我打印打印时($arr->page)
:
但这不打印任何内容:
print_r($arr->page->{"1"});
这会打印一个错误:
print_r($arr->page->1);
分析错误:语法错误、意外的T_LNUMBER、应为T_字符串或T_变量或“{”或“$”i
如何访问“1”元素
更新:
我还尝试了$arr->page[1]
和$arr->page[“1”]
,但出现以下错误:
致命错误:无法将stdClass类型的对象用作中的数组
更新2:
var_dump($arr->page);
打印此文件:
object(stdClass)#3 (1) { [1]=>
object(stdClass)#4 (1) {
["element"]=>
object(stdClass)#5 (20) {
["background_color"]=>
object(stdClass)#6 (7) {
使用引号:
print_r($arr->page->{'1'});
从这里:您不能直接访问整数类变量。最好的选择是根本不使用StdClass 如果无法控制数据源,可以通过
$foo=(array)$foo
将其强制转换为数组
您还可以迭代元素:
foreach ($obj as $key=>$val)
或
很抱歉,这没有为我打印任何内容?单引号或双引号请参阅PHP中单引号和双引号的区别。这仅适用于字符串键
“1”
vsint(1)
。如果对象是由“非法”创建的也就是说,你不能像这样访问整数键。我不知道,谢谢你的澄清,但我已经尝试了这个答案,因为我的问题表明,它对我不起作用,你知道为什么它不起作用吗?var\u dump($arr->page->{1'})
printsNULL
感谢您的输入插孔,有关更多信息,请参阅正确答案。我刚开始在一个大型应用程序中工作,我需要修改对象内的一些值。我不确定对象在何处或如何创建。但随着我的深入,我将了解更多信息。对于那些有兴趣复制此问题的人,请使用此:$arr=(object)['page'=>(object)[1=>(object)['element'=>'hello world']];
Wow真的,我不知道,我没有投你反对票,我会试着投,foreachIt会起作用!谢谢,我必须记住这一点,只是为了澄清我在那里使用了你的第一个例子foreach($obj as$key=>$val)
和$val->element
为我提供了访问权限,再次感谢!@Jack,说得好。我已经从答案中删除了这一部分。我想我记得我曾经处理过一些粗略的库,这些库在没有正当理由的情况下盲目地将API结果强制转换到对象中。你是说在json_decode()
之前有一段时间吗
foreach ($obj as $key=>$val)
foreach (get_object_vars($obj) as $key => $val)