pedia-learning

ورود

گذرواژه‌تان را فراموش کرده‌اید؟

ثبت نام

ثبت نام
انجمن عمومی گسترش فناوری آگو

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

ارسال پاسخ 
 
امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
برنامه نویسی شیء گرا در php قسمت اول
04-14-2014, 02:42 PM
ارسال: #1
برنامه نویسی شیء گرا در php قسمت اول
برای بیشتر برنامه نویسان php برنامه نویسی شیء گرا یک مفهوم ترسناک و سرشار از کدهای پیچیده تلقی میشه.برنامه نویسی شیء گرا در اصل یک شیوه برنامه نویسی که یک سری اعمال رو داخل کلاسها دسته بندی میکنه برای انسجام بیشتر .در ادامه به مقدمات برنامه نویسی شیء گرا در php میپردازیم.
درک مفهوم برنامه نویسی شیء گرا

برنامه نویسی شیء گرا یک شیوه کد نویسی است که به برنامه نویس ها اجازه میده کارهای مشابه رو در ” کلاسها ” جمع آوری کنن.این روش به ما کمک میکنه تا با اصول DRY (Don`t repeat yourself) کد نویسی کنیم و همچنین در نگهداری کدها یه ما کمک میکنه.
DRY : به این معنیست که در یک پروژه برای هر عمل فقط یک بار کد بنویسید.
یکی از اصلی ترین مزیتهای DRY اینه که اگر نیاز باشه قسمتی از پروژه تغییر پیدا کنه معمولا فقط یک قسمت از کدها باید ویرایش بشه.یکی از بزرگترین کابوسهای برنامه نویس ها نگهداری از کدهای نوشته شده است به این معنی که هنگامی که یک سری از کارها به بارها و بارها انجام میشه و هر تغییری که نیاز باشه در کدها داده بشه باید تمام قسمتهای برنامه چک بشه و تغییر داده بشه.
برنامه نویسی شیء گرا سک ترس رو در برنامه نویسها ایجاد میکنه چون یک ساختار جدید از کد نویسی رو معرفی میکنه یا نسبت به برنامه نویسی تابعی (procedural) یا خطی یک ساختار پیچیده تر رو به نمایش میذاره.
به هر حال وقتی از نزدیک به برنامه نویسی شیء گرا نگاه کنیم میبینیم که خیلی ساده تر و راحت تر میتونیم به اهداف مون برسیم.
مفهوم شیء( Object) و کلاس (class)

قبل از اینکه بتونیم عمیقتر به نکات ظریف برنامه نویسی شیء گرا برسیم لازمه که با تفاوت بین کلاس و شیء آشنا بشیم.
تشخیص تفاوت بین کلاس و شیء

یک کلاس رو میتونیم به ” نقشه یک ساختمان” تشبیه کنیم.این نقشه شکل ساختمان رو روی کاغذ تعریف میکنه.ارتباطات بین اجزای مختلف این ساختمان هم باید در نقشه به صورت کامل بیان بشه.
یک شیء در واقع ” یک ساختمان واقعی” به حساب میاد که از روی نقشه (کلاس) ساخته شده.سازه های استفاده شده داخل این ساختمان مثل آهن،چوب و … اگر بدون در نظر گرفتن نقشه به هم پیوند داده بشن فقط مقدار زیادی از مصالح بی کاربرد هستند.به هر حال هنگامی که با یک نقشه خوب با هم ترکیب میشن یک ساختمان خوب و مفید ساخته خواهد شد.
بیشتر از یک ساختمان (شیء) میتونه ساخته بشه از یک نقشه(کلاس) .
یک شیء یک سری خواص (property) داره و میتونه اعمالی(method) رو انجام بده.
شیء ساختمان یکی از کارهایی که انجام میده محافظت از ما در مقابل باد و بارونه.(Method)
شیء ساختمان یک از خواصی که داره رنگ نمای بیرونی ساختمانه.(Property)
ساختار کلاس

به صورت زیر میتونیم یک کلاس جدید بسازیم :

کد php:
class MyClass
{
// Class properties and methods go here


با استفاده از کلمه کلیدی class سپس نام کلاس و آکولاد بازو بسته!!
بعد از ساخت کلاس با استفاده از کلمه کلیدی new میتونیم این کلاس رو داخل یک متغیر بریزیم.

کد php:
$obj = new MyClass


برای مشاهده محتویات داخل یک کلاس از تابع var_dump() استفاده میکنیم :

کد php:
var_dump($obj

تعریف Properties در یک کلاس

داده های یک کلاس در Property ها یا متغیرهای مخصوص کلاس نگهداری میشن.اینها دقیقا مشابه به متغیرهای معمولی عمل میکنن با این تفاوت که دسترسی به این متغیرها باید به واسطه شیء باشه. property ها در کلاس از قواعد کلی نام گذاری متغیر ها تبعیت میکنن.

کد php:
class MyClass
{
public 
$prop1 "I'm a class property!";
}
$obj = new MyClass;
var_dump($obj); 

کلمه کلیدی public نحوه دسترسی به متغیر $porp1 رو در خارج از کلاس مشخص میکنه.در بخشهای بعدیدر مورد نحوه دسترسی ها در شیء گرایی بیشتر صحبت میکنیم.
برای دسترسی به متغیرهای داخل کلاس پس از اینکه یک شیء از یک کلاس ایجاد کردیم به صورت زیر متغیر مورد نظر رو فراخوانی میکنیم :

کد php:
echo $obj->prop1 

کاراکترهای -> به منظور دسترسی به اعضای یک کلاس استفاده میشن.در کد بالا یعنی از شیء $obj متغیر $prop1 رو نمایش بده.میبینید که بعد از -> برای استفاده از متغیر $prop کاراکتر $ حذف شده.
پس از اجرای کد بالا خروجی به شکل زیر خواهیم داشت

I’m a class property!


متدهای یک کلاس

متد در واقع یک تابع است.هنگامی که یک تابع رو درون کلاس مینویسیم به اصطلاح بهش میگیم متد. اقداماتی که یک شیء انجام میده رو داخل متدها تعریف میکنیم.
برای نمونه در کلاس بالا یک متد مینویسیم که مقدار متغیر(خاصیت یا property ) داخل کلاس رو تغییر بده.

کد php:
<?php

class MyClass
{
public 
$prop1 "I'm a class property!";

public function 
setProperty($newval)
{
$this->prop1 $newval;
}

public function 
getProperty()
{
return 
$this->prop1 "<br />";
}
}
$obj = new MyClass;
echo 
$obj->prop1;
?>

در کد بالا میبینیم که ما نیاز داریم به متغیر $prop در متدهای setProperty و getProperty دسترسی داشته باشیم.با استفاده از کلیمه کلیدی $this میتونیم به اعضای داخل کلاس جاری دسترسی داشته باشیم.مثلا در کد بالا برای استفاده از متغیر $prop1 داخل متد getProperty باید از دستور

$this->prop1

استفاده کنیم.این دستور به این معنیه که از همین(this) کلاس متغیرprop1 رو فراخوانی کن.
برای فراخوانی یک متد بعد از ساخت یک شیء از کلاس مثل فراخوانی متغیرهای یک کلاس باید عمل کنیم.

کد php:
<?php

class MyClass
{
public 
$prop1 "I'm a class property!";

public function 
setProperty($newval)
{
$this->prop1 $newval;
}

public function 
getProperty()
{
return 
$this->prop1 "<br />";
}
}

$obj = new MyClass;

echo 
$obj->getProperty(); // Get the property value

$obj->setProperty("I'm a new property value!"); // Set a new one

echo $obj->getProperty(); // Read it out again to show the change

?>

پس از اجرای کد بالا خروجی به شکل زیر خواهید داشت:


I'm a class property!
I'm a new property value!

یکی از قدرت های برنامه نویسی شیء گرا هنگامی مشاهده میشه که از یک کلاس چند نمونه(شیء) ایجاد میشه.

کد php:
<?php

class MyClass
{
public 
$prop1 "I'm a class property!";

public function 
setProperty($newval)
{
$this->prop1 $newval;
}

public function 
getProperty()
{
return 
$this->prop1 "<br />";
}
}

// Create two objects
$obj = new MyClass;
$obj2 = new MyClass;

// Get the value of $prop1 from both objects
echo $obj->getProperty();
echo 
$obj2->getProperty();

// Set new values for both objects
$obj->setProperty("I'm a new property value!");
$obj2->setProperty("I belong to the second instance!");

// Output both objects' $prop1 value
echo $obj->getProperty();
echo 
$obj2->getProperty();

?>

خروجی

I'm a class property!
I'm a class property!
I'm a new property value!

متدهای جادویی در php

در مورد این متد ها قبلا به صورت مفصل بحث کردیم که میتونید در اینجا مشاهده کنید.
ارث بری

کلاسها میتونن متدها و متغیرها رو از بقیه کلاسها با استفاده از کلمه کلیدی extends به ارث ببرن.

کد php:
<?php

class MyClass
{
public 
$prop1 "I'm a class property!";

public function 
__construct()
{
echo 
'The class "'__CLASS__'" was initiated!<br />';
}

public function 
__destruct()
{
echo 
'The class "'__CLASS__'" was destroyed.<br />';
}

public function 
__toString()
{
echo 
"Using the toString method: ";
return 
$this->getProperty();
}

public function 
setProperty($newval)
{
$this->prop1 $newval;
}

public function 
getProperty()
{
return 
$this->prop1 "<br />";
}
}

class 
MyOtherClass extends MyClass
{
public function 
newMethod()
{
echo 
"From a new method in " __CLASS__ ".<br />";
}
}

// Create a new object
$newobj = new MyOtherClass;

// Output the object as a string
echo $newobj->newMethod();

// Use a method from the parent class
echo $newobj->getProperty();

?>

خروجی
The class "MyClass" was initiated!
From a new method in MyOtherClass.
I'm a class property!
The class "MyClass" was destroyed.

برای تغییر رفتار متغیر یا یک متد که از کلاس دیگه ای به ارث برده شده میتونیم با دوباره نوشتن متد یا متغیر مورد نظر رفتارش رو تغییر بدیم.
به مثال زیر دقت کنید و اجراش کنید تا بیشتر متوجه منظور بشید :

کد php:
<?php

class MyClass
{
public 
$prop1 "I'm a class property!";

public function 
__construct()
{
echo 
'The class "'__CLASS__'" was initiated!<br />';
}

public function 
__destruct()
{
echo 
'The class "'__CLASS__'" was destroyed.<br />';
}

public function 
__toString()
{
echo 
"Using the toString method: ";
return 
$this->getProperty();
}

public function 
setProperty($newval)
{
$this->prop1 $newval;
}

public function 
getProperty()
{
return 
$this->prop1 "<br />";
}
}

class 
MyOtherClass extends MyClass
{
public function 
__construct()
{
echo 
"A new constructor in " __CLASS__ ".<br />";
}

public function 
newMethod()
{
echo 
"From a new method in " __CLASS__ ".<br />";
}
}

// Create a new object
$newobj = new MyOtherClass;

// Output the object as a string
echo $newobj->newMethod();

// Use a method from the parent class
echo $newobj->getProperty();

?>

خروجی

A new constructor in MyOtherClass.
From a new method in MyOtherClass.
I'm a class property!
The class "MyClass" was destroyed.

یادآوری : __CLASS__ یک ثابت هست که نام کلاس جاری رو برمیگردونه.

دسترسی به اعضای کلاس پدر

برای دسترسی به اعضای کلاس پدر باید از کلمه کلیدی parent استفاده کنیم.

کد php:
class MyOtherClass extends MyClass
{
public function 
__construct()
{
parent::__construct(); // فراخوانی سازنده کلاس پدر
echo "A new constructor in " __CLASS__ ".<br />";
}

public function 
newMethod()
{
echo 
"From a new method in " __CLASS__ ".<br />";
}


استفاده از parent همیشه با دونقطه (:Smile همراه خواهد بود.

نحوه دسترسی به متدها و خواص(property) های یک کلاس

برای کنترل بیشتر روی اشیاء میتونیم نحوه دسترسی به متدها و متغیرهای یک کلاس رو در خارج از کلاس مشخص کنیم. سه نوع دسترسی برای متغیرها و متدهای یک کلاس وجود داره.
public : متغیرها و متدهایی که public هستند در خارج از کلاس هم میتونیم بهشون دسترسی داشته باشیم.
protected : متغیرها و متدهایی که به صورت protected تعریف بشن فقط در کلاس جاری و در کلاسهای فرزند قابل دسترسی هستند .
private : متغیر ها و متدهای private فقط داخل کلاس جاری در دسترس هستند.
این سطح دسترسی ها برای اینه که ناخواسته (یا خواسته) اجازه نداشته باشیم بعضی از متدها یا متغیر های کلاس رو تغییر بدیم.
ممکنه از خودتون بپرسید که این دسترسی ها به چه دردی میخوره چون خودم میدونم کلاسی که نوشتم رو چجوری استفاده کنم و از چه متدهاییش نباید استفاده کنم؟جواب این سوال اینه که شما فکر کنید قرار یک کلاس برای انجام کارهای معمول با دیتابیس میسازید.این کلاس متغیری داره برای نگهداری کانکشن.هنگامی که این متغیر به صورت public تعریف بشه ممکنه کاربران دیگه ای که میخوان از کلاس شما استفاده کنن خواسته یا نا خواسته بخوان این رشته اتصال رو تغییر بدن.در صورتی که این رشته اتصال نباید به صورت عمومی تعریف بشه تا همه بتونن تغیرش بدن.
به مرور و در آموزشهای آبنده که در مورد برنامه نویسی شیء گرا در PHP قرار میدم با این سطح دسترسی ها بیشتر آشنا خواهید شد.

به امید خدا در آینده به ادامه آموزش برنامه نویسی شیء گرا در PHP میپردازیم .

اگر با سوال یا ابهامی در مورد برنامه نویسی شیء گرا برخوردید در قسمت نظرات یا ازطریق ایمیل بپرسید تا جایی که بتونم سعی میکنم راهنمایی تون کنم.
I belong to the second instance!
نقل قول این ارسال در یک پاسخ
ارسال پاسخ 


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان


Persian Translation by MyBBIran.com - Ver: 4.1
Powered by MyBB, © 2002-2024 MyBB Group.
Theme designed by Marvel (Sidebar created by Yaldaram - Yaldaram.com)
Theme Translation by Mt Edition