【问题标题】:Object Iteration [closed]对象迭代[关闭]
【发布时间】:2019-07-27 21:14:12
【问题描述】:

我知道对对象的迭代等于对类的可见属性进行迭代。

class MyClass
{
    public $var1 = 'value 1';
    public $var2 = 'value 2';
    public $var3 = 'value 3';

    protected $protected = 'protected var';
    private   $private   = 'private var';
}

$class = new MyClass();

foreach($class as $key => $value) {
    print "$key => $value\n"; // print all visible attributes
}

我很想知道为什么对未实现任何接口的对象进行迭代会导致对其可见变量进行迭代?这种能力的用例是什么?

【问题讨论】:

  • 您具体说的是什么功能?从您的问题中似乎不清楚。
  • 不确定上面的代码是否会像你期望的那样工作。
  • @AnuragSrivastava 为什么不试试呢?
  • @Script47我的意思是为什么迭代一个没有实现任何接口的对象会导致迭代它的可见变量
  • 对象是属性和方法的集合。内置控制结构foreach 允许您迭代数组项,以及对象中的可见属性和内置功能。这与您的问题stackoverflow.com/questions/10057671/… 有关

标签: php oop php-internals


【解决方案1】:

就您声明的类结构而言,它通常是无用的,或者至少是一种不好的做法。

但 PHP 还允许您在对象上动态创建属性,因此类定义不暗示其结构。

你可以这样做:

$class = new MyClass();
$class->nonExistingProperty = 123;

然后对该对象的迭代也会返回nonExistingProperty

这是一种不好的做法,但这是可能的。它有时用于查看数据的容器(据我所知是 Zend 1)。

还有一个预定义的stdClass,旨在创建“动态对象”。例如,json_decode() 函数使用它。

例如,在解码 JSON 文档的情况下,您可能希望在不了解其结构的情况下迭代其属性(它也可能是动态的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-20
    • 2021-11-14
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多