بارگذاری خودکار کلاس ها
کلاسهای انجمن "خودکار" هستند. این بدان معنی است که شما هرگز مجبور نیستید فایل منبع IPS4 را اضافه کنید یا به آن نیاز داشته باشید.
برای مرجع، روش بارگذاری خودکار \IPS\IPS::autoloader() است که در فایل init.php دایرکتوری root قرار دارد.
مکان یابی کلاس ها
کلاس ها باید در مکان صحیح قرار داشته باشند و به درستی نامگذاری شوند تا بارگذار خودکار بتواند آنها را پیدا کند. به طور کلی سه مکان وجود دارد:
- کلاس های فریم ورک
ساختار نام کلاس: \IPS\Namespace\Class
مکان روی دیسک: system/Namespace/Class.php
- کلاس های برنامه
ساختار نام کلاس: \IPS\app\Namespace\Class (توجه داشته باشید که کلید برنامه کوچک است، اما قسمتهای بعد از آن PascalCase هستند)
مکان روی دیسک: Location on disk: applications/app/sources/Namespace/Class.php
- پسوندها و ماژول های برنامه
ساختار نام کلاس: \IPS\app\modules\front\module\controller (توجه داشته باشید همه قسمتها حروف کوچک هستند)
مکان روی دیسک: applications/app/modules/front/module/controller.php
برای کلاسهای فریم ورک و کلاسهای برنامه، فایل نهایی باید همیشه در یک پوشه باشد (نه در دایرکتوری سیستم). اگر فقط یک سطح عمیق باشد، سیستم به دنبال فایلی در دایرکتوری به همین نام خواهد بود. برای مثال \IPS\Member در system/Member/Member.php قرار دارد در حالی که \IPS\Member\Group در system/Member/Group.php قرار دارد.
Monkey Patching
هنگامی که اعلام می شود، کلاس ها همیشه با یک خط زیر شروع می شوند. به عنوان مثال، در سراسر مجموعه IPS Community، شما با \IPS\Member تماس میگیرید، با این حال، اگر به فایل منبع نگاه کنید، میبینید که به شکل زیر اعلام شده است:
namespace IPS; class _Member { ...
این یک ویژگی فنی به نام وصله میمون است که به توسعه دهندگان شخص ثالث اجازه می دهد تا هر کلاس را بدون توجه به کد و به گونه ای که قلاب ها با یکدیگر تضاد ندارند، بارگذاری کنند.
در این مثال، سیستم درست پس از بارگذاری خودکار فایل Member.php، کدی مانند زیر را اجرا می کند:
namespace IPS; class Member extends \IPS\_Member { }
اگر یک توسعهدهنده شخص ثالث بخواهد \IPS\Member را بیش از حد بارگذاری کند، سیستم این مورد را در این بین تزریق میکند، بنابراین شما با ساختاری مانند زیر مواجه میشوید:
- \IPS\Member گسترش میدهد hook1
- hook1 گسترش میدهد \IPS\_Member
یا اگر دو قلاب می خواستند \IPS\Member را اضافه بار کنند:
- \IPS\Member گسترش میدهد hook1
- hook2 گسترش میدهد \IPS\_Member
- hook1 گسترش میدهد hook2
این بدان معنی است که فریم ورک و هر کد شخص ثالث فقط باید \IPS\Member را فراخوانی کند و سیستم نه تنها به طور خودکار منبع را بارگیری می کند، بلکه زنجیره ای از هر هوکی که می خواهد کلاس را بیش از حد بارگذاری کند ایجاد می کند.
اگر مکانیزم این گیج کننده است (این یک عمل غیر معمول است) - درک کامل آن ضروری نیست. شما فقط باید بدانید که کلاس ها باید با یک زیرخط در هنگام اعلام پیشوند باشند، اما این زیرخط هرگز در هنگام فراخوانی کلاس استفاده نمی شود.
همچنین به این معنی است که به جای فراخوانی "self::" در کلاس، باید "static::" را فراخوانی کنید، بنابراین کلاس overload شده را فراخوانی می کنید، نه اصلی را.
کتابخانه های شخص ثالث
اگر از کامپوزر استفاده میکنید، لطفاً دایرکتوری Vendor ( وابستگی های PHP در پروژه ای که از Composer استفاده بشه، تو فولدر vendor قرار میگیرند) را در فهرست منابع قرار دهید!
اگر میخواهید از یک کتابخانه PHP شخص ثالث بدون استفاده از کامپوزر و بارگذاری خودکار آن استفاده کنید، البته باید به صورت دستی درج شود و نمیتوان آن را اصلاح کرد.
اگر کتابخانه از استاندارد PSR-0 برای نامگذاری پیروی میکند، میتوانید آن را به فضای \IPS\IPS::$PSR0Namespaces مانند این اضافه کنید و بارگذاری خودکار آن را بهطور خودکار بارگیری میکند:
\IPS\IPS::$PSR0Namespaces['Libary'] = \IPS\Application::getRootPath() . '/applications/app/sources/vendor/Library';
در غیر این صورت، باید فایل های منبع را به صورت دستی وارد کنید.