nesnenin php tür özellikleri

3 Cevap php

Ben bu yüzden tanımlanmış bir sırayla içlerinden döngü olabilir, bir nesnenin özelliklerini sıralamak istiyorum.

Örneğin: 'id', 'title', 'yazar', 'tarih': Ben, aşağıdaki özelliklere sahip bir nesne 'kitap' var.

Şimdi ben böyle bu özellikleri döngü istiyorum:

foreach($book as $prop=>$val)
//do something

şimdi döngü düzeni 'title', ardından 'yazar', 'tarih' ve 'id' olmak zorundadır

How would one do this? (I can't change the order of the properties in the class of the object because there arent any properties defined there, I get the object from the database with 'MyActiveRecord')

3 Cevap

Bu emin değilim eğer sorunuza cevap, ama deneyebilirsiniz:

$properties = array('title', 'author', 'date', 'id');
foreach ($properties as $prop) {
    echo $book->$prop;
}

Alternatif olarak, (yerine onları hardcoding) kitabının özellikleri ayıklamak ve özel sipariş ile onları sıralamak:

$props = get_class_vars(get_class($book));
uasort($props, 'my_properties_sorting_function');

Bu deneyin. İlk tepki olarak önerilen bu yöntem ve yöntem arasındaki fark, bu yöntem get_class_vars döner sınıfın default özellikleri, get_object_vars özelliklerini verir; olmasıdır given nesnesi.

<?php

class Book {
  public $title;
  public $author;
  public $date;
  public $id;
}

  $b = new Book();
  $b->title = "title";

  $object_vars = get_object_vars($b);
  ksort($object_vars);

  foreach($object_vars as $prop=>$val)
        echo $prop."->".$val."<br>";

?>

Sen Iterator interface uygulayan ve belirli bir sıralama düzeni içinde kaynak nesnenin özelliklerini döndürür şeye kaynak nesneyi sarın.

class Foo implements Iterator {
  protected $src;
  protected $order;
  protected $valid;

  public function __construct(/*object*/ $source, array $sortorder) {
    $this->src = $source;
    $this->order = $sortorder;
    $this->valid = !empty($this->order);
  }
  public function current() { return $this->src->{current($this->order)}; }
  public function key() { return key($this->order); }
  public function next() { $this->valid = false!==next($this->order); }
  public function rewind() { reset($this->order); $this->valid = !empty($this->order); }

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

class Book {
  public $id='idval';
  public $author='authorval';
  public $date='dateval';
  public $title='titleval';
}


function doSomething($it) {
  foreach($it as $p) {  
    echo '  ', $p, "\n";
  }
}

$book = new Book;
echo "passing \$book to doSomething: \n";
doSomething($book);

$it = new Foo($book, array('title', 'author', 'date', 'id'));
echo "passing \$it to doSomething: \n";
doSomething($it);

baskılar

passing $book to doSomething: 
  idval
  authorval
  dateval
  titleval
passing $it to doSomething: 
  titleval
  authorval
  dateval
  idval