Мне интересно, если такая структура подклассов возможна в PHP. Если это дубликат, я извиняюсь, так как не мог понять, как будет называться этот процесс, и единственное, что я смог найти, это закрытый вопрос без ответа.
Я работаю с несколькими классами. Например, мы скажем Main
а также User
,
Main
класс будет содержать весь код инициации. Так
class Main{
//Setters for core variables and data needed to make calls
...
protected function fetchInfo(){
//Do Stuff to return info from other source(Curl calls in my case)
}
}
а также User
class User extends Main{
public function getName(){
$data = $this->fetchInfo();
return $data['name'];
}
}
Но вместо того, чтобы иметь это, где я был бы. Делать $exampe1 = new Main(...);
установить переменные, и $example2 = new User();
вызвать подкласс, чтобы сделать $example2->getName();
есть ли способ сделать что-то вроде $example = new Main();
которые затем могут вызывать подклассы, когда это необходимо, как $example->User->getName();
?
Я знаю, что есть много разных способов, которыми это может быть выполнено, но я хочу, чтобы классы были отдельными для организации, и я планирую иметь много подклассов, которые должны извлекать информацию из этого основного класса, и хотел бы знать, есть ли способ они могут быть связаны таким образом.
РЕДАКТИРОВАТЬ: Причина, по которой я не хочу просто вызывать пользовательские вызовы, чтобы получить функцию, состоит в том, что в итоге у меня будет более 15 классов, которые по-разному обрабатывают возвращаемые данные, и я задаюсь вопросом, есть ли лучший способ, чем создание нового объекта для каждого, если Я хочу использовать это.
«Main» — это не «User», поэтому я бы сказал, что этот тип подклассов — плохой выбор.
Я мог бы вместо этого посмотреть на инъекцию.
class MainDataHandler {
//...
}
class User {
private $main;
public function __construct(MainDataHandler $main) {
$this->main = $main;
}
public function getName() {
return $this->main->getData('name');
}
}
Преимущества внедрения в том, что ваши классы могут работать и тестироваться независимо, без зависимости от другого класса, выполняющего работу. Также, если «Main» когда-либо изменит вас, ваш класс User не зависит от того, как работает новый Main.
Других решений пока нет …