Dizi gibi PHP nesne

8 Cevap php

Bu gibi benim nesne ayarlamak gerekiyor:

$obj->foo = 'bar';

Bu ayarlandıktan sonra sonra ben gerçek olamayacak kadar aşağıdaki gerekir

if($obj['foo'] == 'bar'){
  //more code here
}

8 Cevap

Uzanan try ArrayObject

Nesneleri ve diziler karıştırma ediyoruz. Bunu gibi bir dizi oluşturmak ve erişebilirsiniz:

$obj = new stdClass;
$obj->foo = 'bar';

if($obj->foo == 'bar'){
// true
}

böylece gibi ve bir dizi:

$obj = new Array();
$obj['foo'] = 'bar';

if($obj['foo'] == 'bar'){
// true
}

Eğer bir sınıf tanımlamak ve bir dizi ve bir sınıf olarak hem kendi sınıf erişmek istiyorsanız ArrayAccess uygular ekleyebilirsiniz.

http://www.php.net/manual/en/language.oop5.php

Sadece sınıf implements ArrayAccess ekleyebilir ve gerekli yöntemleri ekleyin:

  • public function offsetExists ($ ofset)
  • public function offsetGet ($ ofset)
  • public function offsetSet ($ ofset, $ değer)
  • public function offsetUnset ($ ofset)

Bkz http://php.net/manual/en/class.arrayaccess.php

ArrayObject ArrayAccess arabirimi (ve biraz daha fazla) uygular. ARRAY_AS_PROPS bayrağını kullanarak o aradığınız işlevsellik sağlar.

$obj = new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS);
$obj->foo = 'bar';
echo $obj['foo'];

Alternatif olarak, kendi sınıflarından birini ArrayAccess arabirimini uygulayabilirsiniz:

class Foo implements ArrayAccess {
  public function offsetExists($offset) {
    return isset($this->$offset);
  }

  public function offsetGet($offset) {
    return $this->$offset;
  }

  public function offsetSet($offset , $value) {
    $this->$offset = $value;
  }

  public function offsetUnset($offset) {
    unset($this->$offset);
  }
}

$obj = new Foo;
$obj->foo = 'bar';
echo $obj['foo'];

Ayrıca bir dizi olarak nesne artığını olabilir:

if((array)$obj['foo'] == 'bar'){
  //more code here
}

PHP dizi gibi, ama farklı şekillerde PHP nesnesine erişebilirsiniz. Bu deneyin:

$obj->{'foo'}

Bu gibi dizi erişirken ile benzerdir:

$arr['foo']