PDA

View Full Version : سوال در مورد شی گرایی



amir6268
سه شنبه 14 بهمن 1393, 00:09 صبح
سلام
در شی گرایی اگر بخواییم داخل یک Class در Function یک select از دیتابیس تعریف کنیم و هر موقع که خواستیم در هر صفحه فراخوانی کنیم چجوری باید بنویسیم؟
مثلا یک select از جدول user رو انتخاب میکنیم ...
بعد توی هر صفحه ای که خواستیم بتونیم با فراخوانی این class هر ستونی از اون جدول رو نمایش بدیم ...

rezakho
سه شنبه 14 بهمن 1393, 09:42 صبح
به جای mysql_fetch_assoc می تونید بر اساس نیازتون از تابع دیگه ای استفاده کنید یا متدهای دیگه ای شبیه select برای خروجی های دیگه بسازید


class User
{
public static function select()
{
$args = (func_num_args() > 0) ? func_get_args() : ['*'];

$res = mysql_query('SELECT '. implode(', ', $args) .' FROM `user`');

return mysql_fetch_assoc($res);
}
}


// usage
User::select();
User::select('id', 'name');

amir6268
سه شنبه 14 بهمن 1393, 16:02 عصر
کدتون خطا میده :


Parse error: syntax error, unexpected '['

rezakho
سه شنبه 14 بهمن 1393, 17:24 عصر
php من 5.6 هست، توی php نسخه 5.4 به بالا، آرایه ها با [] تعریف می شند
شما احتمالا داری از 5.3 یا 5.2 استفاده می کنی
اون خط 5، به جای ]'*'] بنویس
array('*')

amir6268
سه شنبه 14 بهمن 1393, 19:32 عصر
برای استفاده از echo باید چیکار کنیم؟ و اینکه اگه بخواییم همه ستون ها رو ببینیم باید while استفاده کنیم؟

rezakho
سه شنبه 14 بهمن 1393, 22:50 عصر
اینی که من نوشتم، یک مثال بود، و کارش اینه که اولین رکورد پیدا شده با فیلدهای موردنظر شما رو به صورت آرایه برمیگردونه، اگر هم فیلدی مشخص نکنید، همه فیلدها رو برمیگردونه
برای استفاده مثلا باید بنویسید


$user = User::select();
echo $user['name'];


خیلی جای کار داره، خودتون می تونید چیزهای قشنگی از توش دربیارید، مثلا اگر به جای assoc از object استفاده کنیم، می تونید به روش اشیا مستقیم از خروجی متد استفاده کنید، مثلا متد find رو ببینید


class User
{
public static function select()
{
$args = (func_num_args() > 0) ? func_get_args() : ['*'];

$res = mysql_query('SELECT '. implode(', ', $args) .' FROM `user`');

return mysql_fetch_assoc($res);
}


public static function find($id)
{
$res = mysql_query("SELECT * FROM `user` WHERE id = $id");

return mysql_fetch_object($res);
}
}


// usage
echo User::find(56)->name;

amir6268
سه شنبه 14 بهمن 1393, 23:00 عصر
استفاده از روش شی گرا به امنیت ربطی داره؟ یا فقط باعث میشه کدها مرتب تر و در دسترس تر بشن؟

hamedarian2009
سه شنبه 14 بهمن 1393, 23:41 عصر
استفاده از روش شی گرا به امنیت ربطی داره؟ یا فقط باعث میشه کدها مرتب تر و در دسترس تر بشن؟

تاثیرش فقط این میتونه باشه که چون کد شما قابلیت استفاده مجدد پیدا میکنه مثلا کافیه یک کلاس با امنیت بالا برای کار با دیتابیس بنویسین اونوقت این کلاس رو در هرجای پروژه استفاده کنید و اطمینان داشته باشین که برنامتون امنیت خوبی داره اما وقتی به روش رویه گرا کار کنید اگر هر بار بخایین کدهای تکراری بنویسین احتمال فراموش کردن و عدم رعایت موارد امنیتی بیشتر میشه

amir6268
چهارشنبه 15 بهمن 1393, 11:46 صبح
یعنی هر چی که در حالت رویه گرا استفاده میکنیم دقیقا همون رو در شی گرا استفاده میکنیم؟
منظورم اینه طریقه نوشتنش فرقی نمیکنه؟

بعد یه سوال دیگه برای Insert یا Update دستورهای if و else رو داخل همون function باید استفاده کنیم یا موقع فراخوانی هم میتونیم استفاده کنیم؟ طرز صحیحش کدومه؟

hamedarian2009
چهارشنبه 15 بهمن 1393, 12:12 عصر
بله دستورات همون دستوراتن دیگه فقط شما در قالب شی گرایی برنامتون رو مینویسین و روش کارتون عوض میشه
توی متدها همه دستوراتی که قراره چندجا استفاده بشن و تکراری هستن رو داخل متد مینویسید و فقط دستوراتی که فقط توی اون فایل کاربرد داره رو موقع فراخوانی استفاده کنید
بهتره از آموزش های اقای شهرکی استفاده کنید با تجربه ای که در شی گرایی بدست میارین خودتون متوجه میشین چیکار کنید
http://www.ncis.ir/categories/4/PHP