آیا در ارث بری، Private فقط بر روی متود ها اعمال میشود؟

پرسیده شده
فعالیت 937 روز پیش
دیده شده 291 بار
0

سلام

ببخشید من یک سوال برایم پیش آمد اینکه مثلا ما در کلاس Programmer از کلاس Person ارث بری کردیم، استاد گفتند فقط Method ها و Property هایی که public هستند ارث برده میشوند و در کلاس Programmer قابل استفاده هستند ولی وقتی من از متود های public مثل setAge و یا printAge در کلاس Programmer استفاده کردم مقدار سن را به من داد و یا میتوانستم سن را تغییر دهم.

خب در اینجا مگر سن Private نبود، پس چطور در کلاس Programmer قابل استفاده بود و میتوانستیم آن را مقدار دهی کنیم؟ (و هیچ اروری نمیداد در صورتی که وقتی از یک متود Private استفاده میکردم ارور میداد)

ممنون میشم پاسخ دهید.

فایل پیوست

سام انوشه
سام انوشه

15 مهر 00

1
حذف شده

سلام و احترام

متدها و پراپرتی های 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 هستش پس به پراپتری ها و متدهای اون کلاس دسترسی داریم و میتونیم به این شکل ازشون استفاده کنیم

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

17 مهر 00

0
حذف شده

سلام.

این نکته رو هم من اضافه کنم:

از طریق 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));

 

فایل پیوست

محسن موحد

توسط

محسن موحد

20 مهر 00