2014-06-19 62 views
0

我需要檢查,如果一個對象爲空或PHP具有價值和研究,我跟這個代碼後:檢查對象爲空或有值

$user = $this->client->findClientByLogin(array("login" => $user_data[0]->username)); 

if (!is_object($user) && (count(get_object_vars($user)) < 0)) { 
    $this->client->addClient(array("login" => $user_data[0]->username, "password" => $password)); 
} 

但即使$user是一個空的對象由於條件不適用,addClient()未執行。任何人都可以給我一些建議嗎?

編輯:Test1的

我使用此代碼做了一些測試:

echo "Count ".count(get_object_vars($user)); 
echo "Is object ".!is_object($user); 
var_dump($user); 
die(); 

,結果是: 計數: 比較對象:1

object(stdClass)[78] 
    public 'clientsshared' => 
    object(stdClass)[160] 
     public 'id_client' => int 44 
     public 'login' => string 'reynierperez-mira' (length=17) 
     public 'password' => string '' (length=0) 
     public 'web_password' => string '09bb0def8de1262ac9e5a9b8a5935771' (length=32) 
     public 'type' => int 8389121 
     public 'id_tariff' => int 2 
     public 'account_state' => string '0.0000' (length=6) 
     public 'tech_prefix' => string '' (length=0) 
     public 'id_reseller' => int -1 
     public 'type2' => int 0 
     public 'type3' => int 0 
     public 'id_intrastate_tariff' => int -1 
     public 'id_currency' => int 1 
     public 'codecs' => int 19 
     public 'primary_codec' => int 2 
     public 'free_seconds' => string '' (length=0) 
     public 'id_tariff_vod' => int 0 
     public 'video_codecs' => int 0 
     public 'video_primary_codec' => int 0 
     public 'fax_codecs' => int 0 
     public 'fax_primary_codec' => int 0 
     public 'id_cli_map' => int 0 
     public 'id_dial_plan' => int 1 
     public 'id_dial_plan_map' => int 1 
     public 'id_pbx_company' => int 0 

使告訴我,用戶reynierperez-mira已經存在,所以我不應該輸入條件因爲我不會添加任何用戶,但如果用戶不存在,那麼我將通過在條件上輸入來添加。這個案件有什麼合適的條件?

的Test2:用戶不存在

好吧,我刪除所有用戶,以便findClientByLogin()回報空的對象。我測試了這種方式:

$user = $this->client->findClientByLogin(array("login" => $user_data[0]->username)); 

echo "Count " . count(get_object_vars($user)); 
echo "Is object " . is_object($user); 
echo "-----------"; 
var_dump($user); 
die(); 

這是輸出:

Count 0 
Is object 1 
----------- 

object(stdClass)[78] 

所以我改變了條件:

if (is_object($user) && (count(get_object_vars($user)) === 0)) { ... 

而現在它的作品!

+1

'count()'永遠不會返回小於0. – Barmar

回答

2

您應該使用OR而不是AND來組合條件。並且count()永遠不會返回小於0;如果對象沒有屬性,則計數將爲0

if(!is_object($user) || count(get_object_vars($user)) == 0) { 
    $this->client->addClient(array("login" => $user_data[0]->username, "password" => $password)); 
} 
+0

您可以看看我的版本嗎? – ReynierPM

+0

我無法理解輸出,這是沒有意義的。 – Barmar

+0

問題是'reynierperez-mira'不存在,那麼'$ user'應該是一個空對象,然後這行'$ this-> client-> addClient(array(「login」=> $ user_data [0 ] - >用戶名,「密碼」=> $密碼));'需要被執行,但它不工作不與你的建議不與我的代碼 – ReynierPM