Nasıl ofset tanımsız önlemek için php bir dizi için bir varsayılan değer tanımlarsınız?

3 Cevap

Ben boş olmadığını kontrol etmek için isset kullanarak bu kodu kullanıyorum:

    if(!isset($this->objCodes[0]->SignupCode))$this->objCodes[0]->"NULL";

Ama çalışmıyor. Yardım?

3 Cevap

Sen değer yararsız olabilecek bir değere sahip olmadığını denetlemek için boş kullanmak isteyebilirsiniz. Lütfen SignupCode (""), 0, veya another empty value boş bir dize olmayacak, bu deneyin:

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

Ben bir veritabanından içe yaşıyorum eğer veritabanı tarafından kuruldu, çünkü ben arıyorum verileri her zaman isset() true dönecektir, çünkü ben normalde kullandığınız nedeni empty() olduğunu. Null veya boş dize ise gerçekten değişkenin içinde değerli bir şey olmadığı anlamına gelir gibi, daha çok ilgileniyorum.

Eğer bu gibi nesne içine değerleri yüklüyorsanız:

$result = mysql_query("Some Query");
while($temp = mysql_fetch_assoc($result)
{
    $myObj = new stdClass;
    $myObj->SignupCode = $temp['SignupCode'];
    $myObjs[] = $myObj;
}

Böyle test, her zaman isset() işlevine true alacaksınız:

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

Değer teknik hep 'set' olacak çünkü

Aslında tüm ayarlanmış değilse görmek için çalışıyorsanız, bu deneyin:

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

Ben alıyorsanız hata geçersiz özellik erişimcisi ->"NULL" adlı olduğuna inanıyorum.

Isset fonksiyonu, size objCodes kontrol [0] indeksi gibi, bir dizi dizin olup olmadığını denetlemek için kullanılmalıdır:

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

Eğer şu anda özelliğine sahiptir objCodes dizideki bir nesnenin tipini bilmeden SignupCode Ben bir varsayılan ayar için bir cevap özgü olabilir ama olamaz ben sınıfını kullanırsanız {[(1)] } Bir örnek olarak, bu gibi dizi elemanı üzerinde varsayılan bir değer olabilir:

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

Ben bu kod bloğu ile ulaşmak için çalışıyoruz ne hakkında daha fazla bilseydim ben daha açıklayıcı olabilir.

Eğer gerçekten koleksiyonu her zaman geri ArrayAccess interface uygulanan bir kap oluşturmak ve daha sonra uygulamak olabilecek bir değer verdi emin olmak istedim UPDATE: offsetGet method a dönmek için İstenen dizin bulunamadı değilken varsayılan:

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
}

Peki $this->objCodes tanımlanır? Bu yüzden bir dizi olur? Bir Ilkbahar ans tek karakter bir dizi tedavi edebilir çünkü aynı zamanda bir dize olarak çalışacak. Bir nesne üzerinde SignupCode isset ... $this->objCodes[0] set değil if da deyimi ile sen aslında kontrol.