我需要检查一个对象数组中的任何对象是否包含某个变量值。
即。如果$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;我在哪里提出这种方法"?
答案 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;
}
}