PDA

View Full Version : سوال: روش دسترسی به متغییرهایی که در همه جای برنامه استفاده میشوند



freeman99
شنبه 22 فروردین 1394, 23:13 عصر
مثلا یه متغییر داریم که محتوی آبجکت دیتابیس ماست که در همهء برنامه از همون برای دسترسی به دیتابیس استفاده میکنیم. بعد مثلا توی یه تابع یا کلاس میخوایم بهش دسترسی پیدا کنیم میتونیم از این روش استفاده کنیم:

$GLOBALS['myDbObj'].query(...)

ولی روش بهتری وجود نداره؟

یه خوبی کلاسهای استاتیک اینه که همه جای برنامه قابل دسترس هستن و از این حیث مثل ثابت ها عمل میکنن.
میگم بنظرم میتونیم هم بیایم و از یه پراپرتی استاتیک بعنوان Wrapper برای اون آبجکت خودمون استفاده کنیم. یعنی اونوقت به این شکل دسترسی پیدا میکنیم:


DB::$myDbObj

فکر خوبیه؟ :متفکر:

id1385
شنبه 22 فروردین 1394, 23:58 عصر
نیازی به استفاده از یک پراپرتی استاتیک نیست


<?php
global $string;


$string = "in scope</br>";
echo $string;


test();


function test(){
global $string;
$string = "in function";
echo $string;
}



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

موفق باشید

freeman99
یک شنبه 23 فروردین 1394, 08:01 صبح
کیورد global رو که خودم میدونستم. مشابه همون آرایهء GLOBALS کار میکنه دیگه! من عمدا از GLOBALS استفاده کردم چون اینطوری خوانایی کد بیشتر میشه هرجا مثلا توی تابعی چیزی هم میاد فوری قابل تشخیصه که یک متغییر گلوبال است.

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

abolfazl-z
یک شنبه 23 فروردین 1394, 13:08 عصر
$GLOBALS['myDbObj'].query(...)
اون دات چیه ؟


فکر خوبیه؟

منم اتفاقا مشکلم همین است.

فکر خوبی هست ولی باید ببینیم چقدر میتونه روی performance تاثیر بگذاره نسبت به global ها ؟

http://www.codedwell.com/post/59/static-vs-non-static-methods-in-php

از آن جایی که سرعت کلاس های استاتیک در ورژن های جدید PHP افزایش پیدا کرده و استفاده از آن ها خالی از لطف نیست.(باگ https://bugs.php.net/bug.php?id=62529)

خوب پس اینجا مشکل سر این است که بیاییم از global استفاده کنیم یا static class ؟