PDA

View Full Version : سوال: ایا یه متغیر تو کلاس میتونه 2 تا مقدار داشته باشه؟



mosi2007
جمعه 08 اردیبهشت 1391, 21:43 عصر
سلام
دوستان به این کد بی زحمت یه نگاهی بندازید


<?php
class MyClass
{
public $prop1 = "";
public function setProperty($newval)
{
$this->prop1 = $newval;
}
public function getProperty()
{
return $this->prop1 . "<br />";
}
}
// Create two objects
$obj1 = new MyClass;
$obj2 = new MyClass;

// Set new values for both objects
$obj1->setProperty("I'm one!");
$obj2->setProperty("I 'm two!");
// Output both objects' $prop1 value
echo $obj1->getProperty();
echo $obj2->getProperty();
?>

خروجی

I'm one!
I 'm two!

چرا وقتی که این مقدار رو برای کلاس فرستادیم



$obj2->setProperty("I 'm two!");


این مقدار از بین نرفت



$obj1->setProperty("I'm one!");


مگه یه متغیر میتونه دو تا مقدار داشته باشه ؟؟؟

MMSHFE
شنبه 09 اردیبهشت 1391, 12:29 عصر
نه عزیز، اگه دقت کنید مقدار I'm two رو برای شئ obj2 فرستادین نه obj1 و هرکدوم از این اشیاء متغیر prop1 مخصوص به خودشون رو دارن. بنابراین مقدار I'm one توی متغیر obj1->prop1 و مقدار I'm two توی متغیر obj2->prop1 ذخیره شده. دقیقاً مثل اشیاء در دنیای واقعی. برای مثال، هر انسانی خاصیتی به نام name داره ولی name یکنفر ممکنه ali باشه و یکی دیگه، reza و درنتیجه، وقتی مثلاً فرزند دوم یک خانواده بدنیا میاد و اسمش رو رضا میگذارن، ربطی به اسم فرزند اول که علی هست نداره. درسته که هر دو مورد «رضا» و «علی» خاصیت name نام دارن، ولی مربوط به اشیاء مختلفی هستن و درنتیجه تداخلی پیش نمیاد. شما وقتی کلاس تعریف میکنید، درحقیقت دارین ساختار رو مشخص میکنید که توی این ساختار، متغیرها (فیلدها) مشخص کننده خصوصیات و توابع (متدها) مشخص کننده رفتارهای اون ساختار هستن ولی این ساختار به تنهایی به درد نمیخوره و باید ازروی اون شئ ایجاد بشه. مثلاً اگه تا فردا هم بیایم خواص «سیب» رو توصیف کنیم، تا وقتی که یک سیب نداشته باشیم که بخوریم، سیر نمیشیم. اینجاست که اهمیت اشیاء مشخص میشه. اشیاء از روی کلاسها تعریف میشن و تمام ساختاری که اون کلاس تعریف کرده رو دارن (شامل خصوصیات و رفتارها) ولی هر شئ، خصوصیات و رفتار خاص خودش رو داره. مثلاً وقتی تابع setProperty شئ obj2 رو صدا میزنیم، متغیر prop1 همون شئ مقداردهی میشه و ربطی به تابع setProperty شئ obj1 که متغیر prop1 اون شئ رو مقداردهی میکنه نداره. درست مثل خاصیتها و رفتارهای افراد مختلف که ممکنه خاصیتها و رفتارها مشابهی داشته باشن (ازنظر نوع) ولی هرکدوم مربوط به یک فرد (شئ) خاص میشن. برای مثال، اگه «علی» به شما لگد بزنه، ربطی به «رضا» نداره، هرچند علی و رضا هردو دارای قابلیتی به اسم «لگد زدن» باشن!
خودمونیم عجب مثالی زدم!!!
موفق باشید.

Hamid.RDN
یک شنبه 10 اردیبهشت 1391, 17:42 عصر
مهندس لباس و رنگ لباس واسه مثال زدن بهتر نبود؟ :خجالت:

MMSHFE
یک شنبه 10 اردیبهشت 1391, 23:36 عصر
اونم ميشد ولي اين يكي ملموس تر بود!