<?php
class f_class
{
    var $name = "ali";
    function setName($n)
    {
        $this->name = $n;
    }
    function sayHello()
    {
        print "Hello My names $this->name<br>";
    }
}
$obj1 = new f_class();
$obj1->setName("ahmad");
$obj1->sayHello();
?>


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

بزارید شکل کلی یک کلاس را برایتان نشان دهم:

Class First_class
{
//این شکل کلی از یک کلاس هستش
}

پروپرتی ها:

آبجکتها به متغییر های خاصی دسترسی دارند که به آنها پروپرتی میگویند این پروپرتی ها میتونند در هرجای بدنه کلاس باشند اما برای اینکه کد مون مرتب باشه بهتره که در بالای کلاس تعریف بشن. بگزارید با مثالی دیگر بیشتر توضیح بدم :

Class f_class {
var $name="ali";
}
$obj1=new f_class();
$obj2=new f_class();
$obj1->name="ahmad";
print "$obj1->name<br>";
print"$obj2->name<br>";

دیدیم که برای اختصاص دادن یک کلاس به یک متغییر اینگونه عمل کردیم.

$obj1=new f_class();

متد ها :

متدها در واقع توابعی هستند که داخل یک کلاس وجود دارند بزارید با یک مثال واضح تر بیان کنم :

class f_class
     {
var $name;
function sayHello() 
 {
Print "Hello World";
}
     }
$obj1=new f_class();
$obj1->sayHello();
// Hello World  چاپ میشود

همونطور که میبینید یک متد خیلی شبیه به تابع معمولی هستش با این تفاوت که متد همیشه داخل کلاس تعریف میشه در ضمن شما میتونید با علامت <- یک متد ابجکت را صدا بزنید مهمتر اینکه متدها به اعضای متغییر های یک کلاس دسترسی دارند شما همین الان دیدید که چطوری به یک پروپرتی از خارج یک آبجکت دسترسی پیدا کنیم اما چطوری یک آبجکت میتونه خودشو به اصطلاح Return کنه :

class f_class
     {
var $name="ali";
function sayHello() 
 {
Print "Hello My names $this->name<br>";
}
     }
$obj1=new f_class();
$obj1->sayHello();
// Hello My names ali    چاپ میکنه

یک عبارت مخصوص رو بکار بردیم به اسم this$ تا کلاس به آبجکت کنونی Return بشه شما با ترکیب این عبارت با علامت <- میتونید داخل یک کلاس به هر پروپرتی و متدی که بخواهید دسترسی داشته باشید حالا اگه بخواهیم به پروپرتی name در همه آبجکت های کلاسمون مقدار خاصی بدیم میتونیم به این صورت عمل کنیم :

class f_class     {
var $name="ali";
function setName($n){
$this->name=$n;      }
function sayHello() 
 {
Print "Hello My names $this->name<br>";
}
     }
$obj1=new f_class();
$obj1->setName("ahmad");
$obj1->sayHello();
// Hello My names ahmad   چاپ میکنه

همونطور که دیدید اومدیم یه تابع تعریف کردیم که اسم رو بتونیم همه جا تغییر بدیم واز دستورthis برای عوض کردنش داخل کلاس استفاده کردیم.
در ابتدا اسم ما مهدی بود ولی بعد از اینکه تابع عوض کردن اسم رو بکار بردیم متد صدا زده شد و اسم تغییر کرد کد بالا رو میتونستیم بصورت ساده تر وکمی پیچیده تر هم بنویسیم :

class first_class {
 var $name;
 function first_class( $n="ali" ) {
 $this->name = $n;
 }
 function sayHello() {
 print "hello my name is $this->name<BR>";
 }
 }
 $obj1 = new first_class("َahmad");
 $obj2 = new first_class("zahra");
 $obj1->sayHello();
 // hello my name is ahmad   چاپ میکنه
 $obj2->sayHello();
 // hello my name is zahra  چاپ میکنه

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

 class first_class{
 var $name = "ali";
 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 ali");
$test->sayHello();
 // outputs "Hello my name is son of ali"

همونطور که میبینید ما کلاس دو رو تنظیم کردیم تا از کلاس یک ارث بری کنه وهمه متد های کلاس یک را خواهد داشت
ما میتونیم اینجا داخل کلاس دو یک تابع با اسم sayHello بسازیم و بگیم عبارت I dont know my name رو چاپ کنه در اینصورت اگه حتی در خط 12 ام ما یک عبارت برای تعویض اسم بدیم تاثیری نمیکنه و همون عبارت I dont know my name رو چاپ میکنه راه دیگری هم هست و اون چاپ هردو کلاس باهم هست :

	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" چاپ میکنه 

همونطور که میبینید دستور ( متد:: وارث ) ما میتونیم هر متدی رو که ما تغییرش دادیم دوباره صدا بزنیم چون در کلاس دو ما متد sayHello رو تغییر دادیم با این دستور اونو دوباره برگردوندیم .

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *