Правильно ли я использую ООП? Все классы разложены по папкам согласно неймспейсам (если используются) в папке class. Подгружаются autoloader'ом:# константы
const DS = DIRECTORY_SEPARATOR;
# установка текущей директории
chdir(__DIR__);
# инициализация автозагрузки
spl_autoload_register(function($classname) {
$filepath = 'class'.DS.str_replace('\\', DS, $classname).'.php';
return file_exists($filepath) ? include_once($filepath) : false;
});Сначала создаём интерфейс, затем имплементируем его (не всегда нужно).Если есть переменная, с которой нужно долго работать, как ссылка на БД или на файл, делаем для неё приватную переменную и сеттер (часто роль сеттера выполняет конструктор):private $db;
function __construct(DB $db) {
# установка класса БД
$this->db = $db;
}Естественно, повторяющийся код выносим в отдельные методы. Если есть похожие методы в разных классах, выносим их в отдельный класс и используем или наследуем этот класс, смотря насколько общий функционал.Константы определяются вне классов. Константы классов лишь ссылаются на уже определенные снаружи:const LOCALES_TABLE = 'com_locales';
class Locale {
private $localestable = LOCALES_TABLE;
# ...
}Использую serialize()/unserialize() для хранения массивов в константах. Кажется, в PHP7 это уже не нужно, но не помню. Хоть это к ООП не относится, но интересно:const ABS_TABLES = serialize([
'com_abs_str',
'com_abs_int'
]);
class ABS_Tables {
private $tables;
function __construct() {
$tables = &$this->tables;
$tables = unserialize(ABS_TABLES);
}
# ...
}В каждом методе используемые переменные линкуются чтобы не писать $this-> при обращении. Насколько это правильно?function GetLanguageByID($langid) {
# линки
$db = &$this->db;
$langstable = &$this->langstable;
# ...
}UPD (некоторые товарищи не "догоняют"):
Во многих языках если не нашлось переменной с опеределённым именем определённой в текущем пространстве переменных, она ищется выше. В PHP такого нет. Если я обращаюсь к `$anyvar` из метода класса, то он не найдёт переменную и выкинет нотис. А я хочу обращаться к `$anyvar` класса. Вот и переименовываю `$this->anyvar` в `$anyvar` чтобы меньше писать `$this->` внутри метода. А ссылка - чтобы и чтение и запись в переменную работала.Для проверки корректности ввода я использую такую функцию чтобы не проверять вручную:private function CheckArgs(array $inputs) {
foreach ($inputs as $input)
if ($input === [] || $input === '' || $input === null)
return false;
return true;
}
function InsertValues($table, array $keys, array $values_arr) {
# проверка всех аргументов
if (!$this->CheckArgs(func_get_args()))
return;
# ...
}
function SelectValues($table, array $wherekeys = [], array $wherevalues = []) {
# проверка определенных аргументов
if (!$this->CheckArgs([$table]))
return;
# ...
}

21 Авг 2019 в 07:02
175 +1
0
Ответы
1

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

Использование интерфейсов, конструкторов, приватных переменных и методов, а также вынос повторяющегося кода в отдельные методы - все это правильные подходы в ООП.

Использование ссылок для упрощения доступа к переменным внутри методов не является плохой практикой, но не всегда необходимо. Это может привести к сложностям при понимании кода другими разработчиками. Поэтому рекомендуется использовать $this-> для явного обращения к переменным объекта.

Использование serialize()/unserialize() для хранения массивов в константах не самый эффективный способ. Вместо этого рекомендуется создать методы или классы для работы с этими данными.

Функция CheckArgs() для проверки корректности ввода также улучшает читаемость и обслуживаемость кода.

В целом, ваш код выглядит хорошо структурированным и соответствует основным принципам ООП. Постоянно стремитесь к улучшению и соблюдайте принципы чистого кода.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 424 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир