我需要检查一个对象数组中是否包含某个变量值。
即。如果$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;
}
}