سلام دوستان
فرق بین استفاده از use در namespace با require_once چیست؟
متشکرم
فرق بین استفاده از use در namespace با require_once چیست؟
متشکرم
فرق use با require_once؟
|
03-06-1399، 05:20 ب.ظ
سلام دوستان
فرق بین استفاده از use در namespace با require_once چیست؟ متشکرم
04-06-1399، 11:18 ق.ظ
دستور use در داخل namespace (که البته داخلش نیست و قبلش نوشته میشه) برای کوتاهکردن نام کامل کلاس و عدم نیاز به ذکر کامل اسم کلاس (همراه با فضای نام) هست و اصلاً فایل رو ضمیمه نمیکنه (برخلاف include و require و include_once و require_once که کارشون ضمیمهکردن اسکریپتهای دیگه است. به این مثال دقت کنید تا کاربرد use رو متوجه بشین:
<?php namespace Controllers; public class AuthController extends Controller { public function actionIndex() { /** @var ModelsUser $user */ $user = ModelsUser::findOne($_POST['id']); // ... } } حالا به نسخهی دیگری از همین کد که از use استفاده میکنه دقت کنید: <?php use ModelsUser; namespace Controllers; public class AuthController extends Controller { public function actionIndex() { /** @var User $user */ $user = User::findOne($_POST['id']); // ... } } درواقع اگه کلاس موردنظرتون توی فضای نام دیگری بجز فضای نام جاری فعلی باشه (که با namespace مشخص کردین) یا باید نام کامل کلاس مربوطه (همراه با فضای نامش) رو بنویسین و یا با استفاده از use کلاس و فضای نامش رو معرفی کنین تا بتونین فقط از اسم کلاس استفاده کنید. درحقیقت PHP وقتی اسم کلاس خالی میبینه ابتدا توی فضای نام جاری دنبالش میگرده و اگه پیدا نکرد، توی فضاهای نامی که با use معرفی شدن جستجو میکنه. تشکر شده توسط: abdollah110110
05-06-1399، 08:10 ق.ظ
(آخرین تغییر در ارسال: 05-06-1399، 08:16 ق.ظ توسط abdollah110110.)
ببینید اینکه میگم درسته:
اول همه کلاسها رو با spl_auto_register آماده require شدن میکنیم(هر وقت لازم شد require میشن)، حالا ممکنه چند تا از این کلاسها نام یکسان داشته باشن، برای اینکه معلوم بشه کدوم یک از کلاسها باید require بشن از use استفاده میکنیم. و اینکه اگه کاملاً میدونیم کلاسهای همنام وجود ندارن، نیازی به استفاده از namespace و use نیست.
05-06-1399، 10:40 ق.ظ
یه مقدار نیاز به اصلاح داره صحبتتون:
تشکر شده توسط: abdollah110110
05-06-1399، 10:55 ق.ظ
منبع: https://www.php.net/manual/en/language.n...ionale.php
فضاهای نام چیستند؟ در کلیترین تعریف، فضاهای نام راهی برای کپسولهسازی اجزا هستند. این موضوع میتواند بصورت یک مفهوم انتزاعی در موقعیتهای زیادی درنظر گرفته شود. برای مثال، در هر سیسیتمعامل، پوشهها نقش گروهبندی فایلهای مرتبط را ایفا میکنند و بعنوان یک فضای نام برای فایلهای داخلشان عمل مینمایند. بعنوان یک مثال دقیقتر، فایل foo.txt میتواند در هر دو پوشهی /home/greg و /home/other وجود داشته باشد، اما دو نسخه از foo.txt نمیتوانند همزمان در یک پوشه وجود داشته باشند. بعلاوه، برای دسترسی به foo.txt خارجاز مسیر /home/greg باید نام مسیر را به ابتدای نام فایل بههمراه جداکنندهی مسیر اضافه کنیم تا به [/ltr]/home/greg/foo.txt[/ltr] برسیم. این مفهوم به فضاهای نام در دنیای برنامهنویسی گسترش پیدا میکند. در دنیای PHP، فضاهای نام برای حل دو مشکل که نویسندگان کتابخانهها و برنامههای کاربردی در زمان ساخت عناصر کد با قابلیت استفادهی مجدد (مثل کلاسها یا توابع) با آن مواجه میشوند، طراحی شدهاند.
فضاهای نام PHP روشی ارائه میدهند که در آن میتوان کلاسها، رابطها، توابع و ثابتهای مرتبط را گروهبندی کرد. در اینجا مثالی از دستور زبان فضای نام در PHP وجود دارد: <?php namespace myname; // see "Defining Namespaces" section class MyClass {} function myfunction() {} const MYCONST = 1; $a = new MyClass; $c = new mynameMyClass; // see "Global Space" section $a = strlen('hi'); // see "Using namespaces: fallback to global // function/constant" section $d = namespaceMYCONST; // see "namespace operator and __NAMESPACE__ // constant" section $d = __NAMESPACE__ . 'MYCONST'; echo constant($d); // see "Namespaces and dynamic language features" section ?> نکته: فضاهای نام به بزرگی و کوچکی حروف حساس نیستند. نکته: فضای نام PHP و اسامی ترکیبی که با این نام شروع میشوند (مثل PHPClasses) برای استفادهی داخلی زبان رزرو شدهاند و نباید در کدهای فضای کاربری مورد استفاده قرار گیرند. نقل قول: تشکر شده توسط: abdollah110110
05-06-1399، 01:07 ب.ظ
(05-06-1399، 10:40 ق.ظ)ADMIN نوشته: ...یک کلاس خاص اگه میخواین فقط توی فضای نام خودش اعتبار داشته باشه و توی فضاهای نام دیگه نشه ازش استفاده کرد، کافیه که بصورت public تعریفش نکنید... تعریف کلاس بصورت public رو متوجه نشدم. تعریف فیلدها و متدها رو بصورت public, private, protected متوجهم ولی تعریف کلاس بصورت public رو نه.
05-06-1399، 02:05 ب.ظ
(05-06-1399، 10:55 ق.ظ)ADMIN نوشته: منبع: https://www.php.net/manual/en/language.n...ionale.php حالا اگه برا کلاسهای داخل فولدر namespace ، libraries تعریف کنیم namespace libraries;و در قسمت app کلاس کنترلر به این شکل میشه: use libraries\Controller as MainController; class SiteController extends MainController { public function actionIndex() { $categories = (new Categories())->findAll(); $this->render( 'index', compact( 'categories' ) ); } }درسته؟
06-06-1399، 10:33 ق.ظ
06-06-1399، 10:38 ق.ظ
(05-06-1399، 01:07 ب.ظ)abdollah110110 نوشته: تعریف کلاس بصورت public رو متوجه نشدم. خیلی ساده است. قبل از اسم کلاس از public استفاده میکنید. اونوقت اون کلاس خارج از پکیج یا فضای نام خودش هم قابل استفاده است (در غیر اینصورت فقط توی همون پکیج میشه ازش شئ ساخت یا از عناصر استاتیکش استفاده کرد). البته این قابلیت هنوز بطور کامل در PHP پشتیبانی نمیشه. فقط طبق اصول شئگرایی که در زبانهای کاملاً شئگرا داره رعایت میشه توضیح دادم خدمتتون. تشکر شده توسط: abdollah110110
|
|