PHP ООП структурирование классов

Мне интересно, если такая структура подклассов возможна в 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 классов, которые по-разному обрабатывают возвращаемые данные, и я задаюсь вопросом, есть ли лучший способ, чем создание нового объекта для каждого, если Я хочу использовать это.

0

Решение

«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.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]