تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن
با سلام خدمت دوستان
من یه مشکلی دارم هنگام include کردن
من دو تا فایل php دارم که هر کدوم کار جدایی انجام میدن و حالا من میخوام کارایی این دو تا رو یکی کنم و هنگامی که میخوام include کنم مثلا دو تا فایل رو تو یه فایل index.php اینکلود کردم تا جایی که کدها با هم اشتراکی ندارن اجرا میشه اما یه جاهایی کلاسها و توابع و متغیر ها با هم تشابه اسمی دارند اونجا گیر میکنه و دیگه بقیه سایت لود نمیشه
می خواستم ببینم راه حلی وجود نداره که از این تداخل جلوگیری کنم
من از require و include و require_once و include_once استفاده کردم اما نتیجه همشون مشابه بود .
البته این دو فایل که گفتم مثال بود و کار خیلی بزرگتر از گفته ها ی منه بنابراین نمیتونم بشینم تک تک توابع و کلاسها اسمشون رو عوض کنم .
ممنون میشم یه راه حل ارایه بدین
با تشکر
نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن
فکر نکنم راهی باشه
زمانی که داره اجرا میکنه
مثلا کلاس a از فایل a رو اجرا کنه یا کلاس a از فایل b ؟
معلومه بیچاره هنگ میکنه
نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن
تا اونجایی که من میدونم توابع و کلاسها نباید اسامی همسان داشته باشن ولی در مورد متغیر اینطور نیست .
فرقی نداره که با کدوم تابع اسکریپت رو وارد میکنید در هر صورت شرایطی که گفتم وجود داره .
نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن
سلام
ممنون از پاسختون
بله در حالت عادی نمیشه
من یه چیز رو فراموش کردم بگم
مثلا فایل a.php لیست اخرین مطالب سایت رو نشون میده و فایل index.php لیست اخرین ارسالهای انجمن
من برای اینکه اخرین ارسالهای انجمن و سایت رو در یک جا نشون بدم گرفتم داخل فایل index.php یک تابع نوشتم مثلا به اسم تابع x
من فایل a.php رو فقط تو تابع اینکلود کردم اما بازم رو کل فایل تاثیر میزاره و تداخل ایجاد میکنه
من میخوام تابع طوری باشه که فقط نتیجه نهایی رو برگردونه و مجزا باشه و تداخلی تو مابقی کدها ایجاد نکنه
ایا راهی هست ؟
امیدوارم متوجه منظورم شده باشید
با تشکر
نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن
عزیزم تنها راه حلی که وجود داره این هس که نام تابع رو عوض کنید .
مگر اینکه فایل a.php شما یه مقدار رو برگردونه یعنی اینکه در محتوای فایل return داشته باشین . از این طریق میتونید از تابع include یا require مقدار رو دریافت کنید . البته در این روش هم باید نام توابع منحصر به فرد باشه .
نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با include کردن
بسم الله الرحمن الرحیم
سلام
ببین مشکلت با namespace حل می شه:
http://www.php.net/manual/en/languag....rationale.php
این امکان هم واسه حل مسئله تداخل اسامی کلاس و تابع و ثابت ها ایجاد شده
نقل قول: تداخل کلاسها و توابع و متغیر های مشابه در دو فایل جدا با 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 داشته باشم که تعریف نشده باید مقدار صفر بهش بدم بجای اینکه تشخیص صفر بودن رو به عهدهی سیستم بذارم....