سلام
ببخشید من یک سوال برایم پیش آمد اینکه مثلا ما در کلاس Programmer از کلاس Person ارث بری کردیم، استاد گفتند فقط Method ها و Property هایی که public هستند ارث برده میشوند و در کلاس Programmer قابل استفاده هستند ولی وقتی من از متود های public مثل setAge و یا printAge در کلاس Programmer استفاده کردم مقدار سن را به من داد و یا میتوانستم سن را تغییر دهم.
خب در اینجا مگر سن Private نبود، پس چطور در کلاس Programmer قابل استفاده بود و میتوانستیم آن را مقدار دهی کنیم؟ (و هیچ اروری نمیداد در صورتی که وقتی از یک متود Private استفاده میکردم ارور میداد)
ممنون میشم پاسخ دهید.
سلام و احترام
متدها و پراپرتی های private داخل خود کلاس در دسترس هستند اما اگه برای اون ها ما setter و getter قرار بدیم میتونیم مقادیرشون رو دریافت و یا ست کنیم برای مثال
class Person{
private $name;
}
$person = new Person();
echo $person->name;
اگه ما بخواهیم به این پراپرتی name که private هست دسترسی داشته باشیم قطعا به خطا میده
PHP Error Cannot access private property Person::$name
اما برای اینکه بتونیم مقدارشو دریافت کنیم میتونیم براش یک getter که public هست تعریف کنیم
class Person{
private $name;
public function getName(){
return $this->name;
}
}
$person = new Person();
$name = $person->getName();
echo $name;
ما چون getterمون داخل کلاس Person هستش پس به پراپتری ها و متدهای اون کلاس دسترسی داریم و میتونیم به این شکل ازشون استفاده کنیم
سلام.
این نکته رو هم من اضافه کنم:
از طریق Reflection Api میتونید به پراپرتی private دسترسی داشته باشید.
این مثالو ببینید:
<?php
class Test {
private $name;
function __construct() {
$this->name = 'Mohsen';
}
}
$obj = new Test;
$reflector = new ReflectionClass($obj);
$name = $reflector->getProperty('name');
$name->setAccessible(true);
var_dump($name->getValue($obj));