PDA

View Full Version : آیا این متغیر جدید تعریف شده یا همان متغیر داخل کلاس هست؟



nekooee
یک شنبه 29 اردیبهشت 1392, 02:28 صبح
سلام
ما یک کلاس داریم به این شکل:


class Articles
{
public function SelectNormal()
{
$this->Connect();
$result=mysql_query('SELECT * FROM `articles` WHERE (`status`=\'normal\') ORDER BY `id`');
return $result;
}
}


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

حالا تو صفحه دیگر چنین کدی داریم:



<?PHP
require_once('db.php');
$articles=new Articles();
$result=$articles->SelectNormal();
if(mysql_num_rows($result)>0)
{
//... ادامه کد
?>



اما سوالم اینه که اینجا دوباره برای $result یک مقدار تعریف شده و یک مقدار هم برای $result داخل کلاس برگشت داده شده.
مقدار $result که در mysql_num_rows قرار گرفته کدام یکی از این $result ها رو شامل میشه؟؟
و اگر منظور همین $result هست که در صفحه تعریف کردیم پس چرا تو کلاس با return مقدار رو برگردوندیم؟ کاربرد return تو کلاس چی میشه؟!
و انتخاب نامهای مشابه تو کلاس و تو صفحه تداخلی به وجود نمیاره؟

ayub_coder
یک شنبه 29 اردیبهشت 1392, 09:20 صبح
return میگه این متغییر رو بفرست به عنوان خروجی تابع.
اون result اولی یک متغییر محلی برای همون کلاس هست. اگر return وجود نداشته باشه. شما چطور می خوای به داده هات دسترسی داشته باشی؟ رترن اجازه دسترسی به داده ها رو میده
اون result پایینی باز یه متغییر جدا حساب میشه که خروجی تابع رو تو خودش نگه میداره. در اصل این دوتا دو متغییر جدا هستن ولی یک مقدار رو تو خودشون دارن

MRmoon
یک شنبه 29 اردیبهشت 1392, 10:26 صبح
نگا return يه مقدار رو از تابع بر ميگردونه. متغير هاي تعريف شده تو يك تابع فقط تو همون تابع قابل دسترسي هستند.
اون $result اون متغيري هست كع تو صفحه تعريف كردي و مقدار فانكشن $articles->SelectNormal() رو توش ريختي

nekooee
یک شنبه 29 اردیبهشت 1392, 19:16 عصر
خیلی ممنون از توضیحاتتون.
فقط تو کد صفحه الآن ما هیچ استفاده ای از $result که تو کلاس شده نکردیم. همین که تابع رو فراخوانی کردیم خودش اتوماتیک از اون مقدار برگشتی استفاده میکنه؟ و اگر return رو نگذاریم دیگه اون تابع اصلا قابل استفاده نیست؟

ayub_coder
یک شنبه 29 اردیبهشت 1392, 19:45 عصر
$result=$articles->SelectNormal();

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

H:Shojaei
یک شنبه 29 اردیبهشت 1392, 19:54 عصر
سلام دوست عزيز اگه متغير ها رو اسمهاشونو تغيير بدي و يه نگاه دوباره از ابتدا بهش بكني خودت كاملا متوجه ميشي چه اتفاقي ميفته فقط result ها رو تو هر پيج تغيير بده.

nekooee
یک شنبه 29 اردیبهشت 1392, 20:00 عصر
می تونم تست کنم ولی من خیلی دلم میخواد کدها رو بفهمم که چه کار میکنن و فقط با جواب درست گرفتن عملکردشون رو تجزیه و تحلیل نکنم. چون گاهی از کد اشتباه هم میشه جواب درست گرفت ! یا کد غیر معمول....
جوابی که دوستمون دادن فهمیدم. یکم سر این قضیه گیج شدم چون تو آموزشی که خوندم خیلی توابع هم از Return استفاده نکرده. و هنوز دقیقا نمیدونم تو چه تابعی باید از ریترن استفاده کرد و تو چه تابعی نباید استفاده کرد!
باید یکم کدها رو دوباره بشینم تو کلاس بررسی کنم
ممنون از همه عزیزانی که کمکم کردند