در بخش قبلی از سری آموزش شی گرایی در PHP، بدون اینکه بدانیم public چی هست برای متد و خواص کلاس استفاده کردیم و در این آموزش با سطوح دسترسی public و private آشنا می شوید.
public
یکی از چندین modifier (سطح دسترسی) هایی است که ما استفاده می کنیم.
از آنجا که public
به ما اجازه دسترسی به متد و خواص ها داخل یا خارج از کلاس را می دهد، کلمه کلیدی private
از دسترسی به آنها خارج از کلاس جلوگیری می کند.
سطح دسترسی public
مثال زیر برای شما آشنا است. در این مثال، خواص و متدهای کلاس بصورت public
تعریف شدند، پس می تواند خارج از کلاس و بصورت مستقیم به آنها دسترسی داشت.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php class Car { // public methods and properties. public $model; public function getModel() { return "The car model is " . $this -> model; } } $mercedes = new Car(); //Here we access a property from outside the class $mercedes -> model = "Mercedes"; //Here we access a method from outside the class echo $mercedes -> getModel(); ?> |
خروجی :
چطور به خصوصیات private دسترسی داشته باشیم؟
همانطور که دیدید خارج از کلاس ما امکان دسترسی به خصوصیات پرایوت را نداریم، اما به طریقی می توانیم مقدار آن را دریافت یا ست کنیم.
برای این کار ما از متدهای پابلیک استفاده می کنیم تا بتوانیم با آن خارج از اسکوپ کلاس کار کنیم.
متدهای پابلیک که برای اینکار استفاده می کنیم، معمولا به دو بخش تقسیم می شود
Setters برای ست کردن مقادیر خواص پرایوت
Getters برای دریافت مقادیر خواص پرایوت
در مثال زیر، می توانید ببینید که ما مقادیر خاصیت پرایوت $carModel
را با متدهای Getter و Setter دریافت/ست می کنیم.
از متد setModel()
برای مقداردهی و متد getModel()
برای دریافت مقدار فعلی آن بهره می بریم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php class Car { //private private $model; public function getModel() { return "The car model is " . $this -> model; } } $mercedes = new Car(); // We try to access a private property from outside the class. $mercedes -> model = "Mercedes benz"; echo $mercedes -> getModel(); ?> |
خروجی :
چرا به سطوح دسترسی نیاز داریم؟
ما از سطوح دسترسی (access modifiers) برای محدود کردن تغییرات روی متدها و خواص کلاس در خارج از استفاده می کنیم.
همینکه یک متد یا خاصیت را پرایوت کردیم، فقط متدهای داخل کلاس می توانند روی آن عملیات انجام دهند. پس برای کار کردن با متد و خواص پرایوت، ما نیاز به متدها پابلیک داریم.
داخل این متدها، می توانیم شرط ها و منطق موردنیاز برای دریافت اطلاعات خارج از کلاس و همچنین اعتبارسنجی داده های ورودی را بنویسیم.
در مثال ما، می توانیم اعتبارسنجی کنیم که فقط مدل های مشخصی را با این کلاس ایجاد کرد.
برای همین در متد پابلیک setModel()
یک آرایه از مدل های قابل قبول را می سازیم و با تابع in_array
بررسی می کنیم که فقط این مدها می توانند داخل خاصیت $model
قرار بگیرند
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php class Car { //the private access modifier denies access to the property from outside the class’s scope private $model; //the public access modifier allows the access to the method from outside the class public function setModel($model) { //validate that only certain car models are assigned to the $carModel property $allowedModels = array("Mercedes benz","BMW"); if(in_array($model,$allowedModels)) { $this -> model = $model; } else { $this -> model = "not in our list of models."; } } public function getModel() { return "The car model is " . $this -> model; } } $mercedes = new Car(); //Sets the car’s model $mercedes -> setModel("Mercedes benz"); //Gets the car’s model echo $mercedes -> getModel(); ?> |
جمع بندی آموزش شی گرایی در PHP
تا اینجا، با دو سطح دسترسی آشنا شدیم:
Public
: به توابع خارج از کلاس اجازه تغییرات را می دهد.
Private
: از خاصیت یا متد برای تغییرات خارج از کلاس محافظت می کند.
همچنین یاد گرفتید که برای تغییر در متد یا خاصیت های پرایوت، نیاز به متدها پابلیک داریم که خارج از محدوده کلاس بتوان با آن ها تغییرات ایجاد کرد.
در آموزش بعدی با متدهای جادویی و ثابت ها آشنا می شوید که باید با احتیاط از آنها استفاده کرد.