متغییرهای استاتیک داخل تابع
لینک کوتاه چهارشنبه , 25 بهمن 1391 5 دیدگاه
کلمه استاتیک از اسمش پیداست یعنی ایستا و بدون تغییر و ما میخواییم از این خاصیت استفاده بهینه کنیم .
فرض کنید یک تابع قرار هست بسازید که اطلاعات کاربر فعلی رو از دیتابیس بخونه .
function currentUser() { @session_start(); $user_id = (int) $_SESSION['user_id']; $qr = mysql_query("SELECT * FROM `user` WHERE `id`={$user_id} "); $result = mysql_fetch_row($qr); return $result; }
حال در جای جای اسکریپت از تابع currentUser استفاده میکنید .
مثلا یه جا برای گرفتن نام کاربر فعلی ، یه جا برای نمایش ایمیل و ...
مساله ای که اینجا مطرح هست این است که با هر بار استفاده از تابع currentUser دستور کوئری اجرا خواهد شد پس به تعداد تکرار این تابع
دستور کوئری تکراری خواندن اطلاعات اجرا خواهد شد و این یک کار بیخود هست .
خب با کمک یک متغییر استاتیک این مساله رو حل میکنیم :)
تابع بالا رو به شکل زیر بنویسید
function currentUser() { static $result ; if( ! empty($result)) return $result; @session_start(); $user_id = (int) $_SESSION['user_id']; $qr = mysql_query("SELECT * FROM `user` WHERE `id`={$user_id} "); $result = mysql_fetch_row($qr); return $result; }
دستور بالا را بررسی کنید ، ساده است ، با اولین بار استفاده از تابع ، متغییر result بررسی میشه که آیا خالی هست یا خیر که مسلماً در اولین بار
فاقد مقدار خواهد بود ، در خطهای پائین این متغییر ست میشود و برای دفعات بعد مقدار ست شده برگردانده میشود و نیازی نیست کوئری اجرا شود .
به همین سادگی :)