@Vladimir-Hetman

Типы данных и принцип единой ответственности?

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

P.S.
Зачем нужна эта единая ответственность?
Чтобы можно было легко изменять отдельные компоненты
в моём случае это классы "value_sort", "stringSort", "view_result"
при этом чтобы изменение одного компонента никак не нарушала работу другого компонента?
Поэтому и придумали эту самую единую ответственность?

interface sort_method_i{
  function sort_s(array &$arr):void;
}
 
interface show_result_i{
  function show_view(array $arr):void;
}
 
 
 
 
 
class value_sort {
 
  private array $arr = [    
   [20, 10, "a", 30, "c", 40, "f", "b"],
   ["b", 30, "c", 10, "a", 20, "f", 40]
  ];
 
  function getValue():array{
   return $this->arr;
  } 
}
 
 
 
 
 
class stringSort implements sort_method_i  {
 
  function __construct(private string $type_sort){}
 
  function sort_strings_and_then_number():callable{
 
   return function (mixed $a, mixed $b):int{             
                      
      if(gettype($a) !== gettype($b)){
 
        if(is_string($a)){
        return -1;
        }
 
        else{
        return 1;
        }
 
      }
 
      return $a<=>$b;   
   
   };
 
  }
 
 
  function sort_s(array &$arr):void{
   foreach($arr as &$items){
     ($this->type_sort)($items, $this->sort_strings_and_then_number());
   }}
 
}
 
 
 
 
 
class view_result implements show_result_i {
 
  function __construct(private int $index, private  string $marks){}
 
  function show_view(array $arr):void{
 
    echo implode('<br>', array_map(function($massive){
 
      $massive[$this->index] .= $this->marks;
 
      return implode('', $massive);
    }, $arr));
    
  }
 
} 
 
 
 
$value= new value_sort();
$sort = new stringSort('usort');
$view = new view_result(3, '---');
 
$getValue = $value->getValue();
$sort->sort_s($getValue);
$view->show_view($getValue);
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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