PHP 对象迭代与 get_object_vars()

PHP 如何迭代一个对象 ( 上 ) 章节中我们介绍了迭代一个对象的基本原则 「迭代输出当前作用域范围内对象的可见属性」。那么,你知道这背后的原理吗?

你有没有使用过 get_object_vars() 这个函数,你知道它的作用吗? 你知道在一个继承体系下返回的结果吗?

get_object_vars()

get_object_vars() 这个函数,按照官方手册里的介绍,它的作用是 「 返回由对象属性组成的关联数组 」。但准确的定义,应该是 「返回当前作用域范围内对象的可见属性组成的关联数组」。

也许,你就会好奇了,这个定义和使用 foreach 迭代一个对象的原则一模一样啊。

对啊,是一样,因为 foreach 迭代一个对象的时候会调用 get_object_vars() 返回当前作用域范围内对象的可见属性组成的关联数组,然后才对这个关联数组进行迭代。

不信? 我们写一个范例来演示下

<?php 

class Person
{
    public $name = "语飞";
    public $sexy  = "男";

    protected $age = 30;

    private $married = "no";
}

class Employee extends Person {
    public $job = "CEO";

    public function intro()
    {
        foreach($this as $k => $v )
        {
            echo $k, " => ", $v, "\n";
        }

        echo "\n";
        foreach(get_object_vars($this) as $k => $v )
        {
            echo $k, " => ", $v, "\n";
        }
    }
}


$me = new Employee();
$me->intro();
echo "\n--------------------\n";
foreach($me as $k => $v )
{
    echo $k, " => ", $v, "\n";
}

echo "\n\n";
foreach(get_object_vars($me) as $k => $v )
{
    echo $k, " => ", $v, "\n";
}

运行结果如下

[yufei@www.twle.cn helloworld]$ php d.php
job => CEO
name => 语飞
sexy => 男
age => 30

job => CEO
name => 语飞
sexy => 男
age => 30

--------------------
job => CEO
name => 语飞
sexy => 男


job => CEO
name => 语飞
sexy => 男

怎么样? 是不是完全相同?

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.