PHP $ örneğin ['name'] benim üye değişkenleri erişmek nasıl?

5 Cevap php
$instance = new className();
$instance['name']

Nasıl, bir örnek çalışması için?

5 Cevap

Sınıf uygular PHP's SPL ArrayAccess daha sonra başvurmak mümkün olacak eğer sınıfı tanımlamak şekilde bağlıyor.

Ben bağlantılı öğretici Taken:

class book implements ArrayAccess {

    public $title;
    public $author;
    public $isbn;

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

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

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

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

/*** a new class instance ***/
$book = new book;

/*** set some book properties ***/
$book['title']= 'Pro PHP';
$book['author'] = 'Kevin McArthur';
$book['isbn'] = 1590598199;

print_r($book);
$instance->name

Eğer bir dizi nesneyi dönüştürmek isterseniz kontrol edebilirsiniz this.

Kamu olmadıkça sizin üye değişkenleri tanımlı nasıl bağlıdır, normalde bu gibi onları erişebilirsiniz:

$instance = new className();
$instance->name;

Ancak statik değişken olarak tanımlanmış varsa, bu gibi erişmek gerekir:

$instance = new className();
$instance::$name;

Eğer (dizi gibi) bu gibi değişkenleri almak içindir eğer:

$instance = new className();
$instance['name'] // <----------- won't be like that exactly

Eğer sınıfta bir dizi tanımlamak gerekir:

class myclass
{
  public $myarray = array();

  // more stuff to fill that array
}

Şimdi bu gibi erişebilirsiniz:

$instance = new className();
$instance->myarray['name'];

Ama yine de bu gibi değil:

$instance = new className();
$instance['name']

Sizin nesne uygulamak gerekir ArrayAccess. Eğer aynı zamanda mülkiyet erişim düzenleyiciler kontrol etmek için ReflectionClass kullanmak gerekir sadece ortak özelliklerini (sınıf değişkenleri) erişebilir olmak istiyorsanız.

dizi gibi nesne artığını

$instance = new className();
$arrayinstance=(array)$instance ;
$arrayinstance['name'] is the same as $instance->name

diye sordu kesin soru olsaydı emin değilim ....