Как лучше организовать работу нескольких классов под одним началом? Здравствуйте. Пишу для себя набор хелперов для работы с числами, текстом, датами и так далее. В каждой сущности (текст, числа) есть набор классов, которые отвечают за обработку какой-то конкретной ситуации. Хочется их красиво как-то объединить. Чисто для примера:class math { public function sum($a, $b){ return (int)$a + (int)$b; } public function mod($a, $b) { return (int)$a % (int)$b; } public function div($a, $b) { return (int)$a / (int)$b; } }class math2 { public function sumf($a, $b){ return (float)$a + (float)$b; } public function modf($a, $b) { return (float)$a % (float)$b; } public function divf($a, $b) { return (float)$a / (float)$b; } } Хочется, что бы было как-то так (примерно) (Но может ваш пример будет лучше? Не стоит зацикливаться только на этом моё примере, я написал именно его, потому что просто не знаю о других вариантах):$math = new Number(); echo $math->sum(1, 2); echo $math->sumf(1.3, 2.7); Хочется получше вникнуть в правильную архитектуру в ООП, прошу помощи в более актуальном решении.
Для организации работы нескольких классов под одним началом, вы можете использовать паттерн "Фасад" (Facade). Фасад позволяет создать единый интерфейс для взаимодействия с различными классами, скрывая их сложность и детали реализации.
В вашем случае, вы можете создать класс-фасад, который будет оборачивать все необходимые классы и предоставлять унифицированный интерфейс для работы с ними. Например:
class Number { private $math; private $math2; public function __construct() { $this->math = new Math(); $this->math2 = new Math2(); } public function sum($a, $b) { return $this->math->sum($a, $b); } public function sumf($a, $b) { return $this->math2->sumf($a, $b); } // Другие методы... } class Math { public function sum($a, $b) { return (int)$a + (int)$b; } // Другие методы... } class Math2 { public function sumf($a, $b) { return (float)$a + (float)$b; } // Другие методы... }
Теперь вы можете использовать класс Number для работы с числами, скрывая детали реализации классов Math и Math2:
Для организации работы нескольких классов под одним началом, вы можете использовать паттерн "Фасад" (Facade). Фасад позволяет создать единый интерфейс для взаимодействия с различными классами, скрывая их сложность и детали реализации.
В вашем случае, вы можете создать класс-фасад, который будет оборачивать все необходимые классы и предоставлять унифицированный интерфейс для работы с ними. Например:
class Number {private $math;
private $math2;
public function __construct() {
$this->math = new Math();
$this->math2 = new Math2();
}
public function sum($a, $b) {
return $this->math->sum($a, $b);
}
public function sumf($a, $b) {
return $this->math2->sumf($a, $b);
}
// Другие методы...
}
class Math {
public function sum($a, $b) {
return (int)$a + (int)$b;
}
// Другие методы...
}
class Math2 {
public function sumf($a, $b) {
return (float)$a + (float)$b;
}
// Другие методы...
}
Теперь вы можете использовать класс Number для работы с числами, скрывая детали реализации классов Math и Math2:
$number = new Number();echo $number->sum(1, 2); // Выведет 3
echo $number->sumf(1.3, 2.7); // Выведет 4.0
Таким образом, вы создаете единый интерфейс для работы с различными классами, что делает код более чистым и понятным.