Как лучше организовать работу нескольких классов под одним началом?

Здравствуйте. Пишу для себя набор хелперов для работы с числами, текстом, датами и так далее. В каждой сущности (текст, числа) есть набор классов, которые отвечают за обработку какой-то конкретной ситуации. Хочется их красиво как-то объединить.

Чисто для примера:

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);


Хочется получше вникнуть в правильную архитектуру в ООП, прошу помощи в более актуальном решении.
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
zoonman
@zoonman
⋆⋆⋆⋆⋆
Ваш пример не совсем продуман.
Логичнее было бы предположить, что есть некоторый общий интерфейс, который будет объединять все классы и при этом представлять общие функции над операндами различных типов.
Допустим, вам нужно будет выполнять сложение с двумя аргументами.
Например так:

$math = new Calculator(); // в данном случае Number плохое имя, т.к. обозначает число, а не аггрегатор вычислительных операций
echo $math->sum(1, 2); // вернет 3
echo $math->sum(1.3, 2.7); // вернет 4.0


В данном случае один и тот же метод применяется к двум операндам различных типов. Вроде бы все красиво, но не совсем. В данном случае методы являются чистыми функциями и логичнее было бы их вызывать как статические методы, например так:

echo Calculator::sum(1, 2); // вернет 3
echo Calculator::sum(1.3, 2.7); // вернет 4.0


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

class Calculator 
{
  /**
   * Метод предназначен для суммирования двух аргументов 
   * @param number $firstArgument первый аргумент
   * @param number $secondArgument второй аргумент
   */
  public static function sum($firstArgument, $secondArgument) 
  {
    return $firstArgument + $secondArgument;
  }
}


В данном случае не нужно изобретать велосипедов, т.к. все функции работы над числами универсальны.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 13:47
1000 руб./за проект
26 апр. 2024, в 13:40
4000 руб./за проект
26 апр. 2024, в 13:39
500 руб./за проект