در این آموزش می خواهیم با مفاهیم اولیه برنامه نویسی شی گرا در PHP آشنا شویم. شی گرایی به ما کمک میکند تا برنامهنویسی را به روابط انسانی و قابل درک نزدیک کنیم. در این آموزش سعی شده تا مفاهیم شی گرایی در قالب مثال های ساده بیان شود تا درک آنها آسان تر باشد.
[divider]
تعریف کلاس
class User{ public $name; public $family; public $phone; }
با توجه به قطعه کد بالا، User نام کلاس و متغیرهای name و family و phone خصوصیات User هستند. برای اینکه بتوانید از کلاس خود شی بسازید، می توانید کلاس خود را در یک فایل php ذخیره کنید و در صفحاتی که به آن نیاز دارید، توسط توابع include و require_once کلاس خود را فراخوانی کرده و امکان استفاده از کلاس خود را میسر سازید.
include 'MyClass.php';
[divider]
ساخت شیء از کلاس
$user = new User;
[divider]
مقداردهی به متغیرهای کلاس
$user->name = "Yusef"; $user->family = "Shiri"; $user->phone = 88888888;
[divider]
افزودن سازنده و مخرب به کلاس
منظور از سازنده constructor است. یعنی تابعی در داخل کلاس که در زمان ساخت شی از کلاس فراخوانی میشود. در مواقعی که لازم است Object ساخته شده دارای مقادیر اولیه باشد و یا در زمان ایجاد آن عملیاتی انجام شود(مثلا Log این رویداد در جایی ثبت شود یا اطلاعاتی از محلی دیگر دریافت شود)، این تابع فراخوانی خواهد شد. به همین ترتیب destruct نیز در زمانی فراخوانی میشود که Object ساخته شده دیگر مورد استفاده قرار نگیرد. مثلا وقتی در یک تابع یک Objectاز کلاسی بسازیم، پس از اتمام عملیات موجود در فانکشن، دیگری نیازی به متغیرهایی که داخلش تعریف شده نیست. garbage Collector در چنین مواقعی ماموریت دارد تا متغیرهایی که دیگر مورد استفاده قرار نمیگیرند را حذف کند تا فضای استفاده شدهی آنها آزاد شود. چنانچه نیاز باشد که Object ساخته شده از کلاسمان قبل از حذف شدن عملیاتی را انجام دهد، به کمک تابع destruct میتواند این کار را انجام دهد.
class User{ public $name; public $family; public $phone; public function __construct() { //عملیاتی که در زمان ایجاد شی از کلاس اجرا می شوند } public function __destruct() { //عملیاتی که در زمان نابود شدن شی ای از کلاس اجرا می شوند } }
[divider]
کلاس با چند سازنده
در برخی مواقع نیاز داریم که Instance هایی که از کلاسمان میسازیم به چند طریق قابل ساخت باشند. در چنین مواقعی باید چندین construct برای کلاس بنویسیم.
class user{ public $name; public $family; public $phone; public function __construct() { echo "Hello World!"; } public function __construct1($value) { $this->name = "Yusef"; } public function __construct2($value1, $value2) { $this->name = "Yusef"; $this->family = "Shiri"; } }
توجه داشته باشید که this اشاره گری به کلاس بوده و به کمک آن می توان به متدها و متغیرهای داخل کلاس دسترسی پیدا کرد.
[divider]
ارث بری(Inheritance)
ارثبری معمولا زمانی استفاده میشود که Class هایی با خصوصیات مشترک و البته خصوصیات منحصر به فرد داشته باشیم. در این حالت خصوصیات مشترک را در کلاس Parent قرار میدهیم و کلاسهایی که میخواهند از این کلاس پدر ارثبری کنند، میتوانند فقط خصوصیات منحصر به فرد خود را در داخل کلاسشان تعریف کنند.
class person{ public $name; public $family; } class user extends person{ public $phone; public function __construct() { parent::__construct(); } }
[divider]
رابط(Interface)
عملا نوعی وضع قوانین در کلاسها است. کلاسها از interface ها ارثبری نمیکنند بلکه از آنها تبعیت میکنند. این تبعیت با پیادهسازی(implement) اتفاق میافتد. یعنی وقتی کلاسی از یک interface تبعیت کند، باید حتما شامل توابعی باشد که در interface تعریف شدهاند. دقت داشته باشید که توابع در interface دارای بدنه(پیادهسازی) نیستند و فقط نام، سطح دسترسی تابع و ورودی و خروجی آن مشخص میشوند.
interface Mail{ public function sendMail(); } class Report implements Mail{ public function sendMail(){ //بدنهی تابع ارسال ایمیل اینجا نوشته میشود. } }
در مثال بالا، اگر کلاس Report تابع sendMail نداشته باشد، اجرای کد با خطا روبرو خواهد شد.
[divider]
کپی کردن Object
زمانی که نیاز به کپی کردن یک Object داشتید، میتوانید از نمونه کد زیر استفاده کنید. در این صورت Object کپی، شامل تمام اطلاعات Object اصلی خواهد بود.
$copy_of_object = clone $object;
[divider]
استفاده از متغیرهای global در داخل کلاس
$test = "Yusef"; class user{ public $name; public function __construct() { global $test; $this->name = $test; } public function PrintName() { echo $this->name; } }
مفاهیمی که در این مطلب عنوان شد، مقدمهای بر برنامهنویسی شی گرا در PHP بود. با تکرار و تمرین موارد فوق میتوانید حرفهای تر برنامه نویسی کنید.
موفق و پیروز باشید…
ممنون ساده و قابل فهم برای من مبتدی مرسی.
tnx 🙂
very good