2012-10-31 27 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