You can achieve this using reflection :
class Car{
public $doors;
public $wheels;
public $color;
public $size;
public function print_this(){
$class = new ReflectionClass(self::class);
print_r($class->getProperties());
}
}
:
class BMW extends Car{
public $company;
public $modal;
public function __construct(){
$class = new ReflectionClass(self::class);
$parent = $class->getParentClass();
print_r($parent->getProperties());
}
}
:
, , print_this(), BMW, BMW , print_this() BMW , .
-: / . ( ), print_this() Car :
public function print_this($reflectSelf = false) {
$reflectionClass = $reflectSelf ? self::class : get_called_class();
$class = new ReflectionClass($reflectionClass);
$properties = array_filter(
$class->getProperties(),
function($property) use($class) {
return $property->getDeclaringClass()->getName() == $class->getName();
});
print_r($properties);
}
, , print_this():
class BMW extends Car{
public $company;
public $modal;
public function __construct(){
parent::print_this();
parent::print_this(true);
}
}