zoukankan      html  css  js  c++  java
  • 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熟练,却仍然有数不尽的知识盲点。

  • 相关阅读:
    T-SQL语句操作数据库——基本操作
    HTML——CSS基础
    HTML基础——表格的应用
    HTML基础——基础标签
    AJAX
    aspnetcore-developer-roadmap
    【.Net Core】DotNet CLI command (使用命令创建Controller、View等)
    Unrecognized header format %
    【C#】学习笔记(3) 关于Events使用的小Demo
    数组常用方法(一)
  • 原文地址:https://www.cnblogs.com/dapianzi/p/10113652.html
Copyright © 2011-2022 走看看