2012-10-31 24 views
0

我需要检查是否有任何对象数组中包含某个变量值。如何遍历PHP中的对象数组?用对象方法,类的静态方法?

I.E.如果$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; 
} 

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

我应该把这个方法放在哪里?我应该把它作为$object的课程的静态方法吗?

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

我对PHP的内置结构(如“Iterator”)以及它们如何使用非常陌生。我不知道他们是否适用于我的情况。我将不胜感激任何帮助,我可以得到。

谢谢。编号: 注意我修正了上面的函数。把“return false”放在正确的地方,并放入函数签名。

EDIT2:更改函数名称并添加$some_type参数,希望更清楚地说明我正在检查$type属性的某个值。但是,问题仍然是“我在哪里使用这种方法”?

+0

把它放进一个实用工具类的静态方法。也许有时PHP会有扩展方法和原生linq支持。 – MikeSW

+0

我可能倾向于把它放在帮手中。 –

回答

0

http://ca3.php.net/manual/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/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; 
    } 
} 
+0

是的,但我作为一个例子给出的函数将对象数组作为参数,并使用对象的公共“get”方法来获取信息。范围并不重要,因为我只使用公共方法。 –

+0

至于你的说明,是的,我在错误的地方“退回假”,忘记了放入功能签名。我修好了,所以现在应该更清楚我想要做什么。 –

+0

嘿。所有正确的部分已经到位,并且知道你只使用公开使得它非常简单。你可以调整你的函数,就像这样:public function hasVarchar($ object_array){foreach($ object_array as $ object){ $ vars = get_object_vars($ object); (array_values($ vars)as $ v) if(stristr($ v,'string')!== FALSE) return true; } return false;只要记住,成员中没有varchar这样的东西,PHP会自动地将你指定给它的任何类成员的变量自动装箱。这就是为什么我们使用stristr来检查'string' – Saeven