PDA

View Full Version : مشکل با دستور use در php



hamidrezawd
شنبه 29 تیر 1398, 12:44 عصر
سلام
خسته نباشین
دستور use تو php چه کاربردی داره ؟

وقتی این دو سه خط کد رو فراخوانی نمیکنم ، ارور پایین رو میده .



use Kavenegar\KavenegarApi;use Kavenegar\Exceptions\ApiException;use Kavenegar\Exceptions\HttpException;

وقتی کد های بالارو از برنامه حذف ارور پایین رو میده
Fatal error: Class 'KavenegarApi' not found in C:\xampp\htdocs\stonetown.ir\controllers\insert.ph p on line 36

کاربرد use اینجا چیه ؟
داره دایرکتوری فراخوانی میکنه یا چی ؟
اینجا چرا از require_once استفاده نکردن .

کدهای بالا به خوبی کار می کنن ، وقتی من کدهای بالا رو میبرم توی کد های خودم که mvc هستش دیگه کار نمیکنه :
نمیدونم مشکل از چیه ؟
شاید use نمیتونه دایرکتوری رو بخونه یا چی ؟

zamanphp
شنبه 29 تیر 1398, 14:18 عصر
دوست عزیز شما باید ابتدا در رابطه با namespace ها تو php کمی مطالعه کنید تا بفهمید برای چی هست
namespace ها یه جور کدهای ما رو براساس دایرکتوری دسته بنده می کنند و use دقیقا برای همین هست که بگیم فلان فایل تو فلان دایرکتوری رو میخواهیم ازش استفاده کنیم
این که require استفاده نشده دلیلش هم این هست که از autoloading داره استفاده میشه که در پست صحنه از همون require استفاده میشه
و در سطح پیشرفته تر از composer استفاده میشه

plague
شنبه 29 تیر 1398, 15:45 عصر
همونجوری که دوستمون گفت مربوط میشه به namespace
نیم اسپیس یجورایی دسته بندی توابع و کلاس هاست تا از تداخل نام ها جلوگیری بشه
مثلا شما توی پروژت از 10 تا کتابخونه مختلف استفاده میکنی این 10 تا رو افراد مختلفی نوشتن در نتیجه ممکنه توابع یا کلاس های هم نام داشته باشن توشون
این هم نام بودن توابع باعث میشه کد شما اررور بده
مثلا دو تا تابع داری با نام action() که 2 کار مختلف میکنن اینا رو با هم بخای بارگزاری و استفاده کنی اررور میگیری چون همنامن
ولی وقتی نیم اسپیس داشته باشن دیگه اررور نمیده و تداخل ندارن و اینجوری باید صداشون کنی



namespace1\action();
namespace2\action();


اگه بخای بدون نیم اسپیس تابع یا کلاس رو فراخانی کنی میتونی با استفاده از use نام مستعار تعریف کنی براش
اول مینویسی

use namespace1\action

بعد تابع رو صدا میزنی

action()


اینجا با استفاده از use اعلام میکنی که تابع action که من دارم صدا میزنم همون namespace1\action هستش