如何迭代PHP中的对象数组?用object方法,类静态方法?

时间:2012-10-31 03:18:02

标签: php oop static iterator iteration

我需要检查一个对象数组中的任何对象是否包含某个变量值。

即。如果$object_array包含15个$object个对象,我想知道即使其中一个对象的$type属性设置为$some_type。 函数的内部实际上并不重要,因为它访问get的公共$object方法。我可以使用foreach,array_walk等等。我的问题的关键是,我在哪里采用这种方法?

该功能如下所示:

public function hasSomeType($object_array,$some_type) {
    foreach($object_array as $object) {
      if($object->get('type') == '$some_type') {
        return true;
      }         
    }
    return false;
}

所有测试对象都有一个$ type属性,可以通过公共get方法访问。

我应该把这种方法放在哪里?我应该将它作为$object类的静态方法吗?

或者我应该创建一个新类,并使用其中一个对象来执行此操作。

我非常不熟悉PHP的内置结构,例如" Iterator"以及如何使用它们。我不知道他们是否适用于我的情况。我非常感谢能得到的任何帮助。

谢谢。

编辑: 注意我修复了上面的功能。 Put"返回false"在正确的位置并将功能签名放入。

EDIT2:更改了函数名称并添加了$some_type参数,希望更清楚地表明我正在检查$type属性的某些值。但问题仍然是,#34;我在哪里提出这种方法"?

1 个答案:

答案 0 :(得分:0)

http://ca3.php.net/manual/en/function.get-object-vars.php

因为它是一个范围敏感的操作,所以将它放在类内或类外会产生diff结果,如果在类中,私有成员在范围内。如果在外面,你只能看到可见的东西。

简单地解释这个想法:

class Bar {

   public function check( $type = 'int' ) {
       $vars = get_object_vars( $this );
       foreach( array_values( $vars ) as $v )
           if( stristr( $v, $type ) !== FALSE )
              return true;

       return false;
   }
}

如果您的课程全部扩展了Bar,或者实现了该功能'check',那么您可以传递您正在寻找的内容。使用您的代码:

function checkArrayOfObjects( $object_array = array() )
{
    foreach($object_array as $object)
        if( is_object( $object ) /*&& $object instanceof Bar*/ && $object->check('int') )
            return true;
    return false;
}

请注意,在初始代码中,它只会检查第一个对象;)

祝你好运。

此外,如果您过度简化了问题,请查看PHP的ReflectionClass http://ca3.php.net/manual/en/class.reflectionclass.php

以下评论中的代码

public function hasVarchar($object_array) { 
    foreach($object_array as $object) { 
        $vars = get_object_vars( $object ); 
        foreach( array_values( $vars ) as $v ) 
            if( stristr( $v, 'string') !== FALSE ) 
                return true; 
        }
        return false; 
     }
}