изменить порядок вызова функций извне, не затрагивая основной наследуемый класс

Рейтинг: 0Ответов: 1Опубликовано: 16.08.2023

Всех приветствую, проблема в том, что при наследовании этого класса и использовании метода generateAgreement, я вызываю цепочку методов в определенном порядке, могу ли я, не затрагивая наследуемый класс, изменить его цыпочку вызова в том классе, который наследует этот класс и использует этот метод?

Проблема номер 2, могу ли я, при наследовании этого класса и использовании метода generateAgreement, не вызывать определенную функцию, например $this->setClient(), но не меняя это в основном классе, а сделать это в классе который наследует основной класс, что можно сделать?

class KaskoLgt implements GenerateProductInterface
 {
private $connection = 'cnn';

public function createAgreement($data)
{
    $agreement = new ProductAgreementFacade($data, $this->connection);
    $agreement->generateAgreement();
    return $agreement;
}

 } 


class ProductAgreementFacade extends KiasInitialization
 {

private $data;
private $connection;

public function __construct($data, $connection)
{
    $this->connection = parent::__construct($connection);
    $this->data = $data;
}

public function generateAgreement()
{

    $this->setClient();

    $this->setAgreement();

 
    return $this->data['sum'];

}

private function setClient()
{
    $subject = new Subject($this->connection);
    $subject->getClientByIIN($this->data);
    $subject->setSubjSmall($this->data);
    $subject->setClientCentras($this->data);
    $subject->setSubjectDocument($this->data);
}

private function setAgreement()
{

}

Ответы

▲ 0
    сюinterface GenerateProductInterface {
    public function generateAgreement($data);
}

abstract class KaskoLgt implements GenerateProductInterface {
    private $connection = 'cnn';

    public function generateAgreement($data) {
        $agreement = $this->createAgreement($data);
        return $agreement->generateAgreementTemplate();
    }

    abstract protected function createAgreement($data);
}

class ProductAgreementFacade extends KaskoLgt {
    protected function createAgreement($data) {
        return new ProductAgreement($data, $this->connection);
    }
}

class ProductAgreement {
    private $data;
    private $connection;

    public function __construct($data, $connection) {
        $this->connection = $connection;
        $this->data = $data;
    }

    public function generateAgreementTemplate() {
        $this->setAgreement();

        return $this->data['sum'];
    }

    private function setAgreement() {
        // ...
    }
}

$data = array(/* your data here */);

$productAgreementFacade = new ProductAgreementFacade();
$result = $productAgreementFacade->generateAgreement($data);

echo "Agreement generated with result: " . $result;