PHP获取对象的纯数字属性
2024-08-25 21:01:15
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熟练,却仍然有数不尽的知识盲点。
最新文章
- Spring MVC的配置文件(XML)的几个经典案列
- 写出形似QML的C++代码
- 通过类名获取spring里的Bean
- 【转载】Spark SQL之External DataSource外部数据源
- Bash中的数组
- Hadoop之——又一次格式化hdfs系统的方法
- iosOC不可变数组遍历
- js的DOM操作
- 关于学习Python的一些心得
- python简单词频统计
- Django使用forms来实现评论功能
- 用Python绘制一个感兴趣是数学公式图
- 在OAF页面中集成ECharts以及highcharts用于显示图表
- 挑战常规--搭建gradle、maven私人仓库很简单
- 优化CSS重排重绘与浏览器性能
- NodeJS + PhantomJS 抓取页面信息以及截图
- Python基础(三)Mysql数据库安装及使用
- SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)
- Java SSM框架之MyBatis3(八)MyBatis之动态SQL
- 6个动作4种难度选择!家庭减肥就用hiit