PHP获取对象的纯数字属性
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熟练,却仍然有数不尽的知识盲点。
PHP获取对象的纯数字属性的更多相关文章
- 【Python】[面性对象编程] 获取对象信息,实例属性和类属性
获取对象信息1.使用isinstance()判断class类型2.dir() 返回一个对象的所有属性和方法3.如果试图获取不存在的对象会抛出异常[AttributeError]4.正确利用对象内置函数 ...
- Python面向对象 -- 继承和多态、获取对象信息、实例属性和类属性
继承和多态 继承的好处: 1,子类可以使用父类的全部功能 2,多态:当子类和父类都存在相同的方法时,子类的方法会覆盖父类的方法,即调用时会调用子类的方法.这就是继承的另一个好处:多态. 多态: 调用方 ...
- 【Javascript-基础-getOwnPropertyNames】Object.getOwnPropertyNames() 获取对象自身可枚举属性
可枚举属性和不可枚举属性 在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for-in查找遍历到. 可枚举属性 e ...
- 校验正确获取对象或者数组的属性方法(babel-plugin-idx/_.get)
背景: 开发中经常遇到取值属性的时候,需要校验数值的有效性. 例如: 获取props对象里面的friends属性 props.user && props.user.friends &a ...
- JavaScript 获取对象中第一个属性
使用 Object.keys(object) 可以取出属性名为数组,但会打乱顺序 严格意义上对象中是只有映射关系而没有顺序的,但是在存储结构里是有顺序的,如果想获取存储结构里的第一个属性可以使用for ...
- 转: JavaScript 获取对象属性和方法
一.获取对象属性和方法 Object.keys()for in 返回对象的可枚举属性和方法的名称数组. Object.getOwnPropertyNames() 返回的数组的所有属性(可枚举或不可枚举 ...
- JS获取对象“属性和方法”的方法
平时在写的代码过程中,经常会遇到对对象Object的数据处理.而在对对象的数据处理中,操作最频繁的是“数据引用”.“值的修改”.“获取关键字(属性)”.平时最烦的也是“获取关键字”,经常忘记怎么去获取 ...
- JavaScript 获取对象属性和方法
ShineJaie 原创整理,转载请注明出处. 一.获取对象属性和方法 Object.keys() 返回对象的可枚举属性和方法的名称数组. Object.getOwnPropertyNames() 返 ...
- Python3类和实例之获取对象信息
当我们拿到一个对象的引用时,如何知道这个对象是什么类型,有哪些方法呢 使用type() 判断对象类型使用type()函数 基本类型都可以用type()判断 <class 'int'> &g ...
随机推荐
- DOM对象与JQuery对象
在初学JAVA时,经常会迷惑,分不清DOM/JQuery对象,以及可以调用的方法. 1.什么是DOM/JQuery对象 DOM对象,即是我们用传统的方法(javascript)获得的对象: eg:va ...
- python's eleventh day for me
python2 中没有nonlocal. 函数名是什么? 函数名就是函数的名字, 本质:变量,特殊的变量. 1.单独打印函数名: def func(): print(666) print(func) ...
- Deep Learning 学习笔记(6):神经网络( Neural Network )
神经元: 在神经网络的模型中,神经元可以表示如下 神经元的左边是其输入,包括变量x1.x2.x3与常数项1, 右边是神经元的输出 神经元的输出函数被称为激活函数(activation function ...
- AJAX如何获取从前台传递过来的数据然后在通过servle传递给后台
1 用 request.getParameter接收值 <% String id1=request.getParameter("id"); out.print(id1); % ...
- mvc 实体类 自定义验证特性
mvc 实体类验证的时候 如果有多个验证特性需要在属性上层叠很多个验证特性,显得属性特别臃肿并且也不够直观,极大地影响我使用它的兴趣,所以我想自定义一个验证特性,然后将所有需要验证的情形全部放在一个特 ...
- java中的类型安全问题-Type safety: Unchecked cast from Object to ...
首先,java语言室类型安全的,通常我们遇到这个问题是出现在Object转化为目标类型时, 这个转化并不是安全的.这个问题普遍认为因为使用了jdk1.5或者1.6的泛型, request.getAtt ...
- fcntl详细说明
功能描述:根据文件描述词来操作文件的特性. #include <unistd.h>#include <fcntl.h> int fcntl(int fd, int cmd); ...
- laravel 验证表单信息
1控制器验证 $this->validate($request,[ 'Student.name'=>'required|min:2|max:20', 'Student.age'=>' ...
- Linux3一些文件操作命令more,less,pr,head,tail,wc
查看文件内容命令: more和less 用cat命令可以查看文件.有时候文件太大,可以用管道符号|配合more或者less一同使用. cat <文本文件名称>|more cat < ...
- SpringAOP02 自定义注解
1 自定义注解 1.1 创建自定义注解 从java5开始就可以利用 @interface 来定义自定义注解 技巧01:注解不能直接干扰程序代码的运行(即:注解的增加和删除操作后,代码都可以正常运行) ...