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();


برگرفته شده از kelassor.blog.ir

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

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();   

علامت <- به شما اجازه میده تا به متغییر های درون یک کلاس دسترسی داشته باشید و اونها رو تغییر بدید همونطور که در کد میبینید ما در خط ششم متغییر name در ابجکت یک رو مساوی علی قرار دادیم که باعث عوض شدن متغییر میشه همچنین برای چاپ خروجی نیز به همین صورت عمل کردیم ولی بدون علامت مساوی

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

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

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

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

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

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

کل متن بالا توسط آقای مهدی صفری در وب سایت persiantools.com ارائه شده بود .