PDA

View Full Version : توابع استاتیک



sam.iran67
سه شنبه 19 دی 1391, 20:36 عصر
چه هنگام باید از توابع و متغیر های استاتیک استفاده کنیم و چه موقع نباید؟
فواید استفاده از متغیر و توابع استاتیک چه طوری هست؟

parsboy
سه شنبه 19 دی 1391, 20:43 عصر
منابع استاتیک خواصی داره که در شرایط خاص میتونه بهینگی ایجاد کنه و گاهی نجاتبخش باشه.
منابع استاتیک رو میشه به یک متغیر داخل تابع اختصاص داد و یا در کلاسها استفاده کرد با مدل اول کاری ندارم چون به نظرم به درد نمی‌خوره.
در برنامه‌نویسی شی‌گرا و در کلاسها، براساس توضیح سایت PHP، منابع استاتیک امکان فراخوانی بدون نمونه‌گیری رو فراهم میکنه.
یعنی فقط با استفاده از نام کلاس می‌تونیم به یک مقدار استاتیک اون کلاس دسترسی داشته باشیم.

sam.iran67
سه شنبه 19 دی 1391, 20:52 عصر
با تشکر از شما جنابparsboy (http://barnamenevis.org/member.php?275637-parsboy)
ولی می دونم که با استفاده از نام کلاس میشه دسترسی داشت و نیازی به نمونه گیری نیست.منظورم اینه که کجا ها باید استفاده کرد و کجا ها نباید استفاده کرد؟
به عبارتی من یک اتوماسیون می نویسم که یک بخش رو به صورت واسط ادمین و کاربران با سایت هست و یه سری اطلاعات و عملکرد ها رو انجام میده (البته اینو به این خاطر گذاشتم که بشه این اتوماسیون را مستقل از سایر موارد بدون مشکل توسعه داد).حال این واسط یک کلاس هست که به صورت یه سری متد.این متد ها کدامشون staticباشه و کدامشون نباشه تا اتوماسیون ما بهینه و سربار کمی داشته باشه.

plague
چهارشنبه 20 دی 1391, 05:11 صبح
باید و نباید خاصی نداره بسته به نوع عملیات باید مشخص کنی که استاتیک باشه یا نه .
فایدده استاتیک اینه که سرعت بالا تری داره . عیبش هم اینه که خب یه شی نیست و به توابع و متغیر های کلاس دسترسی نداره (حداقل غیر استاتیک هاشون )

حالا مثلا من یه نمونه مال میزنم از کاربرد استاتیک
شما یه کلاس داری به اسم یوزر
توی اینکلاس یه تابع داری که آیدی یوزر رو میگیره و اون رو از دیتابیس مخونه و نتیجه رو برگشت میده
طبیعتا با توجه به برنامه نویسی شی گرا شما انتظار داری که نتیجه برگشتی یه شی از کلاس یوزر باشه

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

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

شما میای تابع رو استاتیک میسازی
اینجوری سریعتر فراخانی میشه و فقط یه شی برگشتی ساخته میشه

rezaonline.net
چهارشنبه 20 دی 1391, 08:44 صبح
اگر دقت کنید در داخل متدهای استاتیک فقط میتونید به سایر متدهای استاتیک و یا پروپرتی های استاتیک دسترسی داشته باشید .
اگر متدی یا پروپرتی بصورت استاتیک باشد ، چه از کلاس 10 تا شی بگیرید ، چه هیچ شی ای نگیرید ، این پروپرتی/متد در همشون مشترک هستن .

برای راحتی درک مسئله فرض کنید یه کلاس برای کار با دیتابیس دارید که در جای جای پروژه ازش شی میگیرید
$db = new db
حالا نیاز دارید تعداد کوئری هایی که زده میشه رو داشته باشید ، پس میایید یک پروپرتی بعنوان استاتک تعریف میکنید و هر وقت داخل کلاس کوئری زده شد یکی بهش اضافه میکنید .

کاربرهای دیگه هم پیاده سازی الگوی singleton هست که تحقیق در موردش رو میذارم به عهده خودتون