2010-02-15 41 views

回答

3

您可能希望使用空來檢查值是否有可能無用的值。如果您SignupCode絕不會是一個空字符串(""),0,或another empty value,試試這個:

if(empty($this->objCodes[0]->SignupCode)) 
{ 
    $this->objCodex[0] = null; 
} 

我通常使用empty()的原因是因爲如果我從一個數據庫導入,我要找的數據將始終返回到isset(),因爲它是由數據庫設置的。我更感興趣的是它是否爲空或空字符串,因爲這意味着變量中沒有任何有價值的東西。

如果要裝載值到你的對象是這樣的:

if(isset($myObjs[0]->SignupCode)) 

由於該值在技術上始終:

這樣的測試時,您將永遠免費獲贈trueisset()功能將被'設置'

如果你真的想要看看它是否沒有設置,請試試這個:

if(!isset($this->objCodes[0]->SignupCode)) 
{ 
    $this->objCodex[0] = null; 
} 
+1

使用empty()會阻止值0或「0」的正確性。 – aefxx

+0

重新閱讀我的答案,請... –

+1

我做了,我解釋OP的問題,他/她想用isset測試,因爲它或者是一個具有名爲SignupCode的集合成員的對象。 – aefxx

0

那麼是$this->objCodes定義?如果是的話,它是一個數組?它也可以作爲一個字符串工作,因爲你可以把一個單一的字符組合成一個數組。此外,您的聲明實際上是檢查是否在對象上設置了SignupCode ...如果設置了$this->objCodes[0],則不是。

1

我相信您收到的錯誤來自無效的屬性訪問器->"NULL"

的isset功能應當用於檢查是否一個數組索引存在,如[0]索引你上objCodes檢查:

if(isset($this->objCodes[0])) { 

如果不知道對象的類型您目前的objCodes陣列中擁有的SignupCode的財產,我不能具體在回答中設置一個默認的,但如果我使用類ObjectCode作爲一個例子,你可以這樣你的數組元素上設置的默認值:

if(!isset($this->objCodes[0])) { 
    $this->objCodes[0] = new ObjectCode(); 
} 

如果我更瞭解y你試圖用這個代碼塊來實現我可能更具描述性。

UPDATE:如果你真的希望確保您的收藏始終還給您可以創建實施ArrayAccess interface容器中,然後實施offsetGet method返回默認值時,請求的索引中沒有找到:

public class ObjectCodeContainer implements ArrayAccess { 
    private $collection; 

    public function __construct() { 
    $this->collection = array(); 
    } 

    public function offsetGet($offset) { 
    if(!isset($this->collection[$offset])) { 
     $this->collection[$offset] = new ObjectCode(); 
    } 

    return $this->collection[$offset]; 
    } 

    // implement the other abstract methods 
} 
0
$default = array('color' => 'blue', 'model' => 'Verizon', 'sex' => 'Female'); 

$new = array('color' => 'red', 'sex' => 'Male'); 

$array = array_merge($default, $new); 

var_dump($array); 
// array('color' => 'red', 'model' => 'Verizon', 'sex' => 'Male') 
+1

WTF?.................. –

+0

@ Chacha102 - '我如何在php中爲數組定義一個默認值以避免未定義的偏移?' –

+0

對,但只如果您需要特定已知密鑰的默認值,則可以使用。 –