SlideShare a Scribd company logo
1 of 27
Download to read offline
‫خدا‬ ‫نام‬ ‫به‬
‫در‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬PHP
AMIRSH.NLL@GMAIL.COM
‫مقدمه‬
•‫برنامه‬‫نویسی‬‫شی‬،‫گرا‬‫یا‬‫برنامه‬‫نویسی‬oop،‫یک‬‫روش‬‫یا‬‫سبک‬‫برنامه‬‫نویسی‬‫است‬‫که‬‫در‬‫آن‬
‫توسعه‬‫دهنده‬‫تمامی‬‫متغیرها‬‫و‬‫توابعی‬‫که‬‫در‬‫کنار‬‫هم‬‫عملیاتی‬‫را‬‫انجام‬‫می‬‫دهند‬‫را‬‫در‬‫قالب‬‫یک‬
‫کالس‬‫واحد‬‫سازمان‬‫دهی‬‫می‬‫کند‬.‫الزم‬‫به‬‫توضیح‬‫است‬‫که‬‫تکنیک‬‫برنامه‬‫نویسی‬‫شی‬‫گ‬‫را‬‫به‬
‫مراتب‬‫کارا‬‫و‬‫پیچیده‬‫تر‬‫از‬‫سبک‬‫برنامه‬‫نویسی‬‫مبتنی‬‫بر‬‫تابع‬procedural‫است‬.
‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫برتری‬ ‫دالیل‬
•‫قابلیت‬‫سازمان‬‫دهی‬‫بهینه‬‫تر‬‫کد‬
•‫قابلیت‬‫تقسیم‬‫برنامه‬‫به‬‫برنامه‬‫های‬‫کوچک‬‫تر‬‫اما‬‫مستقل‬.‫برنامه‬‫ی‬‫اصلی‬‫به‬‫صورت‬‫یک‬exe‫در‬‫می‬‫آید‬‫که‬‫دیگر‬
‫قسمت‬‫های‬‫مستقل‬‫برنامه‬‫را‬‫فراخوانی‬‫می‬‫کند‬modularity .
•‫عدم‬‫نیاز‬‫به‬‫نوشتن‬‫کدهای‬‫تکراری‬‫و‬‫قابلیت‬‫هایی‬‫که‬‫قبال‬‫پیاده‬‫سازی‬‫شده‬‫اند‬‫و‬‫صرف‬‫جویی‬‫در‬‫استف‬‫اده‬‫از‬‫منابع‬.
•‫با‬‫این‬،‫وجود‬‫بسیاری‬‫از‬‫توسعه‬‫دهندگان‬‫سعی‬‫می‬‫کنند‬‫در‬‫پروژه‬‫های‬‫کوچک‬‫و‬‫ساده‬‫خود‬‫از‬‫سبک‬‫برنامه‬‫نو‬‫یسی‬
‫مبتنی‬‫بر‬‫تابع‬procedural‫بهره‬‫بگیرند‬.
•‫اما‬‫همین‬‫که‬‫پروژه‬‫بزرگتر‬‫می‬،‫شود‬‫بهتر‬‫است‬‫به‬‫منظور‬‫نوشتن‬‫یک‬‫برنامه‬‫ی‬‫کارآمد‬‫و‬‫رقم‬‫زدن‬‫تجربه‬‫ی‬‫کاربری‬
،‫بهینه‬‫از‬‫تکنیک‬‫برنامه‬‫نویسی‬‫شی‬‫گرا‬‫برای‬‫ساخت‬‫و‬‫توسعه‬‫ی‬‫پروژه‬‫استفاده‬‫شود‬.
‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬
•‫در‬‫گذشته‬‫قبل‬‫از‬‫اینکه‬‫مفهوم‬‫شی‬‫گرایی‬‫وارد‬‫زبان‬php‫شود‬،‫برنامه‬‫نویس‬‫ها‬‫مجبور‬‫بودند‬
php‫را‬‫در‬‫کنار‬html‫استفاده‬‫کنند‬‫که‬‫این‬‫روش‬‫در‬‫پروژه‬‫های‬‫کوچک‬‫مشکل‬‫بزرگی‬‫محسوب‬
‫نمی‬‫شد‬‫اما‬‫زمانی‬‫که‬‫صحبت‬‫از‬‫ساخت‬‫برنامه‬‫های‬‫متوسط‬‫و‬‫بزرگ‬‫به‬‫میان‬‫می‬‫آمد‬‫کار‬‫یکم‬
‫سخت‬‫تر‬‫می‬‫شد‬‫چون‬‫اینطور‬‫برنامه‬‫نویسی‬‫هر‬‫چقدر‬‫هم‬‫مدیریت‬‫شده‬،‫باشد‬‫دارای‬‫کدنویس‬‫ی‬
‫اسپاگتی‬‫و‬‫کثیفی‬‫است‬‫که‬‫مدیریت‬‫و‬‫توسعه‬‫آن‬‫را‬‫نسبت‬‫به‬‫برنامه‬‫نویسی‬‫شی‬‫گر‬‫ا‬‫خیلی‬
‫دشوارتر‬‫می‬‫کند‬.
‫از‬ ‫مثال‬ ‫یک‬PHP‫بطور‬‫معمولی‬:
<?php
// Connect to Database
?>
<!DOCTYPE html>
<html>
<head>
<title>Document</title>
</head>
<body>
</body>
</html>
‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬
•‫برنامه‬‫نویسی‬‫شی‬‫گرا‬‫یا‬‫به‬‫اختصار‬oop‫که‬‫مخفف‬Object-Oriented Programming‫می‬،‫باشد‬‫به‬‫شما‬
‫اجازه‬‫می‬‫دهد‬‫در‬‫کدهای‬‫خود‬‫تقسیم‬‫بندی‬‫های‬‫متفاوتی‬‫انجام‬‫دهید‬‫و‬‫کدهای‬php‫و‬html‫را‬‫تا‬‫حد‬‫زیادی‬‫از‬‫هم‬
‫جدا‬‫کنید‬‫و‬‫همین‬‫کار‬‫باعث‬‫می‬‫شود‬‫تا‬‫مدیریت‬‫روی‬‫کدهای‬php‫فوق‬‫العاده‬‫باال‬‫رود‬.‫البته‬‫خیلی‬‫دالیل‬‫دیگر‬‫نیز‬
‫وجود‬‫دارد‬‫که‬‫خارج‬‫از‬‫حوصله‬‫این‬‫مقاله‬‫است‬.‫خب‬‫حاال‬‫برویم‬‫سراغ‬‫توضیح‬‫مفهوم‬oop .
•‫اصل‬‫برنامه‬‫نویسی‬oop‫سعی‬‫دارد‬‫تا‬‫دنیایی‬‫واقعی‬‫را‬‫برای‬‫شما‬‫شبیه‬‫سازی‬‫کند‬.‫یعنی‬‫هر‬‫چیزی‬‫که‬‫شما‬‫در‬
‫دنیای‬‫اطرف‬‫می‬‫بینید‬‫را‬‫می‬‫توانید‬‫به‬‫این‬‫مفهوم‬‫ارتباط‬‫بدهید‬‫و‬‫بسازید‬.‫من‬‫خودم‬‫با‬‫یک‬‫مثال‬‫با‬‫مفهو‬‫م‬oop
‫آشنا‬‫شدم‬.‫در‬‫ادامه‬‫برای‬‫شما‬‫هم‬‫توضیح‬‫خواهم‬‫داد‬‫و‬‫امیدوارم‬‫به‬‫شما‬‫هم‬‫در‬‫درک‬‫بهتر‬‫این‬‫مفهوم‬‫کمک‬‫کند‬.
‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬
•‫فرض‬‫کنید‬‫می‬‫خواهید‬‫خانه‬‫ای‬‫بسازید‬.‫قبل‬‫از‬‫ساخت‬‫این‬‫خانه‬‫نیاز‬‫به‬‫نقشه‬‫ای‬‫برای‬‫ساخ‬‫ت‬
‫آن‬‫دارید‬.‫زمانی‬‫که‬‫نقشه‬‫را‬‫آماده‬‫می‬‫کنید‬‫و‬‫از‬‫روی‬‫آن‬‫خانه‬‫ای‬‫را‬‫می‬،‫سازید‬‫فکر‬‫می‬‫کنید‬‫ک‬‫ار‬
‫نقشه‬‫تمام‬‫شده‬‫یا‬‫می‬‫توان‬‫از‬‫روی‬‫آم‬‫خانه‬‫های‬‫دیگری‬‫ساخت؟‬‫در‬‫برنامه‬‫نویسی‬oop‫هم‬
‫دقیقا‬‫به‬‫همین‬‫صورت‬‫عمل‬‫می‬‫شود‬.
•‫شما‬‫می‬‫توانید‬‫از‬‫یک‬‫کد‬‫نوشته‬‫شده‬‫در‬‫بخش‬‫های‬‫دیگر‬‫به‬‫راحتی‬‫استفاده‬‫کنید‬‫بدون‬‫اینکه‬
‫دوباره‬‫کل‬‫کد‬‫را‬‫از‬‫اول‬‫بنویسید‬.‫دقیقا‬‫برعکس‬‫کاری‬‫که‬‫در‬php‫بدون‬‫استفاده‬‫از‬‫مفهوم‬oop
‫به‬‫دفعات‬‫زیاد‬‫می‬‫توانید‬‫مشاهده‬‫کنید‬‫که‬‫تکرار‬‫کد‬‫ها‬‫چقدر‬‫می‬‫تواند‬‫زیاد‬‫باشد‬.
‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫ها‬ ‫شی‬ ‫و‬ ‫ها‬ ‫کالس‬
•‫در‬‫شی‬‫گرایی‬‫دو‬‫مفهوم‬‫مهم‬‫ابتدایی‬‫و‬‫پایه‬‫ای‬‫وجود‬‫دارد‬.‫کالس‬‫ها‬‫و‬‫شی‬‫ها‬.‫یک‬‫کالس‬class
‫دقیقا‬‫مثل‬‫همان‬‫نقشه‬‫ای‬‫است‬‫که‬‫به‬‫کمک‬‫آن‬‫می‬‫توان‬‫خانه‬‫ای‬‫را‬‫ساخت‬.‫نقشه‬‫ای‬‫که‬‫از‬‫کن‬‫ار‬
‫هم‬‫قرار‬‫دادن‬‫اجزای‬‫متفاوتی‬‫ساخته‬‫می‬‫شود‬.
•‫این‬‫اجزا‬‫همان‬‫کالس‬‫ها‬‫هستند‬.‫مثل‬‫چی؟‬‫مثل‬‫کالس‬‫در‬،‫پنجره‬،‫سیم‬‫و‬…‫که‬‫هر‬‫کدام‬‫دارای‬
‫ویژگی‬‫های‬‫مخصوص‬‫به‬‫خود‬‫هستند‬‫و‬‫با‬‫ترکیب‬‫آنها‬‫با‬‫یکدیگر‬‫می‬‫توان‬‫یک‬‫خانه‬‫ساخت‬.
‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫ها‬ ‫شی‬ ‫و‬ ‫ها‬ ‫کالس‬
‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫ها‬ ‫شی‬ ‫و‬ ‫ها‬ ‫کالس‬
•‫یک‬‫شی‬object‫مثل‬‫خانه‬‫ای‬‫واقعی‬‫است‬‫که‬‫از‬‫روی‬‫نقشه‬‫آماده‬‫شده‬‫ساخته‬‫می‬‫شود‬.‫یعنی‬
‫دقیقا‬‫اول‬‫نقشه‬‫با‬‫استفاده‬‫از‬‫کالس‬‫ها‬‫یا‬‫همان‬‫اجزایی‬‫مثل‬‫در‬،‫پنجره‬،‫سیم‬،‫بتن‬‫و‬..‫ک‬‫ه‬‫هر‬
‫کدام‬‫برای‬‫خود‬‫یک‬‫کالس‬،‫هستند‬‫به‬‫هم‬‫متصل‬‫و‬‫آماده‬‫می‬‫شوند‬‫و‬‫بعد‬‫از‬‫آن‬‫با‬‫استفاده‬‫از‬
‫نقشه‬‫خانه‬‫واقعی‬‫ساخته‬‫می‬‫شود‬.
•‫دقت‬‫داشته‬‫باشید‬‫که‬‫تقریبا‬‫همه‬‫کالس‬‫ها‬‫از‬‫یکدیگر‬‫جدا‬‫هستند‬‫و‬‫همین‬‫موضوع‬‫آنها‬‫را‬‫س‬‫ازمان‬
‫یافته‬‫تر‬‫کرده‬‫و‬‫استفاده‬‫از‬‫آنها‬‫را‬‫ساده‬‫تر‬‫می‬‫کند‬.‫خب‬‫امیدوارم‬‫که‬‫با‬‫این‬‫دو‬‫مفهوم‬‫آشن‬‫ا‬‫شده‬
‫باشید‬.‫حاال‬‫اجازه‬‫بدهید‬‫تا‬‫بصورت‬‫دقیق‬‫تری‬‫شما‬‫را‬‫با‬‫ساختار‬‫کالس‬‫ها‬‫در‬php‫آشنا‬‫کنم‬.
‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫ها‬ ‫کالس‬ ‫ساختار‬
•‫در‬php‫یک‬‫کالس‬‫با‬‫کلمه‬‫کلیدی‬class‫به‬‫وجود‬‫می‬‫آید‬‫و‬‫با‬‫یک‬‫اسپیس‬‫و‬‫تایپ‬‫یک‬‫اسم‬‫شما‬‫اسم‬‫آن‬‫کالس‬‫را‬‫تعریف‬
‫می‬‫کنید‬‫و‬‫در‬‫نهایت‬‫با‬‫قرار‬‫دادن‬‫براکت‬‫های‬‫باز‬‫و‬‫بسته‬({})‫کار‬‫یک‬class‫را‬‫شروع‬‫می‬‫کنید‬.‫برای‬‫مثال‬:
<?php
class MyClass
{
// class propertys and methods go here;
}
?>
‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫ها‬ ‫کالس‬ ‫ساختار‬
•‫بعد‬‫از‬‫به‬‫وجود‬‫آمدن‬‫کالس‬‫می‬‫توانیم‬‫با‬‫استفاده‬‫از‬‫کلمه‬‫کلیدی‬new‫از‬‫آن‬‫کالس‬‫استفاده‬‫کنیم‬‫و‬‫یک‬‫شی‬object‫با‬‫همان‬‫کالس‬‫بسازیم‬.
‫در‬‫ادامه‬‫می‬‫توانید‬‫این‬‫روش‬‫را‬‫ببینید‬:
$obj = new MyClass;
•‫با‬‫قرار‬‫دادن‬‫شی‬obj$‫در‬‫داخل‬var_dump‫می‬‫توانید‬‫محتوای‬‫کالس‬‫را‬‫مشاهده‬‫کنید‬.
$obj = new MyClass;
•‫و‬‫اگر‬‫این‬‫کدها‬‫را‬‫در‬‫داخل‬‫فایلی‬‫برای‬test‫کردن‬‫قرار‬‫دهید‬‫و‬‫فایل‬‫را‬‫اجرا‬‫کنید‬‫نتیجه‬‫زیر‬‫را‬‫مشاهده‬‫خواهید‬‫کرد‬:
object(MyClass)#1 (0) { }
•‫در‬‫ادامه‬‫میخواهیم‬‫در‬‫مورد‬property‫ها‬‫و‬‫همینطور‬method‫ها‬‫در‬‫کالس‬‫صحبت‬‫کنیم‬‫و‬‫توضیح‬‫بدهیم‬‫که‬‫دقیقا‬‫چه‬‫هستند‬‫و‬‫چه‬
‫کاربردهایی‬‫دارند‬.‫ابتدا‬‫از‬property‫ها‬‫شروع‬‫می‬‫کنیم‬.
PROPERTY‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
•‫برای‬‫اضافه‬‫کردن‬‫اطالعات‬‫در‬‫کالس‬‫ها‬‫از‬property‫ها‬‫استفاده‬‫می‬‫شود‬.‫کار‬‫آنها‬‫دقیقا‬‫شبیه‬
‫متغیرها‬‫در‬php‫معمولی‬‫است‬‫و‬‫تنها‬‫تفاوت‬‫آنها‬‫این‬‫است‬‫که‬‫قبل‬‫از‬‫تایپ‬‫اسم‬property‫از‬
‫کلمات‬‫کلیدی‬private , protected‫و‬public‫استفاده‬‫می‬‫شود‬.‫این‬‫کلمات‬‫کلیدی‬‫را‬‫در‬
‫کپسوله‬‫سازی‬(‫پنهان‬‫سازی‬)‫بطور‬‫کامل‬‫توضیح‬‫خواهم‬‫داد‬‫فقط‬‫فعال‬‫در‬‫همین‬‫حد‬‫بدانید‬‫ک‬‫ه‬‫این‬
‫کلمات‬‫باید‬‫برای‬‫تعریف‬property‫ها‬‫و‬method‫ها‬‫قبل‬‫از‬‫اسم‬‫آنها‬‫قرار‬‫بگیرند‬.
PROPERTY‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
•‫به‬‫مثال‬‫زیر‬‫دقت‬‫کنید‬:
<?php
class MyClass
{
public $name = 'john doe';
}
$obj = new MyClass;
var_dump($obj);
?>
PROPERTY‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
•‫در‬‫باال‬‫با‬‫استفاده‬‫از‬‫کلمه‬public‫تعیین‬‫کردیم‬‫که‬property‫برای‬‫استفاده‬‫در‬‫یک‬object‫قابل‬
‫مشاهده‬‫است‬‫و‬‫همینطور‬property‫به‬‫اسم‬name$‫تعریف‬‫و‬‫بعد‬‫آن‬‫را‬‫مقدار‬‫دهی‬‫کردیم‬‫و‬‫بعد‬‫با‬
‫تعریف‬‫یک‬‫شی‬‫و‬‫قرار‬‫دادن‬‫آن‬‫در‬var_dump‫اطالعات‬‫کامل‬‫را‬‫برگشت‬‫دادیم‬.
•‫شما‬‫به‬‫راحتی‬‫می‬‫توانید‬‫بعد‬‫از‬‫تعریف‬‫شی‬‫دوباره‬property‫را‬‫مقداردهی‬‫کنید‬.‫البته‬‫تنها‬‫در‬‫حالتی‬
‫که‬property‫مورد‬‫نظر‬‫از‬‫نوع‬public‫باشد‬‫و‬‫همینطور‬‫به‬‫راحتی‬‫می‬‫توانید‬‫آن‬‫را‬‫با‬‫استفاده‬‫از‬
echo‫چاپ‬‫کنید‬.‫البته‬‫برای‬‫چاپ‬‫یا‬‫مقداردهی‬،‫دوباره‬‫نیاز‬‫به‬‫دسترسی‬‫به‬‫آن‬property‫از‬‫طریق‬
object‫دارید‬.‫برای‬‫اینکار‬‫بعد‬‫از‬‫تایپ‬‫اسم‬object‫با‬‫قرار‬‫دادن‬‫یک‬‫فلش‬(<-)‫و‬‫تایپ‬‫اسم‬
property‫می‬‫توانید‬‫به‬‫آن‬‫دسترسی‬‫داشته‬‫باشید‬.
PROPERTY‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
•‫به‬‫مثال‬‫زیر‬‫دقت‬‫کنید‬:
<?php
class MyClass
{
public $name = 'John Doe';
}
$obj = new MyClass;
echo $obj->name . '</br >';
$obj->name = ‘Amir';
echo $obj->name ;
?>
PROPERTY‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
•‫بعد‬‫از‬‫اجرای‬‫فایل‬test.php‫می‬‫توانید‬‫نتیجه‬‫زیر‬‫را‬‫مشاهده‬‫کنید‬:
John Doe
Amir
METHOD‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
•method‫ها‬‫دقیقا‬‫کار‬‫توابع‬‫را‬‫در‬‫کالس‬‫ها‬‫انجام‬‫می‬‫دهند‬.‫یعنی‬‫تفاوت‬‫چندانی‬‫با‬‫هم‬‫ندارند‬.
method‫ها‬‫نیز‬‫با‬‫قرار‬‫گرفتن‬‫کلمات‬‫کلیدی‬private , protected‫و‬public‫قبل‬‫از‬function
‫تعریف‬‫می‬‫شوند‬.‫یک‬method‫می‬‫تواند‬‫به‬‫شی‬‫ها‬‫کمک‬‫کند‬‫که‬‫در‬‫داخل‬‫کالس‬‫ها‬‫عملیاتی‬‫را‬
‫انجام‬‫دهند‬‫البته‬‫این‬‫عملیات‬‫توسط‬‫متدها‬‫مشخص‬‫می‬‫شوند‬.
METHOD‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
•‫برای‬‫مثال‬‫متدهایی‬‫را‬‫برای‬set‫و‬get‫کردن‬‫اطالعات‬property‫داخل‬‫کالس‬‫می‬‫نویسیم‬.‫به‬‫کد‬‫زیر‬‫دقت‬‫کنید‬:
<?php
class MyClass {
public $name = 'John Doe';
public function setProperty($newval) { $this->name = $newval; }
public function getProperty() { return $this->name . "</br >"; }
}
$obj = new MyClass;
echo $obj->name;
?>
METHOD‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
•‫نکته‬:‫در‬‫کد‬‫باال‬‫ما‬‫در‬‫دو‬‫قسمت‬‫از‬this$‫استفاده‬‫کردیم‬‫و‬‫بعد‬‫با‬‫یک‬‫فلش‬‫و‬‫قرار‬‫دادن‬‫اسم‬
property‫به‬‫آن‬‫دسترسی‬‫پیدا‬‫کردیم‬.‫در‬‫اصل‬‫این‬‫طریقه‬‫دسترسی‬‫به‬property‫ها‬‫و‬
method‫ها‬‫در‬‫داخل‬‫یک‬method‫است‬.‫چون‬‫بطور‬‫معمولی‬‫شما‬‫نمی‬‫توانید‬‫فقط‬‫با‬‫تایپ‬
‫اسم‬property‫یا‬method‫به‬‫آن‬‫دسترسی‬‫داشته‬‫باشید‬.‫تنها‬‫زمانی‬‫که‬‫از‬this$‫و‬‫با‬‫روش‬‫باال‬
‫عمل‬‫کنید‬‫می‬‫توانید‬‫به‬‫یک‬property‫و‬method‫از‬‫یک‬‫کالس‬‫داخل‬‫یک‬method‫دسترسی‬
‫پیدا‬‫کنید‬.
METHOD‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
•‫من‬‫در‬‫کد‬‫باال‬‫فقط‬‫با‬‫قرار‬‫دادن‬obj->name$‫مقدار‬‫این‬property‫را‬‫چاپ‬‫کردم‬‫اما‬‫در‬‫مثال‬
‫زیر‬‫من‬‫ابتدا‬‫با‬‫استفاده‬‫از‬‫متد‬getProperty‫مقدار‬‫فعلی‬name$‫را‬‫چاپ‬‫می‬‫کنم‬‫و‬‫بعد‬‫در‬
‫مرحله‬‫بعدی‬‫با‬‫استفاده‬‫از‬‫متد‬setProperty‫و‬‫ارسال‬‫یک‬‫مقدار‬‫به‬‫عنوان‬‫آرگومان‬‫یک‬‫مقدار‬
‫جدید‬‫برای‬name$‫تعیین‬‫می‬‫کنم‬‫و‬‫بعد‬‫دوباره‬‫با‬‫چاپ‬‫کردن‬‫متد‬getProperty‫میام‬‫مقدار‬
‫فعلیش‬‫رو‬‫چاپ‬‫می‬‫کنیم‬.
•‫این‬‫یک‬‫روش‬‫مهم‬‫برای‬set‫و‬get‫کردن‬property‫هاست‬‫که‬‫به‬‫زودی‬‫در‬‫ادامه‬‫دلیل‬‫آن‬‫را‬
‫متوجه‬‫خواهید‬‫شد‬‫اما‬‫فعال‬‫از‬‫دید‬‫امتحان‬‫کردن‬‫یک‬‫متد‬‫به‬‫آن‬‫نگاه‬‫کنید‬.
METHOD‫چیست؟‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
<?php
class MyClass {
public $name = "John Doe";
public function setProperty($newval)
{ $this->name = $newval; }
public function getProperty()
{ return $this->name . "<br />"; }
}
$obj = new MyClass;
echo $obj->getProperty(); // Get the property value
$obj->setProperty(“Amir"); // Set a new one
echo $obj->getProperty(); // Read it out again to show the change
?>
ENCAPSULATION‫سازی‬ ‫کپسوله‬
•‫اولین‬‫باری‬‫که‬‫این‬‫اسم‬‫را‬‫می‬‫بینید‬‫تعجب‬‫می‬‫کنید‬‫و‬‫از‬‫خود‬‫می‬‫پرسید‬‫یعنی‬‫چی‬‫میتون‬‫ه‬‫باشه‬!
‫راستش‬‫برای‬‫من‬‫هم‬‫خیلی‬‫عجیب‬‫بود‬‫ولی‬‫وقتی‬‫معنی‬‫کپسوله‬‫سازی‬‫را‬‫متوجه‬،‫شوید‬‫دیگ‬‫ر‬‫فهم‬
‫آن‬‫ساده‬‫می‬‫شود‬.
•‫کپسوله‬‫سازی‬‫همان‬‫پنهان‬‫سازی‬‫اطالعات‬‫است‬‫اما‬‫ما‬‫چرا‬‫باید‬‫اطالعاتی‬‫را‬‫پنهان‬‫سازی‬‫کنی‬‫م‬.‫اگر‬
‫خاطرتان‬‫باشد‬‫در‬‫بخش‬‫من‬‫دو‬‫مورد‬method‫به‬‫اسم‬‫های‬set‫و‬get‫درست‬‫کردم‬‫که‬‫هر‬
‫کدام‬‫کار‬‫خودشان‬‫را‬‫انجام‬‫می‬‫دادند‬.
ENCAPSULATION‫سازی‬ ‫کپسوله‬
•‫یعنی‬‫یکی‬‫مقداردهی‬property‫را‬‫انجام‬‫می‬‫داد‬‫و‬‫دیگری‬‫مقدار‬property‫را‬‫برمی‬‫گرداند‬‫اما‬‫چرا‬
‫باید‬‫اینطور‬‫باشد؟‬‫این‬‫سوالی‬‫است‬‫که‬‫من‬‫هم‬‫داشتم‬‫چون‬‫ما‬‫به‬‫راحتی‬‫می‬‫توانیم‬‫از‬‫خود‬property
‫استفاده‬‫کنیم‬‫و‬‫مقداردهی‬‫را‬‫چاپ‬‫کنیم‬‫اما‬‫این‬‫درست‬‫نیست‬.
•‫گاهی‬property‫ها‬‫و‬method‫های‬‫حساسی‬‫وجود‬‫دارد‬‫که‬‫قابل‬‫استفاده‬‫در‬object‫ها‬‫نیستند‬!‫چرا؟‬
‫چون‬‫پنهان‬‫سازی‬‫شده‬‫اند‬.‫اگر‬‫یادتان‬‫باشد‬‫کمی‬‫قبل‬‫تر‬‫سه‬‫کلمه‬‫کلیدی‬public , private‫و‬
protected‫را‬‫معرفی‬‫کردم‬‫اما‬‫فقط‬‫از‬public‫استفاده‬‫کردم‬‫و‬‫گفتم‬‫در‬‫ادامه‬‫توضیح‬‫می‬‫دهم‬‫این‬‫ها‬
‫چه‬‫فوایدی‬‫دارند‬.‫اجازه‬‫دهید‬‫با‬‫تعریف‬‫کردن‬‫هر‬‫کدام‬‫از‬‫این‬‫ها‬‫به‬‫نتیجه‬‫برسیم‬.
ENCAPSULATION‫سازی‬ ‫کپسوله‬
•protected‫اگر‬‫قبل‬‫از‬property‫یا‬method‫از‬‫این‬‫کلمه‬‫استفاده‬‫شود‬‫به‬‫این‬‫معنی‬‫است‬‫که‬‫شما‬‫از‬‫آن‬
property‫و‬method‫فقط‬‫در‬‫کالس‬‫ها‬‫می‬‫توانید‬‫استفاده‬‫کنید‬‫و‬‫اصال‬‫نمی‬‫توانید‬‫در‬object‫ی‬‫که‬‫می‬‫سازید‬
‫از‬‫آن‬‫استفاده‬‫کنید‬.(‫البته‬‫با‬‫روش‬‫های‬‫خاص‬‫می‬‫شود‬.)
•Private‫اگر‬‫قبل‬‫از‬property‫یا‬method‫از‬‫این‬‫کلمه‬‫استفاده‬‫شود‬‫به‬‫این‬‫معنی‬‫است‬‫که‬‫شما‬‫از‬‫آن‬property
‫و‬method‫فقط‬‫و‬‫فقط‬‫می‬‫توانید‬‫در‬‫داخل‬‫همان‬‫کالس‬‫استفاده‬‫کنید‬‫و‬‫پس‬‫یعنی‬‫قابلیت‬‫استفاده‬‫در‬object‫ا‬‫ر‬
‫هم‬‫ندارید‬.private‫شبیه‬protected‫است‬‫اما‬‫استفاده‬‫نشدن‬‫در‬‫کالس‬‫های‬‫دیگر‬‫بین‬‫آنها‬‫ایجاد‬‫تفاوت‬‫می‬
‫کند‬.
•‫و‬‫در‬‫نهایت‬public‫اگر‬‫قبل‬‫از‬property‫یا‬method‫از‬‫این‬‫کلمه‬‫استفاده‬‫شود‬‫به‬‫این‬‫معنی‬‫است‬‫که‬‫شما‬‫از‬
‫آن‬property‫و‬method‫به‬‫راحتی‬‫می‬‫توانید‬‫در‬‫کالس‬‫ها‬‫و‬object‫ها‬‫استفاده‬‫کنید‬.‫به‬‫همین‬‫سادگی‬…
ENCAPSULATION‫سازی‬ ‫کپسوله‬
<?php
class MyClass {
public $name = 'John Doe';
}
$obj = new MyClass;
echo $obj->name . '</br >';
$obj->name = ‘Amir';
echo $obj->name ;
?>
‫کنی‬ ‫مراجعه‬ ‫زیر‬ ‫لینک‬ ‫به‬ ‫اسالید‬ ‫این‬ ‫فایل‬ ‫دریافت‬ ‫برای‬‫د‬
http://bit.ly/2WWk088

More Related Content

Similar to oop in php - Persian

ارائه ابزار.pptx
ارائه ابزار.pptxارائه ابزار.pptx
ارائه ابزار.pptxaminnezarat
 
آشنایی با چابکی و اسکرام (Agile & scrum)
آشنایی با چابکی و اسکرام (Agile & scrum)آشنایی با چابکی و اسکرام (Agile & scrum)
آشنایی با چابکی و اسکرام (Agile & scrum)Neda Ansari
 
زبان برنامه نویسی جولیا
زبان برنامه نویسی جولیازبان برنامه نویسی جولیا
زبان برنامه نویسی جولیاYasamanKarbasi
 
آموزش پایتون - بخش اول
آموزش پایتون - بخش اولآموزش پایتون - بخش اول
آموزش پایتون - بخش اولAli Yazdani
 
About Programming - persion.pptx
About Programming - persion.pptxAbout Programming - persion.pptx
About Programming - persion.pptxHossein Darvishi
 
معرفی ServiceWorker و کاربردهای آن
معرفی ServiceWorker و کاربردهای آنمعرفی ServiceWorker و کاربردهای آن
معرفی ServiceWorker و کاربردهای آنWeb Standards School
 
Vue.js طراحی رابط کاربری وب با استفاده از
Vue.js طراحی رابط کاربری وب با استفاده ازVue.js طراحی رابط کاربری وب با استفاده از
Vue.js طراحی رابط کاربری وب با استفاده ازShiraz LUG
 
R یادگیری ماشین با استفاده از زبان برنامه نویسی
R یادگیری ماشین با استفاده از زبان برنامه نویسیR یادگیری ماشین با استفاده از زبان برنامه نویسی
R یادگیری ماشین با استفاده از زبان برنامه نویسیShiraz LUG
 

Similar to oop in php - Persian (15)

ارائه ابزار.pptx
ارائه ابزار.pptxارائه ابزار.pptx
ارائه ابزار.pptx
 
لیبره‌آفیس
لیبره‌آفیسلیبره‌آفیس
لیبره‌آفیس
 
لیبره‌آفیس
لیبره‌آفیسلیبره‌آفیس
لیبره‌آفیس
 
لیبره‌آفیس
لیبره‌آفیسلیبره‌آفیس
لیبره‌آفیس
 
Java script
Java scriptJava script
Java script
 
jQuery
jQueryjQuery
jQuery
 
آشنایی با چابکی و اسکرام (Agile & scrum)
آشنایی با چابکی و اسکرام (Agile & scrum)آشنایی با چابکی و اسکرام (Agile & scrum)
آشنایی با چابکی و اسکرام (Agile & scrum)
 
زبان برنامه نویسی جولیا
زبان برنامه نویسی جولیازبان برنامه نویسی جولیا
زبان برنامه نویسی جولیا
 
آموزش پایتون - بخش اول
آموزش پایتون - بخش اولآموزش پایتون - بخش اول
آموزش پایتون - بخش اول
 
About Programming - persion.pptx
About Programming - persion.pptxAbout Programming - persion.pptx
About Programming - persion.pptx
 
Kotlin
KotlinKotlin
Kotlin
 
IranOUG_Oracle_Multitenant
IranOUG_Oracle_MultitenantIranOUG_Oracle_Multitenant
IranOUG_Oracle_Multitenant
 
معرفی ServiceWorker و کاربردهای آن
معرفی ServiceWorker و کاربردهای آنمعرفی ServiceWorker و کاربردهای آن
معرفی ServiceWorker و کاربردهای آن
 
Vue.js طراحی رابط کاربری وب با استفاده از
Vue.js طراحی رابط کاربری وب با استفاده ازVue.js طراحی رابط کاربری وب با استفاده از
Vue.js طراحی رابط کاربری وب با استفاده از
 
R یادگیری ماشین با استفاده از زبان برنامه نویسی
R یادگیری ماشین با استفاده از زبان برنامه نویسیR یادگیری ماشین با استفاده از زبان برنامه نویسی
R یادگیری ماشین با استفاده از زبان برنامه نویسی
 

More from Amir Shokri

LAUNCH - growth practices - PRODUCT MANAGER
LAUNCH - growth practices - PRODUCT MANAGERLAUNCH - growth practices - PRODUCT MANAGER
LAUNCH - growth practices - PRODUCT MANAGERAmir Shokri
 
Project Management Growth Practices
Project Management Growth PracticesProject Management Growth Practices
Project Management Growth PracticesAmir Shokri
 
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 7
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 7GROWTH PRACTICES - Cracking the PM Career - CHAPTER 7
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 7Amir Shokri
 
Numbers, math operation, converting bases
Numbers, math operation, converting basesNumbers, math operation, converting bases
Numbers, math operation, converting basesAmir Shokri
 
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 4
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 4GROWTH PRACTICES - Cracking the PM Career - CHAPTER 4
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 4Amir Shokri
 
review of image memorability methods
review of image memorability methodsreview of image memorability methods
review of image memorability methodsAmir Shokri
 
beyesian learning exercises
beyesian learning exercisesbeyesian learning exercises
beyesian learning exercisesAmir Shokri
 
Bayesian learning
Bayesian learningBayesian learning
Bayesian learningAmir Shokri
 
machine learning code
machine learning codemachine learning code
machine learning codeAmir Shokri
 
machine learning - id3, find-s, candidate elimination, desicion tree example
machine learning - id3, find-s, candidate elimination, desicion tree examplemachine learning - id3, find-s, candidate elimination, desicion tree example
machine learning - id3, find-s, candidate elimination, desicion tree exampleAmir Shokri
 
Concept learning
Concept learningConcept learning
Concept learningAmir Shokri
 
logical operators decision tree
logical operators decision treelogical operators decision tree
logical operators decision treeAmir Shokri
 
Mining social network graphs - persian
Mining social network graphs - persianMining social network graphs - persian
Mining social network graphs - persianAmir Shokri
 
product glossary
product glossaryproduct glossary
product glossaryAmir Shokri
 
Popular Maple codes Book - Persian
Popular Maple codes Book - PersianPopular Maple codes Book - Persian
Popular Maple codes Book - PersianAmir Shokri
 

More from Amir Shokri (20)

LAUNCH - growth practices - PRODUCT MANAGER
LAUNCH - growth practices - PRODUCT MANAGERLAUNCH - growth practices - PRODUCT MANAGER
LAUNCH - growth practices - PRODUCT MANAGER
 
Remote work
Remote workRemote work
Remote work
 
Project Management Growth Practices
Project Management Growth PracticesProject Management Growth Practices
Project Management Growth Practices
 
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 7
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 7GROWTH PRACTICES - Cracking the PM Career - CHAPTER 7
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 7
 
Numbers, math operation, converting bases
Numbers, math operation, converting basesNumbers, math operation, converting bases
Numbers, math operation, converting bases
 
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 4
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 4GROWTH PRACTICES - Cracking the PM Career - CHAPTER 4
GROWTH PRACTICES - Cracking the PM Career - CHAPTER 4
 
review of image memorability methods
review of image memorability methodsreview of image memorability methods
review of image memorability methods
 
key.net
key.netkey.net
key.net
 
beyesian learning exercises
beyesian learning exercisesbeyesian learning exercises
beyesian learning exercises
 
Knn
KnnKnn
Knn
 
Bayesian learning
Bayesian learningBayesian learning
Bayesian learning
 
machine learning code
machine learning codemachine learning code
machine learning code
 
machine learning - id3, find-s, candidate elimination, desicion tree example
machine learning - id3, find-s, candidate elimination, desicion tree examplemachine learning - id3, find-s, candidate elimination, desicion tree example
machine learning - id3, find-s, candidate elimination, desicion tree example
 
ID3 Algorithm
ID3 AlgorithmID3 Algorithm
ID3 Algorithm
 
Concept learning
Concept learningConcept learning
Concept learning
 
logical operators decision tree
logical operators decision treelogical operators decision tree
logical operators decision tree
 
Matplotlib
MatplotlibMatplotlib
Matplotlib
 
Mining social network graphs - persian
Mining social network graphs - persianMining social network graphs - persian
Mining social network graphs - persian
 
product glossary
product glossaryproduct glossary
product glossary
 
Popular Maple codes Book - Persian
Popular Maple codes Book - PersianPopular Maple codes Book - Persian
Popular Maple codes Book - Persian
 

oop in php - Persian