PDA

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



eshpilen
شنبه 21 دی 1392, 08:15 صبح
من توی پروژم خیلی جاها کانفیگ جدا برای ادمین و کاربران عادی گذاشتم.

یه مدل برای انجام این کار، استفاده از متغییرهای کانفیگ جداگانه است.
مثل این:

$change_autologin_key_upon_logout=true;
$admin_change_autologin_key_upon_logout=true;
الان متغییر کانفیگ اول برای کاربران عادی بکار میره و متغییر کانفیگ دوم برای اکانت ادمین.

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

$change_autologin_key_upon_logout=3;
//0: no / 1: for normal users only / 2: for Admin account only / 3: for all accounts
الان همونطور که در کامنت ها میتونید ببینید، ما از یک متغییر استفاده کردیم ولی گفتیم که اگر 0 بود یعنی غیرفعال، اگر 1 بود یعنی برای اکانت کاربران عادی این گزینه فعال باشه، اگر 2 بود به معنای اینه که فقط برای اکانت ادمین این گزینه فعال است، و اگر 3 بود یعنی برای تمام اکانتها این گزینه فعال است.

بنده در پروژم از هردوی این روشها استفاده کردم و مشکلی در این نمیبینم که هرکجا بنا بر راحتی برنامه نویسی، خوانایی، یا هر پارامتر دیگری که صلاح میدونیم، از یکی از این روشها استفاده کنیم، ولی گفتم بهتره این رو مطرح کنم شاید کسی ایده یا نظر و تجربهء مفیدی درموردش داشت.

راستی اگر مفید باشه میتونیم در روش دوم از مقدارهای رشته ای بجای مقدارهای عددی، در جهت افزایش خوانایی کد استفاده کنیم.
یعنی مثلا مقدارهای رشته ای no، users، admin، all بجای 0، 1، 2، 3. ولی از اون طرف از نظر راحتی و سرعت نوشتن و امکان خطای کمتر موقع تعیین کانفیگ، بنظرم مقدارهای عددی بهتر باشن. مثلا یوقت ممکنه یکی اشتباها بجای users بنویسه user و متوجه این نشه، یا ممکنه در بزرگی و کوچکی حروف اشتباه پیش بیاد.

colors
شنبه 21 دی 1392, 09:34 صبح
این که دیگه خیلی پایه ای :لبخند: ولی در هر صورت میشه از ثابت هم استفاده کرد. هم بهینه تر و هم خوانایی کد ر و افزایش میده

marys_farahani
شنبه 21 دی 1392, 13:10 عصر
این که دیگه خیلی پایه ای :لبخند: ولی در هر صورت میشه از ثابت هم استفاده کرد. هم بهینه تر و هم خوانایی کد ر و افزایش میده


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

من هم با ثابت موافقم ممنون از اموزش هاتون



define('DB_SERVER', 'localhost');

eshpilen
شنبه 21 دی 1392, 13:43 عصر
منکه نفهمیدم این قضیهء ثابت چه ربطی داشت!


هم بهینه تر و هم خوانایی کد ر و افزایش میده
بهینگیش مهم نیست. چندرغاز بهینگی میشه. بذار زیر میکروسکوپ شاید ببینی :لبخند:

حالا فرقی هم نمیکنه چه با ثابت چه با متغییر میشه دو مدلی رو که گفتم پیاده کرد. اصل بحث این بود.

2undercover
شنبه 21 دی 1392, 13:53 عصر
من با روش دوم موافق ترم.توی روش دوم یک راه دیگه هم وجود داره که یک چیزی شبیه همون Flag ها هست:



define('NONE', 0);
define('ADMIN', 1);
define('USER', 2);
define('BOTH', 3);

// ــــــ
$change_autologin_key_upon_logout = NONE;
# $change_autologin_key_upon_logout = USER;
# $change_autologin_key_upon_logout = ADMIN;
# $change_autologin_key_upon_logout = BOTH;


موقع اجرای برنامه هم برای این که بفهمید که کدوم یکی انتخاب شده می تونید این جوری عمل کنید:



switch ($change_autologin_key_upon_logout) {
case NONE:
// None
break;
case USER:
// User
break;
case ADMIN:
// Admin
break;
case BOTH:
// Both
break;
}


که خوانایی کد برای مراجعه مجدد خیلی خیلی بیشتر میشه بدون اینکه کامنت نوشته باشید.

colors
شنبه 21 دی 1392, 14:50 عصر
حالا فرقی هم نمیکنه چه با ثابت چه با متغییر میشه دو مدلی رو که گفتم پیاده کرد. اصل بحث این بود.
همین دیگه, پایه ای که گفتم یعنی اینکه مهم نیست چطور بخواید پیاده کنید. تو پروژه کوچیک باید میکروسکپ بزاری :لبخند:
وقتی پروژه بزرگ بشه بعد ثابت ها بیشتر ارزش پیدا میکنن. هرجای تعریف یا استفاده بشن به راحتی میفهمی که مربوط به تنظیمات برنامه هست.
در مورد روش شماهم, دومی بهتره ولی به شرطی که زیاد گنگ نشه. مثلا اگه از 5 سطح بیشتر بشه انوقت تشخصی عملکرد 1 یا ... مشکل میشه. پس بهتره همون حرف خودتون از این روش و مقادیر رشته ای با استاندارد NameSpace استفاده کنید.

colors
شنبه 21 دی 1392, 14:51 عصر
فقط ما که قرار نیست از این اطلاعات استفاده کنیم :لبخندساده: که با سطح علم خودمون نگاه میکنیم همه قرار استفاده کنن و همه مثل شما حرفه ایی نیستن .

من هم با ثابت موافقم ممنون از اموزش هاتون



define('DB_SERVER', 'localhost');


قصد جسارت نداشتم. جواب بنده در سطح معلومات جناب eshpilen بود.