Задать вопрос

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

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

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

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


Хочется получше вникнуть в правильную архитектуру в ООП, прошу помощи в более актуальном решении.
  • Вопрос задан
  • 178 просмотров
Подписаться 1 Оценить 3 комментария
Решения вопроса 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;
  }
}


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

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

Похожие вопросы