لینکهای مفید برای شرکت در مسابقه:
بعد از مسابقه در ساعت ۱۹ امروز وبیناری برای حل بخشی از سوالات مسابقه و پاسخگویی به سوالات شما تدارک دیدهایم که میتوانید از طریق این لینک به رایگان ثبتنام نمایید.
در زمان مسابقه میتوانید سوالهای خود را از قسمت "سوال بپرسید" مطرح کنید.
نیما در شرکت کدنویسگستران شرق بهجز حسن مشغول به کار است. او فردی مینیمالیست است و از کتابخانههای بزرگ و پیچیدهی PHP متنفر است. در حال حاضر، تیم کدنویسگستران شرق بهجز حسن از موتور قالب Smarty استفاده میکند. این موتور قالب از نظر نیما بسیار بزرگ و پیچیده است. او تصمیم گرفته تا موتور قالب سادهای با نام Smarties بسازد تا در پروژههای بعدیشان از آن استفاده کنند.
از شما میخواهیم Smarties را برای نیما پیادهسازی کنید.
پروژهی اولیه را از این لینک دانلود کنید.
SmartiesFilter
🔗اسمارتیز همانند سایر template engine ها امکان اعمال فیلتر روی مقادیر را داراست. البته، این فیلترها هیچ آرگومانی بهجز مقدار فعلی ندارد. همهی فیلترهای اسمارتیز اینترفیس SmartiesFilter
را پیادهسازی میکنند. این اینترفیس تنها شامل متدی با نام apply
است که متن ورودی را دریافت کرده و پس از اعمال تغییرات، متن نهایی را برمیگرداند.
SmartiesFilterFactory
🔗وظیفهی این کلاس، تبدیل یک تابع به آبجکتی از SmartiesFilter
است. این کلاس شامل متدی static به نام create
است که یک تابع را به شکل نام تابع یا anonymous function دریافت کرده و یک آبجکت از نوع SmartiesFilter
برمیگرداند که عملکرد متد apply
آن دقیقاً مطابق با تابع ورودی است.
اگر آرگومان ورودی نامعتبر بود (قابل فراخوانی نبود)، یک InvalidArgumentException
با متن پیغام filter must be callable
throw کنید.
توجه: برای پیادهسازی متد create
، مجاز به ایجاد کلاس جدید (کلاسی که anonymous نباشد) در برنامه نیستید.
Smarties
🔗این کلاس، کلاس اصلی اسمارتیز است. این کلاس شامل متدهای زیر است:
addFilter($name, $filter)
: این متد، یک فیلتر با نام $name
را به فیلترها اضافه میکند. موارد زیر را برای پیادهسازی این متد در نظر داشته باشید:SmartiesFilter
نباشد، باید یک InvalidArgumentException
با متن پیغام filter must implement SmartiesFilter
throw کنید.render($filepath, $parameters)
: این متد، نام فایل قالب ورودی و آرایهای انجمنی از پارامترها دریافت میکند و رشتهی خروجی را برمیگرداند. موارد زیر را برای پیادهسازی این متد در نظر داشته باشید:$filepath
موجود نباشد، باید یک Exception
با متن پیغام input file not exist
throw کنید.Exception
با متن پیغام parameter "$parameterName" not provided
throw کنید ($parameterName
نام پارامتر است).Exception
با متن پیغام filter "$filter" does not exist
throw کنید ($filter
نام فیلتر است).a
و A
بهصورت همزمان به این متد داده نمیشود.پارامترها در قالب بهصورت زیر نوشته میشوند:
برای اعمال فیلتر نیز از کاراکتر |
استفاده میشود. میتوان یک یا چند فیلتر را بر روی یک پارامتر اعمال کرد:
فیلترها باید بهترتیب از چپ به راست روی پارامتر اعمال شوند.
با اجرای اسکریپت index.php
موجود در پروژهی اولیه، خروجی باید بهصورت زیر باشد:
فایلهای Smarties.php
و SmartiesFilterFactory
را Zip کرده و آپلود کنید.