class — PHP Подклассы для дополнительной функциональности

Недавно наша компания была принята на закрытое тестирование для некоторого программного обеспечения, где я взял API, который находится в стадии разработки, и начал разработку класса-оболочки для использования в наших собственных системах.

Базовый класс устанавливает соединение с API, отправляет запросы JSON и обрабатывает все основные функции. Однако система работает с плагинами / модулями, которые добавляют дополнительную функциональность при загрузке.

Поддерживает ли PHP подклассы, которые будут работать для этого сценария? Будет ли лучше всего передать экземпляр базового класса «подклассам» в качестве параметра при их инициализации и использовать его для отправки запросов?

Псевдокод:

<?php

class PluginClass
{
private base = null;

public function __construct($base_system)
{
if (isset($base_system))
{
$this->base = $base_system;
}

$this->base->sendRequest("someData");
}
}

class BaseClass
{
public function __construct($host = 'localhost', $port = '8080', $user = 'admin', $pass = '')
{
if(!empty($host) && !empty($port) && !empty($user) && !empty($pass))
{
$this->login($host, $port, $user, $pass);
}
}

public function sendRequest($data)
{
// Send JSON Request Data
}
}

?>

0

Решение

Да, это совершенно нормальный сценарий.
Я бы не назвал это subclass хотя, чтобы не путать это с дочерними классами, которые расширяют родительский класс через extend механизм.

То, что вы описываете, я использую почти каждый день.
Скажем, класс, которому дан массив для работы.
Или другой класс, которому дано соединение с базой данных для работы.

Например,

$object_screwer = new ObjectScrewer( $some_object );
$object_screwer->screw_it();

…который он в свою очередь называет $this->object->some_method() например

Некоторые также ошибочно называют это strategy шаблон.
Это не так по определению, но выглядит очень похоже.


Просто быть чистым, strategy шаблон будет:

$P = new Payment( new PayPal('username','password') );
$P->pay(10.00);

В strategy шаблон, мы даем начальному объекту некоторые параметры: не просто свойства, но определяя стратегия его поведения. В этом случае я создал объект платежа и передал ему объект плагина PayPal для обработки платежей.

Удачи в кодировании!

0

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

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

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