PDA

View Full Version : افزودن فایل function در تمام پروژه بدون هم پوشانی



hobab-theme
جمعه 26 مهر 1398, 21:57 عصر
سلام دوستان
من یه وب سایت کوچولو با php نوشتم که توابع مورد نیاز رو توی یه فایلی با نام function.php قرار دادم.
یه فایلم دارم بنام db.php که توابع کار با دیتابیس درونش هست. در واقع یه کلاس هست با متدهای مورد نیاز
خب مشکل من...
تا زمانی که بصورت مستقیم از داخل function.php از این کلاس db استفاده کنم مشکلی نیست. ولی وقتی توی فایل function.php میام و یه تابع ایجاد میکنم و میخوام توی اون تابع از کلاس db استفاده کنم اصلا نمیشناسه اون رو و متدهای اون رو.

لطفا منو راهنمایی کنید که چطور بصورت بهینه یه فایل function.php داشته باشم که فایل db.php داخل اون include شده باشه و بدون مشکل ازشون استفاده کنم.

سپاس

ASHKANLAEI
شنبه 27 مهر 1398, 08:22 صبح
سلام منم یه زمان این مشکل رو داشتم اما به جای حلش اومدم کل تابع های مربوط به دیتابیس رو توی همون db.php قرار دادم.
گفتم شاید شما هم از این روش بخواین استفاده کنید. :لبخندساده:

hobab-theme
شنبه 27 مهر 1398, 12:03 عصر
سلام و درود دوست من
ممنون از پاسختون
ولی من نمیخوام توابع db با توابع function یکجا باشن. میخوام بصورت دوتا فایل مجزا باشن

ASHKANLAEI
شنبه 27 مهر 1398, 12:44 عصر
حقیقتش من درست متوجه سوالتون نشدم، میتونید یک نمونه از دو تا فایلتون رو اینجا قرار بدین؟ شاید منظورتون با برداشت من متفاوت باشه.

plague
شنبه 27 مهر 1398, 16:55 عصر
همیشه نمونه کد و اررورت رو بزار
اگه object کلاس دیتابس رو بیرون از تابع ساختی یا باید بهش پاس بدی وقتی تابع رو صدا میزنی یا باید global بکنی




class test {

public function output(){
echo "out put stuff";
}
}
$testobj = new test();

function action (){
global $testobj ;
$testobj->output();
}

hobab-theme
چهارشنبه 01 آبان 1398, 23:54 عصر
همیشه نمونه کد و اررورت رو بزار
اگه object کلاس دیتابس رو بیرون از تابع ساختی یا باید بهش پاس بدی وقتی تابع رو صدا میزنی یا باید global بکنی




class test {

public function output(){
echo "out put stuff";
}
}
$testobj = new test();

function action (){
global $testobj ;
$testobj->output();
}


ُلام مهندس
ممنون. مشکلم با global حل شد.
ممنون بابت راهنمایی

ali_sed
جمعه 03 آبان 1398, 18:59 عصر
سلام دوستان
تا زمانی که بصورت مستقیم از داخل function.php از این کلاس db استفاده کنم مشکلی نیست. ولی وقتی توی فایل function.php میام و یه تابع ایجاد میکنم و میخوام توی اون تابع از کلاس db استفاده کنم اصلا نمیشناسه اون رو و متدهای اون رو.
سپاس

سلام

با توجه به اینکه اتصال به دیتابیس بهتر است تنها یک بار در کل برنامه انجام شود تا از سربار اضافه جلوگیری شود بهتر است کلاس شما نیز بصورت singleton طراحی شود. سپس به راحتی می توانید در هر جایی از برنامه یک نمونه از کلاس دیتابیس ایجاد کنید بدون اینکه ارتباط جدیدی با دیتابیس برقرار شود.

در مورد اینکه یک متغیر عمومی قابل دسترس در داخل توابع نمی باشد. این یک امر طبیعی هست و توابع مانند یک کپسول عمل می کنند و برای اینکه بتوانند به متغیرهای دیگر دسترسی داشته باشند یا باید از آرایه $GLOBALS استفاده کنید یا لغت کلیدی global و یا متغیر مورد نظر را به عنوان یک آرگومان ورودی به تابع خود ارسال کنید.



$a = 2;

function printa(){
$x = $GLOBALS['a'];
echo $x;
}
printa();

function printb(){
global $a;
echo $a;
}
printb();

function printc($a){
echo $a;
}
printc($a);




ویرایش:
متاسفم من تازه متوجه شدم که شما پاسخ خود را یافته اید

hobab-theme
شنبه 04 آبان 1398, 09:39 صبح
بسیار سپاسگزارم از پاسخ کامل دقیق و مفیدتون.
هرچند جوابم رو از جناب plague (https://barnamenevis.org/member.php?123420-plague) گرفتم ولی توضیحات شما هم با توجه به اینکه چند نمونه مثال رو در بر داشت بسیار مفید بود.
بازم سپاس از همه دوستان