ابجكت ها :
ابجكت چيست ؟ مجموعه اي از متغييرها و توابع است كه از يك الگوي خاص به نام كلاس ساخته شده اند .
اما كلاس ها چي هستن ؟ فرض كنيد ما يك شركت داريم كه اين شركت از بخش هاي مختلفي تشكيل شده است حال ما در هربخش احتياج داريم كه هر ماه يك گزارش مالي بگيريم ! ما اينجا دو كار ميتونيم بكنيم هم ميتونيم براي هربخش چند نفر بزاريم و انها گزارش مالي را تهيه كنند و هر ماه تحويل دهند در اين صورت در هربخش شلوغي و همچنين كارمند بيشتري نيازمنديم ! راه ديگر اينست كه يك قسمت به عنوان اتاق گزارش مالي درست كنيم و هر بخش داده هاي خود را به اين قسمت بدهيم و گزارش مالي خود را دريافت كنيم
در اين روش هم بخش ها منظم تر خواهند بود و هم ديگر احتياج به كارمند اضافي نداريم .
در اينجا ابجكتها نقش كارمند در بخش گزارش مالي را بر عهده دارند فكر ميكنم مفهوم كلاس را درك كرده باشيد .
بزاريد شكل كلي يك كلاس را برايتان نشان دهم
پروپرتي ها:
آبجكتها به متغيير هاي خاصي دسترسي دارند كه به آنها پروپرتي ميگويند اين پروپرتي ها ميتونند در هرجاي بدنه كلاس باشند اما براي اينكه كد مون مرتب باشه بهتره كه در بالاي كلاس تعريف بشن. بگزاريد با مثالي ديگر بيشتر توضيح بدم :
ديديم كه براي اختصاص دادن يك كلاس به يك متغيير اينگونه عمل كرديم
علامت <- به شما اجازه ميده تا به متغيير هاي درون يك كلاس دسترسي داشته باشيد و اونها رو تغيير بديد همونطور كه در كد ميبينيد ما در خط ششم متغيير name در ابجكت يك رو مساوي علي قرار داديم كه باعث عوض شدن متغيير ميشه همچنين براي چاپ خروجي نيز به همين صورت عمل كرديم ولي بدون علامت مساوي
متد ها :
متدها در واقع توابعي هستند كه داخل يك كلاس وجود دارند بزاريد با يك مثال واضح تر بيان كنم :
همونطور كه ميبينيد يك متد خيلي شبيه به تابع معمولي هستش با اين تفاوت كه متد هميشه داخل كلاس تعريف ميشه در ضمن شما ميتونيد با علامت <- يك متد ابجكت را صدا بزنيد
مهمتر اينكه متدها به اعضاي متغيير هاي يك كلاس دسترسي دارند
شما همين الان ديديد كه چطوري به يك پروپرتي از خارج يك آبجكت دسترسي پيدا كنيم اما چطوري يك آبجكت ميتونه خودشو به اصطلاح Return كنه :
يك عبارت مخصوص رو بكار برديم به اسم this$ تا كلاس به آبجكت كنوني Return بشه شما با تركيب اين عبارت با علامت <- ميتونيد داخل يك كلاس به هر پروپرتي و متدي كه بخواهيد دسترسي داشته باشيد حالا اگه بخواهيم به پروپرتي name در همه آبجكت هاي كلاسمون مقدار خاصي بديم ميتونيم به اين صورت عمل كنيم :
همونطور كه ديديد اومديم يه تابع تعريف كرديم كه اسم رو بتونيم همه جا تغيير بديم واز دستورthis براي عوض كردنش داخل كلاس استفاده كرديم.
در ابتدا اسم ما مهدي بود ولي بعد از اينكه تابع عوض كردن اسم رو بكار برديم متد صدا زده شد و اسم تغيير كرد
كد بالا رو ميتونستيم بصورت ساده تر وكمي پيچيده تر هم بنويسيم :
همونطور كه ديديد اومديم و يه متد يا تابع با همون اسم كلاس خودمون ساختيم و مقدار ديفالتش رو روي مهدي گزاشتيم كه اگر هيچي وارد نشد اين عبارت چاپ بشه
حالا در پايين در خط دهم و يازدهم هنگامي كه ابجكت يك و ابجكت دو رو به كلاس ها اختصاص ميديم همون موقع هم مقدار اسم رو عوض ميكنيم و مشكلي پيش نمياد كلاسمون هنگامي كه متد صدا زده ميشه خود به خود صدا زده ميشه.
حال بزاريد با عبارت ديگري به اسم extends اشنا بشيم اين عبارت به اين معني ارث بردن است به اين مثال توجه كنيد :
همونطور كه ميبينيد ما كلاس دو رو تنظيم كرديم تا از كلاس يك ارث بري كنه وهمه متد هاي كلاس يك را خواهد داشت
ما ميتونيم اينجا داخل كلاس دو يك تابع با اسم sayHello بسازيم و بگيم عبارت I dont know my name رو چاپ كنه در اينصورت اگه حتي در خط 12 ام ما يك عبارت براي تعويض اسم بديم تاثيري نميكنه و همون عبارت I dont know my name رو چاپ ميكنه راه ديگري هم هست و اون چاپ هردو كلاس باهم هست :
همونطور كه ميبينيد دستور ( متد:: وارث ) ما ميتونيم هر متدي رو كه ما تغييرش داديم دوباره صدا بزنيم چون در كلاس دو ما متد sayHello رو تغيير داديم با اين دستور اونو دوباره برگردونديم .
خوب اين درس هم تموم شد احتمالا بعضي اشكالات هم داره كه با كمك شما رفع ميشه درضمن من بسياري از مثال هاي خود كتاب رو نياوردم چون بسيار گيج كننده بود حتا خودمم بهشون نگاه نكردم
-----------
مهدی صفری
ابجكت چيست ؟ مجموعه اي از متغييرها و توابع است كه از يك الگوي خاص به نام كلاس ساخته شده اند .
اما كلاس ها چي هستن ؟ فرض كنيد ما يك شركت داريم كه اين شركت از بخش هاي مختلفي تشكيل شده است حال ما در هربخش احتياج داريم كه هر ماه يك گزارش مالي بگيريم ! ما اينجا دو كار ميتونيم بكنيم هم ميتونيم براي هربخش چند نفر بزاريم و انها گزارش مالي را تهيه كنند و هر ماه تحويل دهند در اين صورت در هربخش شلوغي و همچنين كارمند بيشتري نيازمنديم ! راه ديگر اينست كه يك قسمت به عنوان اتاق گزارش مالي درست كنيم و هر بخش داده هاي خود را به اين قسمت بدهيم و گزارش مالي خود را دريافت كنيم
در اين روش هم بخش ها منظم تر خواهند بود و هم ديگر احتياج به كارمند اضافي نداريم .
در اينجا ابجكتها نقش كارمند در بخش گزارش مالي را بر عهده دارند فكر ميكنم مفهوم كلاس را درك كرده باشيد .
بزاريد شكل كلي يك كلاس را برايتان نشان دهم
PHP:
Class First_class
{
//اين شكل كلي از يك كلاس هستش
}
آبجكتها به متغيير هاي خاصي دسترسي دارند كه به آنها پروپرتي ميگويند اين پروپرتي ها ميتونند در هرجاي بدنه كلاس باشند اما براي اينكه كد مون مرتب باشه بهتره كه در بالاي كلاس تعريف بشن. بگزاريد با مثالي ديگر بيشتر توضيح بدم :
PHP:
Class f_class {
var $name="mehdi";
}
$obj1=new f_class();
$obj2=new f_class();
$obj1->name="Ali";
print "$obj1->name<br>";
print"$obj2->name<br>";
PHP:
$obj1=new f_class();
PHP:
Print " $obj1->name ";
متدها در واقع توابعي هستند كه داخل يك كلاس وجود دارند بزاريد با يك مثال واضح تر بيان كنم :
PHP:
class f_class
{
var $name;
function sayHello()
{
Print "Hello World";
}
}
$obj1=new f_class();
$obj1->sayHello();
// Hello World چاپ ميشود
مهمتر اينكه متدها به اعضاي متغيير هاي يك كلاس دسترسي دارند
شما همين الان ديديد كه چطوري به يك پروپرتي از خارج يك آبجكت دسترسي پيدا كنيم اما چطوري يك آبجكت ميتونه خودشو به اصطلاح Return كنه :
PHP:
class f_class
{
var $name="mehdi";
function sayHello()
{
Print "Hello My names $this->name<br>";
}
}
$obj1=new f_class();
$obj1->sayHello();
// Hello My names mehdi چاپ ميكنه
PHP:
class f_class {
var $name="mehdi";
function setName($n){
$this->name=$n; }
function sayHello()
{
Print "Hello My names $this->name<br>";
}
}
$obj1=new f_class();
$obj1->setName("Ali");
$obj1->sayHello();
// Hello My names Ali چاپ ميكنه
در ابتدا اسم ما مهدي بود ولي بعد از اينكه تابع عوض كردن اسم رو بكار برديم متد صدا زده شد و اسم تغيير كرد
كد بالا رو ميتونستيم بصورت ساده تر وكمي پيچيده تر هم بنويسيم :
PHP:
class first_class {
var $name;
function first_class( $n="mehdi" ) {
$this->name = $n;
}
function sayHello() {
print "hello my name is $this->name<BR>";
}
}
$obj1 = new first_class("َAli");
$obj2 = new first_class("Asef");
$obj1->sayHello();
// hello my name is Ali چاپ ميكنه
$obj2->sayHello();
// hello my name is Asef چاپ ميكنه
حالا در پايين در خط دهم و يازدهم هنگامي كه ابجكت يك و ابجكت دو رو به كلاس ها اختصاص ميديم همون موقع هم مقدار اسم رو عوض ميكنيم و مشكلي پيش نمياد كلاسمون هنگامي كه متد صدا زده ميشه خود به خود صدا زده ميشه.
حال بزاريد با عبارت ديگري به اسم extends اشنا بشيم اين عبارت به اين معني ارث بردن است به اين مثال توجه كنيد :
PHP:
class first_class{
var $name = "mehdi";
function first_class( $n ) {
$this->name = $n;
}
function sayHello(){
print "Hello my name is $this->name<br>";
}
}
class second_class extends first_class {
}
$test = new second_class("son of mehdi");
$test->sayHello();
// outputs "Hello my name is son of mehdi"
ما ميتونيم اينجا داخل كلاس دو يك تابع با اسم sayHello بسازيم و بگيم عبارت I dont know my name رو چاپ كنه در اينصورت اگه حتي در خط 12 ام ما يك عبارت براي تعويض اسم بديم تاثيري نميكنه و همون عبارت I dont know my name رو چاپ ميكنه راه ديگري هم هست و اون چاپ هردو كلاس باهم هست :
PHP:
class first_class {
var $name = "harry";
function first_class( $n ) {
$this->name = $n;
}
function sayHello() {
print "Hello my name is $this->name<br>";
}
}
class second_class extends first_class {
function sayHello() {
print "I'm not going to tell you my name -- ";
first_class::sayHello();
}
}
$test = new second_class("son of harry");
$test->sayHello();
// "I'm not going to tell you my name -- Hello my name is son of harry" چاپ ميكنه
خوب اين درس هم تموم شد احتمالا بعضي اشكالات هم داره كه با كمك شما رفع ميشه درضمن من بسياري از مثال هاي خود كتاب رو نياوردم چون بسيار گيج كننده بود حتا خودمم بهشون نگاه نكردم
-----------
مهدی صفری