如何迭代PHP中的一系列对象?使用对象方法,类静态方法



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

即。如果$object_array包含15个$object对象,我想知道是否甚至其中一个都将其$type属性设置为$some_type。该函数的内部并不那么重要,因为它访问了$object的公共get方法。我可以使用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;
}

所有经过测试的对象都将通过其公共get方法访问$类型的属性。

我应该在哪里放这个方法?我应该使其成为$object的类的静态方法吗?

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

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

谢谢。

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

edit2:更改函数名称并添加了$some_type参数,希望更清楚地表明我正在检查$type属性是否有一个值。但是,问题仍然是"我要在哪里放置此方法"?

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

因为它是一个示波器敏感操作,将其放入内部或外部的范围,如果在班级内部,私人成员处于范围内,则会产生差异结果。如果在外面,您只能看到可见的。

仅仅解释了这个想法:

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;
   }
}

例如,如果您的类全部扩展栏,或者在"检查"中实现该功能,则可以传递所需的内容。使用您的代码:

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/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; 
     }
}

最新更新