Bvural41 1
Bvural41
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
mavzermete 1
mavzermete
xranzei 1
xranzei
Hikaye Ekle

PHP - Nesne Tekrarı

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

Adsız.png


Bir foreach döngüsü, bir PHP sınıfının nesnesinin herkese açık tüm üyeleri arasında yineleme yapmak için kullanılabilir. Bu özellik PHP 5 ve sonraki sürümlerde mevcuttur. Elbette bir örnek yönteminin içindeki özel özelliklerin listesine erişebilirsiniz. PHP ayrıca bu amaçla kullanılabilen Iterator arayüzünü de tanımlar.

foreach Döngüsünü Kullanma

Aşağıdaki örnekte sınıfın public özellikleri foreach döngüsü kullanılarak listelenmiştir.

Örnek


PHP:
<?php
   class myclass {
      private $var;
      protected $var1;
      public $x, $y, $z;
      public function __construct() {
         $this->var="Hello World";
         $this->var1=array(1,2,3);
         $this->x=100;
         $this->y=200;
         $this->z=300;
      }
   }
   $obj = new myclass();
   foreach($obj as $key => $value) {
      print "$key => $value\n";
   }
?>

Aşağıdaki çıktıyı üretecektir:

x => 100
y => 200
z => 300

Sadece public üyelerin sınıfın dışından erişilebilir olduğunu unutmayın. Sınıf bir yöntem içeriyorsa, tüm üyeler (public, private veya protected) içinden bir foreach döngüsüyle dolaşılabilir.

Yukarıdaki myclass'a bir yineleme metodu ekleyelim.

public function iterate() {
foreach ($this as $k=>$v) {
if (is_array($v)) {
var_dump($v);
echo PHP_EOL;
} else {
echo "$k : $v". PHP_EOL;
}
}
}

Tüm üyelerin listesini almak için bu örnek metodunu çağırın.

Aşağıdaki çıktıyı üretecektir:

var : Hello World
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
x : 100
y : 200
z : 300

Iterator Arayüzünü Kullanma

PHP, harici yineleyiciler veya dahili olarak yinelenebilen nesneler için Iterator arayüzü sağlar. Kullanıcı tanımlı sınıfta uygulanması gereken aşağıdaki soyut yöntemleri tanımlar.

interface Iterator extends Traversable {
/* Methods */
public current(): mixed
public key(): mixed
public next(): void
public rewind(): void
public valid(): bool
}

  • rewind() metodu Iterator'ı ilk elemana geri sarar. Bu, foreach döngüsü başlatılırken çağrılan ilk metottur. foreach döngülerinden sonra yürütülmez.
  • current() metodu geçerli öğeyi döndürür.
  • key() metodu foreach döngüsünün her yinelemesinde geçerli öğenin anahtarını döndürür.
  • next() metodu foreach döngüsünün her yinelemesinden sonra çağrılır ve bir sonraki elemana doğru ilerler.
  • valid() metodu mevcut pozisyonun geçerli olup olmadığını kontrol eder.

Örnek

Aşağıdaki örnek, Iterator arayüzünü uygulayarak nesne yinelemesini gösterir.

PHP:
<?php
   class myclass implements Iterator {
      private $arr = array('a','b','c');

      public function rewind():void {
         echo "rewinding\n";
         reset($this->arr);
      }

      public function current() {
         $var = current($this->arr);
         echo "current: $var\n";
         return $var;
      }

      public function key() {
         $var = key($this->arr);
         echo "key: $var\n";
         return $var;
      }

      public function next() : void {
         $var = next($this->arr);
         echo "next: $var\n";
         # return $var;
      }

      public function valid() : bool {
         $key = key($this->arr);
         $var = ($key !== NULL && $key !== FALSE);
         echo "valid: $var\n";
         return $var;
      }
   }

   $obj = new myclass();

   foreach ($obj as $k => $v) {
      print "$k: $v\n";
   }
?>

Aşağıdaki çıktıyı üretecektir:

rewinding
valid: 1
current: a
key: 0
0: a
next: b
valid: 1
current: b
key: 1
1: b
next: c
valid: 1
current: c
key: 2
2: c
next:
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst