نمایش نتایج 1 تا 7 از 7

نام تاپیک: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن

  1. #1

    تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن

    با سلام خدمت دوستان
    من یه مشکلی دارم هنگام include کردن
    من دو تا فایل php دارم که هر کدوم کار جدایی انجام میدن و حالا من میخوام کارایی این دو تا رو یکی کنم و هنگامی که میخوام include کنم مثلا دو تا فایل رو تو یه فایل index.php اینکلود کردم تا جایی که کدها با هم اشتراکی ندارن اجرا میشه اما یه جاهایی کلاسها و توابع و متغیر ها با هم تشابه اسمی دارند اونجا گیر میکنه و دیگه بقیه سایت لود نمیشه
    می خواستم ببینم راه حلی وجود نداره که از این تداخل جلوگیری کنم
    من از require و include و require_once و include_once استفاده کردم اما نتیجه همشون مشابه بود .
    البته این دو فایل که گفتم مثال بود و کار خیلی بزرگتر از گفته ها ی منه بنابراین نمیتونم بشینم تک تک توابع و کلاسها اسمشون رو عوض کنم .
    ممنون میشم یه راه حل ارایه بدین
    با تشکر

  2. #2

    نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن

    فکر نکنم راهی باشه
    زمانی که داره اجرا میکنه
    مثلا کلاس a از فایل a رو اجرا کنه یا کلاس a از فایل b ؟
    معلومه بیچاره هنگ میکنه

  3. #3
    کاربر دائمی آواتار mtchabok
    تاریخ عضویت
    آذر 1389
    محل زندگی
    مازندران - ساری
    سن
    37
    پست
    560

    نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن

    تا اونجایی که من میدونم توابع و کلاسها نباید اسامی همسان داشته باشن ولی در مورد متغیر اینطور نیست .
    فرقی نداره که با کدوم تابع اسکریپت رو وارد میکنید در هر صورت شرایطی که گفتم وجود داره .

  4. #4

    نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن

    سلام
    ممنون از پاسختون
    بله در حالت عادی نمیشه
    من یه چیز رو فراموش کردم بگم
    مثلا فایل a.php لیست اخرین مطالب سایت رو نشون میده و فایل index.php لیست اخرین ارسالهای انجمن
    من برای اینکه اخرین ارسالهای انجمن و سایت رو در یک جا نشون بدم گرفتم داخل فایل index.php یک تابع نوشتم مثلا به اسم تابع x
    من فایل a.php رو فقط تو تابع اینکلود کردم اما بازم رو کل فایل تاثیر میزاره و تداخل ایجاد میکنه
    من میخوام تابع طوری باشه که فقط نتیجه نهایی رو برگردونه و مجزا باشه و تداخلی تو مابقی کدها ایجاد نکنه
    ایا راهی هست ؟
    امیدوارم متوجه منظورم شده باشید
    با تشکر

  5. #5
    کاربر دائمی آواتار mtchabok
    تاریخ عضویت
    آذر 1389
    محل زندگی
    مازندران - ساری
    سن
    37
    پست
    560

    نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن

    عزیزم تنها راه حلی که وجود داره این هس که نام تابع رو عوض کنید .
    مگر اینکه فایل a.php شما یه مقدار رو برگردونه یعنی اینکه در محتوای فایل return داشته باشین . از این طریق میتونید از تابع include یا require مقدار رو دریافت کنید . البته در این روش هم باید نام توابع منحصر به فرد باشه .

  6. #6
    hosseintdk775
    مهمان

    نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن

    بسم الله الرحمن الرحیم
    سلام
    ببین مشکلت با namespace حل می شه:
    http://www.php.net/manual/en/languag....rationale.php

    این امکان هم واسه حل مسئله تداخل اسامی کلاس و تابع و ثابت ها ایجاد شده

  7. #7

    نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن

    شما در کل روش جالبی رو استفاده نکردید و هر راه‌حلی انتخاب کنید از سیستم نرمال فاصله دارید.
    در هر صورت هم همونجور که فرمودند میتونید از Namespace استفاده کنید هم میتونید بجای include کدها رو eval کنید و هم میتونید یک تابع مثل تابع زیر تعریف کنید و فایلها رو بجای include در این تابع قرار بدید:
    $string = get_include_contents('somefile.php');

    function get_include_contents($filename) {
    if (is_file($filename)) {
    ob_start();
    include $filename;
    return ob_get_clean();
    }
    return false;
    }

    در حالت کلی Namespace منطقی‌ترین گزینه است مگه اینکه شرایط متفاوت باشه.

    پیشنهاد شخصی من اون کار مشکلست! یعنی کدها رو مرور و اصلاح کنید! نیازی نیست نام متغیرها رو تغییر بدید فقط کافیه متغیرها reset بشند. تعیین مقدار اولیه برای متغیرها در PHP خیلی اهمیت داره و سرعت رو افزایش میده. مثلا اینکه من یک متغیر counter داشته باشم که تعریف نشده باید مقدار صفر بهش بدم بجای اینکه تشخیص صفر بودن رو به عهده‌ی سیستم بذارم....

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •