PDA

View Full Version : سوال: کاربرد فیلد های ایستا و کبسوله سازی



amin7x
جمعه 24 خرداد 1392, 14:49 عصر
سلام
ببخشید من میخواستم بدونم دقیقا کاربرد فیلدهای Static و کبسوله سازی در کجاها است؟
ممنون

ravand
جمعه 24 خرداد 1392, 18:39 عصر
شما اگه بخوای متغییری رو در یک کلاس فراخوانی بکنی اول میای شی رو تعریف میکنی بعد متغییر رو فراخوانی میکنی ولی اگه استاتیک باشه دیگه نیازی به تعریف شی برای فراخوانی متغییر نداری.

amin7x
شنبه 25 خرداد 1392, 01:38 صبح
شما اگه بخوای متغییری رو در یک کلاس فراخوانی بکنی اول میای شی رو تعریف میکنی بعد متغییر رو فراخوانی میکنی ولی اگه استاتیک باشه دیگه نیازی به تعریف شی برای فراخوانی متغییر نداری.

توضیح رو بلدم ولی کاربردش رو نمیدنم کجاست:لبخند:
در مورد کبسوله سازی که هیچیش رو نمیدونم:لبخند:

ravand
شنبه 25 خرداد 1392, 07:05 صبح
class A {
public static $statici = 'استاتیک';
public $no_static = 'استاتیک نیست';
}
echo A::$statici; //استاتیک
echo A::$no_static;//خطامی دهد
?>

MMSHFE
شنبه 25 خرداد 1392, 08:21 صبح
دوست گرامی، فیلدهای استاتیک برخلاف فیلدهای معمولی، در هر لحظه فقط یک نسخه توی حافظه دارن و اونهم توسط نام کلاس (و نه نام شئ) قابل دسترسیه. یعنی اینکه به ازای هر شئ، یک فیلد ایجاد نمیشه و کلاً یک عدد بیشتر نداریم. این ویژگی خیلی جاها بدرد میخوره. مثلاً یک شئ، فیلد رو مقداردهی کنه و شئ دیگه یا جای دیگه توی کد بدون استفاده از شئ، اون فیلد رو بخونیم. بخصوص توی بحث Multi-Thread یا پردازشهای موازی، چند شئ از یک کلاس ایجاد بشه و هرکدوم، یکی از لینکهای موجود در دیتابیس رو دانلود کنن و تعداد دانلودها رو (که توی فیلد استاتیک هست)، افزایش بدن. حالا هر بخشی از کد که بخواد بدونه چندتا فایل دانلود شده، مقدار اون فیلد استاتیک رو بکار میبره و لازم نیست یک شئ جدید ایجاد بشه. حالا اگه این فیلد استاتیک نبود، وقتی یک شئ مقدارش رو افزایش میداد، درواقع مقدار فیلد خودش رو اضافه میکرد و ربطی به مقدار اون فیلد توی اشیاء دیگه نداشت.
کپسوله سازی هم یعنی قراردادن عناصر کلاس توی یک ظرف (خود کلاس) و جلوگیری از دسترسی غیرمجاز. مثلاً فرض کنید کلاسی نوشتین که فهرست اسامی برندگان قرعه کشی رو از دیتابیس میخونه و توی یک فیلد بصورت آرایه میریزه. حالا اگه این فیلد بصورت public باشه، هرکی از راه برسه میتونه خودش رو به اون فهرست اضافه کنه ولی اگه private باشه، نمیتونن دستکاریش کنن. خوب حالا چطوری ببیننش؟ کافیه یک متد public بنویسید که اون آرایه رو return میکنه و از اونجا که متدی ندارین که مقدارش رو تغییر بده و ازطرفی، خودش هم private هست، خیالتون راحته که کسی بصورت غیرمجاز وارد اون فهرست نمیشه. به این ویژگی که توسط کلاسها و کلاً OOP به برنامه نویسی اضافه شده و تا قبل از اون (برنامه نویسی رویه گرا) وجود نداشت، میگن کپسوله سازی (Encapsulation)