Object iterators در php - Ghoghnus - 07-21-2011
اگر برنامه نویس php هستید حتما با foreach آشنایی دارید هر چند این خاصیت در زبان های دیگر نیز وجود دارد که با استفاده از آن می توانید آرایه ها را پیمایش کنید.
کد: $myArray = array();
$myArray[] = "First item";
$myArray[] = "Second item";
$myArray[] = "Third item";
foreach ($myArray as $i) {
echo "
$i
";
}
به غیر از آرایه شما می توانید کلاس های خود را نیز به این صورت پیمایش کنید اگر اشیاء شما دارای مجموعه ای از محتوا باشند شما می توانید با استفاده از foreach آن را به صورت یک لیست تکراری نمایش دهید و اصلا مهم نیست که شی شما محتوی چه چیزی باشد یا چگونه باید آن را استخراج کنید. و ممکن است شامل موارد زیر باشد.
یک رکورد از دیتابیس
لینک ها
نام یک فایل در یک پوشه
یک خط از یک متن در یک فایل متنی
اشیاء تولید شده در یک مجموعه فورشگاه مشخص
شاید اشیاء تکرار شوند یک نام وحشتناک برای توسعه دهندگان باشد گاهی اوقات می تواند پیچیده به نظر برسد ویا حتی در هنگام آموزش هم از مثال های انتزاعی برای آموزش استفاده می شود ولی بهترین راه ایجاد یک کلاس برای توضیح بهتر می باشد.
کد: class WebTechnologies
{
private $tech; // constructor
public function __construct() {
$this->tech = explode( ',', 'PHP,HTML,XHTML,CSS,JavaScript,XML,XSLT,ASP,C#,Ruby,Python') ;
}
}
private $tech نمی تواند از بیرون کلاس دسترسی داشته باشد شما می توانید محتوا ی آن را بازگردانید یا آن را به صورت public تعریف کنید اما iterators می توانند زیبایی بیشتری را برای ما فراهم کنند. با فرض اینکه شما داده هایی را در آرایه خود دارید ساده ترین روش ایجاد یک کلاس و implement کردن آن با IteratorAggregate است .با کد زیر جلو می رویم
کد: class WebTechnologies implements IteratorAggregate
{...
برای کامل کردن کد ما باید یک getIterator() به صورت public تعریف کنیم. که باید چیزی برگرداند که قابل تکرار باشد.مانند ArrayIterator که $tech به آن پاس داده می شود.
کد: // return iterator
public function getIterator() {
return new ArrayIterator( $this->tech );
}
حالا ما می توانیم همه ی item های داخل آرایه $tech را تکرار کنیم کل کد به صورت زیر است
کد: class WebTechnologies implements IteratorAggregate
{
private $tech;
// constructor
public function __construct() {
$this->tech = explode( ',', 'PHP,HTML,XHTML,CSS,JavaScript,XML,XSLT,ASP,C#,Ruby,Python' );
}
// return iterator
public function getIterator() {
return new ArrayIterator( $this->tech );
}
}
// create object
$wt = new WebTechnologies();
// iterate over collection
foreach ($wt as $n => $t) {
echo "
Technology $n: $t
";
}
|