WebPajooh
WebPajooh
خواندن ۱ دقیقه·۴ سال پیش

کلاس Countable در PHP

کلاس Countable در PHP
کلاس Countable در PHP

هنگام مطالعه‌ی کدهای لاراول متوجه شدم که بعضی از کلاس‌ها، اینترفیسی به نام Countable را پیاده‌سازی کرده‌اند. با نیم‌نگاهی در مستندات فهمیدم که جریان از چه قرار است و خواستم شما را هم در جریان قرار دهم.

چیست و از کجا آمده؟

کلاس Countable از اینترفیس‌های خود زبان PHP است. اگر با شیءگرایی در PHP آشنا باشید، می‌دانید که اینترفیس‌ها، قراردادهایی هستند که کلاس‌هایی به پیاده‌سازیشان می‌پردازند و باید عیناً متدهای داده شده را اجرا کنند. واژه‌ی Countable یعنی قابل‌شمارش و همین پرسشی را در ذهن ما می‌اندازد: چه چیزی را می‌شماریم؟

چه چیزی را بشماریم؟

یک آرایه با چند عنصر می‌سازیم:

$users = ['Ali', 'Reza', 'Muhammad', 'Farhad', 'Saeid']; echo count($users);

خروجی عدد 5 است. از آنجا که آرایه 5 عنصر دارد، فانکشن count تعداد عناصر آرایه را برایمان برگردانده است.

حال به مثال زیر دقت کنید:

class Library { public $books = []; public function addBook($book) { $this->books[] = $book; } } $lib = new Library(); $lib->addBook('Grokking Algorithms'); $lib->addBook('Keep the Aspidistra Flying'); $lib->addBook('The Lord Of The Rings'); echo count($lib);

نتیجه‌ی چنین کدی، هشدار زیر است:

count(): Parameter must be an array or an object that implements Countable

پارامترِ فانکشنِ count می‌بایست یک آرایه یا آبجکتی باشد که Countable را پیاده‌سازی کرده باشد!

بینگو، این همان گم‌شده‌ی ماست! باید در کلاس Library تغییری اعمال کنیم تا به نتیجه‌ی دلخواه خود (دریافت تعداد کتاب‌های اضافه‌شده با فانکشن count) برسیم:

class Library implements Countable { public $books = []; public function addBook($book) { $this->books[] = $book; } public function count() { return count($this->books); } }

وقتی آبجکتی که در اصل، کلاس Countable را پیاده‌سازی کرده باشد را به عنوان پارامتر به فانکشن count بدهیم، متد count از کلاس یادشده اجرا می‌شود.

phpشی گراییآموزش برنامه نویسیcountphp functions
توسعه‌دهندۀ بک‌اند، امیدوار، خیال‌باف، علاقه‌مند به خواندن و نوشتن
شاید از این پست‌ها خوشتان بیاید