PDA

View Full Version : سوال: آنتی include



farzad_sx1
سه شنبه 25 تیر 1387, 12:14 عصر
سلام دوستان ،
راستش من از اونجایی که زیاد چیزی در php بلد نیستم و به یک مشکل برخوردم گفتم از شما اساتید کمک بگیرم . امیدوارم که کمکم کنید .

دوستان من یک فایل php دارم که وقتی که این فایل اجرا میشه بطور اتوماتیک یک فایل مثلا yek.php اجرا میشه . حالا مشکلی که من دارم اینه که میخوام به جای فایل yek.php فایل do.php رو اجرا کنم با این شرط که فایل yek.php رو در اول این فایل ببندم و بعد do.php رو اجرا کنم .
میشه کمکم کنید که چطوری میشه این کارو کرد ؟ :اشتباه:

majoran
سه شنبه 25 تیر 1387, 13:30 عصر
منظورت رو خوب نفهمیدم اگه منظورت اینه که فایل اولت مدام هی فراخوانی میشه خوب با استفاده از


<?php require_once(نام فایلت); ?>
مشکلت حل میشه

farzad_sx1
سه شنبه 25 تیر 1387, 15:44 عصر
ممنون از لطفت ولی منظور من این نبود .
ببینید چون محتویات فایل yek.php در این فایلی که دارم روش کار میکنم لود میشه میخوام این لود انجام نشه ... مثلا یه دستور بنویسم مثل اینکه :


<?php close(نام فایلت); ?>
ولی مثل اینکه در php با close یک فایل رو نمیبندند . لازم به ذکر هست که اون فایل با دستور include فراخوانی شده.

majoran
سه شنبه 25 تیر 1387, 16:30 عصر
خوب پش بهتره تو فایل اولت شرط بزاری که در فلان موقع فلان قسمت رو بخونه والا اون کد مورد نظرت رو بخونه

farzad_sx1
سه شنبه 25 تیر 1387, 17:17 عصر
اونوقت باید توی هزار تا فایل دیگه توضیح بدم که اینو بخون .... به نظرت این بهتر نیست که در یک فایل بگم اینو نخون ؟

majoran
سه شنبه 25 تیر 1387, 19:09 عصر
شما داخل همون فایلی که داخل بقیه خونده میشه اینو بنویس نه تو 1000 تا صفحه دیگت

Parsisoft
چهارشنبه 26 تیر 1387, 10:02 صبح
اتفاقاً منم یه همچین چیزی نیاز دارم. ببینید مثلاً a.php رو inc کردیم حالا میخوایم b.php رو inc کنیم بنا به دلایلی مثل احتمال وجود توابع هم نام میخوایم a.php رو ببندیم. چه باید کرد؟

paksar
چهارشنبه 26 تیر 1387, 14:03 عصر
اتفاقاً منم یه همچین چیزی نیاز دارم. ببینید مثلاً a.php رو inc کردیم حالا میخوایم b.php رو inc کنیم بنا به دلایلی مثل احتمال وجود توابع هم نام میخوایم a.php رو ببندیم. چه باید کرد؟

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


<?php
$a=true;
switch($a){
case true:
include "a.php";
break;
case false:
include "b.php";
break;
}
?>

Parsisoft
چهارشنبه 26 تیر 1387, 18:20 عصر
نه paksar. برنامه ماژولاره و نمی دونیم قراره چه ماژولهایی به برنامه add بشه.
به همین خاطر ممکنه دو ماژول از دو جای مختلف دانلود و رو نرم افزار نصب بشن و این احتمال هم هست که هر دو از تابعی به اسم (مثلاً) test استفاده کنند. اینجا رو چی کار کنیم؟

vahid4134
چهارشنبه 26 تیر 1387, 19:05 عصر
هر کدوم رو داخل یک فانکشن مجزا include کن

Parsisoft
چهارشنبه 26 تیر 1387, 22:13 عصر
مرسی وحید جان. اما میشه؟
ببین سیستم اینجوریه که لیست ماژولها تو دیتابیس هست و سیستم میاد تو یک حلقه همه ماژولها رو inc میکنه.
حالا چطور هر کدوم رو تو یه function مجزا inc کنم؟
راستی سیستم یه cms هست که اپن سورس منتشر کردیم. اگه خواستین روش کار کنین بسم الله.
http://apple-cms.ir (http://apple-cms.ir/)

vahid4134
چهارشنبه 26 تیر 1387, 23:55 عصر
یه پیشنهاد دارم که این مشکل پیش نیاد. بیایید و از حالت فانکشینالیتی در بیارید و ببرید روی حالت OOP به این صورت هر کدوم از ماژولها یک کلاس باشه که همنام به فایلی باشه که داخلش ایجاد شده بعدش نام ماژولهایی که داخل دیتابیس ذخیره میشه فیلدش منحصر به فرد باشه اینجوری مشکلش پیش نمیاد

Parsisoft
پنج شنبه 27 تیر 1387, 08:56 صبح
نام ماژولها منحصر به فرد هست چون قراره تو فولدر modules ذخیره بشه. اما اگر بخواهیم این کار رو کنیم مشکلی هست و اینکه اگه دو ماژول هم نام مثل news که متداول هست باشه و مدیر سایت آدم معمولی باشه که از کد نویسی چیزی نمیدونه نمیتونه از پس این مشکل بر بیاد (چون باید کلاس رو هم rename کنه و همینطور شی ای که ایجاد میشه و ....) اما در حال حاضر فقط با rename کردن فولدر ماژول ، مشکلش حل میشه.
ضمن اینکه اگه قراره هم نامی پیش بیاد کلاس و فانکشن چه فرقی با هم دارن؟

vahid4134
پنج شنبه 27 تیر 1387, 13:01 عصر
بهترین راه همین هست. نمیشه که دو تا کلاس همنام داخل کد وجود داشته باشه.
مزیت کلاس همنام این هست که خیلی کمتر از فانکشنهای هم نام پیش میاد. بهتره که داخل کدتون نام کلاس رو هم بگیرید و هر کلاسی رو خواستید include کنید اول چک کنید کلاسش وجود داره یا نه اگر وجود داشت یه اخطار بده

Parsisoft
پنج شنبه 27 تیر 1387, 21:35 عصر
ظاهراً جز این راه دیگه ای نیست. مرسی وحید جان به همین روش یکم نمک ترشی اضافه کردم درست کار میکنه فعلاً:لبخند: