php的对象属性

我们知道获取php的对象属性用箭头:

echo $obj->name;

如果属性名是一个变量,那么可以用:

$var = 'name';
echo $obj->$var;

考虑如下的结构,是一个MongoDB的BSON Object:

stdClass Object
(
[_id] => 711
[1] => stdClass Object
(
[win] => 8372907
) )
echo $obj->_id; // ok
foreach ([1,2,3] as $k) {
echo $obj->$k; // error: Undefined property: stdClass::$1
}

这类结构在JSON/BSON转换为php对象时很容易碰到,直接获取时会报错的(linux x64 php7.1提示错误,windows 32 php7.2 可以正常获取

测试发现,直接赋值的属性可以直接读取:

$obj = new stdClass();
$obj->{1} = 'attrName is 1';
$obj->{"1abc"} = 'attrName is 1abc';
$obj2 = new stdClass();
$var = "2xyz";
$obj2->$var = "attrName is 2xyz";
$var = 100;
$obj2->$var = $obj;
var_dump($obj);
var_dump($obj2->$var); // get $obj2->100

结果:

stdClass Object
(
[1] => attrName is 1
[1abc] => attrName is 1abc
)
stdClass Object
(
[1] => attrName is 1
[1abc] => attrName is 1abc
)

而从MongodbDriver 获取的 BSON 对象则会报错。

获取PHP 对象属性的值

虽然不知道上面过程出错的原因,但是却找到了解决办法:http://php.net/manual/zh/function.get-object-vars.php

array get_object_vars ( object $obj )

返回由 obj 指定的对象中定义的属性组成的关联数组。

BSON对象数字键属性获取:

// BSON $obj
foreach ([1,2,3] as $k) {
print_r(get_object_vars($obj)[$k]);
}

总结

编程语言是一门活到老学到老的艺术,一直自诩PHP熟练,却仍然有数不尽的知识盲点。

最新文章

  1. Spring MVC的配置文件(XML)的几个经典案列
  2. 写出形似QML的C++代码
  3. 通过类名获取spring里的Bean
  4. 【转载】Spark SQL之External DataSource外部数据源
  5. Bash中的数组
  6. Hadoop之——又一次格式化hdfs系统的方法
  7. iosOC不可变数组遍历
  8. js的DOM操作
  9. 关于学习Python的一些心得
  10. python简单词频统计
  11. Django使用forms来实现评论功能
  12. 用Python绘制一个感兴趣是数学公式图
  13. 在OAF页面中集成ECharts以及highcharts用于显示图表
  14. 挑战常规--搭建gradle、maven私人仓库很简单
  15. 优化CSS重排重绘与浏览器性能
  16. NodeJS + PhantomJS 抓取页面信息以及截图
  17. Python基础(三)Mysql数据库安装及使用
  18. SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)
  19. Java SSM框架之MyBatis3(八)MyBatis之动态SQL
  20. 6个动作4种难度选择!家庭减肥就用hiit

热门文章

  1. MongDB安装使用
  2. javascipt——原型
  3. Golang简单写文件操作的四种方法
  4. ParallaxEffect
  5. Asp.net Web Application 打开 SharePoint 2010 Site 错误 The Web application at could not be found
  6. GIT常用命令以及作用【备忘】
  7. inux php pdo mysql 扩展
  8. CSS文本溢出处理
  9. 997D Cycles in product
  10. 用Linq取两个数组的差集