# زبان های اسکریپتی > PHP >  افزودن فایل function در تمام پروژه بدون هم پوشانی

## hobab-theme

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

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

سپاس

----------


## ASHKANLAEI

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

----------


## hobab-theme

سلام و درود دوست من
ممنون از پاسختون
ولی من نمیخوام توابع db با توابع function یکجا باشن. میخوام بصورت دوتا فایل مجزا باشن

----------


## ASHKANLAEI

حقیقتش من درست متوجه سوالتون نشدم، میتونید یک نمونه از دو تا فایلتون رو اینجا قرار بدین؟ شاید منظورتون با برداشت من متفاوت باشه.

----------


## plague

همیشه نمونه کد و اررورت رو بزار
اگه object کلاس دیتابس  رو بیرون از تابع ساختی یا باید بهش پاس بدی وقتی تابع رو صدا میزنی یا باید global بکنی



class test {

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

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

----------


## hobab-theme

> همیشه نمونه کد و اررورت رو بزار
> اگه object کلاس دیتابس  رو بیرون از تابع ساختی یا باید بهش پاس بدی وقتی تابع رو صدا میزنی یا باید global بکنی
> 
> 
> 
> class test {
> 
>      public function output(){
>          echo "out put stuff";
> ...


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

----------


## ali_sed

> سلام دوستان
> تا زمانی که بصورت مستقیم از داخل 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

بسیار سپاسگزارم از پاسخ کامل دقیق و مفیدتون.
هرچند جوابم رو از جناب plague گرفتم ولی توضیحات شما هم با توجه به اینکه چند نمونه مثال رو در بر داشت بسیار مفید بود.
بازم سپاس از همه دوستان

----------

