Данный код сортирует вложенные массивы, сначала сортирует строки, а потом числа.
В коде ниже соблюден ли принцип единой ответственности
а также правильно ли я установил типизацию данных?
И еще, код ниже гибкий благодаря интерфейсам?
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);