Метод getInfo(), как тебя реализовать?
Метод getInfo() в классе SuperUser должен возвращать ассоциативный массив, в котором именами элементов массива являются имена свойств объекта, а значениями элементов - значения свойств объекта.
Как можно реализовать?
// абстрактный класс UserAbstract
abstract class UserAbstract {
public $name;
public $login;
public $password;
function __construct($name, $login, $pass){
$this -> name = $name;
$this -> login = $login;
$this -> password = $pass;
}
function __destruct(){
echo "Пользователь {$this->login} удален!";
}
// абстрактный метод
abstract function showInfo();
}
class User extends UserAbstract{
public $surname;
// реализация абстрактного метода
function showInfo(){
echo "Name: {$this->name}\n Surname: {$this->surname}\n Login: {$this->login}\n Password: {$this->password}\n";
}
}
// интерфейс ISuperUser
interface ISuperUser{
// объявлен метод getInfo
function getInfo();
}
// класс superUser наследует класс User и реализует интерфейс ISuperUser
class superUser extends User implements ISuperUser{
function getInfo(){
// вернуть ассоциативный массив, в котором именами элементов массива являются имена свойств объекта, а значениями элементов -значения свойств объекта
}
}
$superUser = new superUser("Jack", "lucky_jack", 777);
$superUser -> surname = "Luckie";
$superUser -> showInfo();
Ответы (2 шт):
Автор решения: Sanya H
→ Ссылка
function getInfo(){
$rc = new ReflectionClass($this);
$attributes = $rc->getProperties();
$result = [];
foreach ($attributes as $attribute) {
$name = $attribute->getName();
$result[$name] = $this->{$name};
}
return $result;
}
Автор решения: teran
→ Ссылка
в самом простом случае можно сделать
return (array)$this;
публичные свойства будут получены с нормальными именами ключей, для приватных префиксом будет являться имя класса, а у протектед - звездочка.