Правильно ли я использую ООП? Все классы разложены по папкам согласно неймспейсам (если используются) в папке 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; # ... }
В общем, вы следуете основным принципам ООП, таким как инкапсуляция, наследование и полиморфизм. Ваши классы разделены по папкам согласно неймспейсам, что делает код более организованным.
Использование интерфейсов, конструкторов, приватных переменных и методов, а также вынос повторяющегося кода в отдельные методы - все это правильные подходы в ООП.
Использование ссылок для упрощения доступа к переменным внутри методов не является плохой практикой, но не всегда необходимо. Это может привести к сложностям при понимании кода другими разработчиками. Поэтому рекомендуется использовать $this-> для явного обращения к переменным объекта.
Использование serialize()/unserialize() для хранения массивов в константах не самый эффективный способ. Вместо этого рекомендуется создать методы или классы для работы с этими данными.
Функция CheckArgs() для проверки корректности ввода также улучшает читаемость и обслуживаемость кода.
В целом, ваш код выглядит хорошо структурированным и соответствует основным принципам ООП. Постоянно стремитесь к улучшению и соблюдайте принципы чистого кода.
В общем, вы следуете основным принципам ООП, таким как инкапсуляция, наследование и полиморфизм. Ваши классы разделены по папкам согласно неймспейсам, что делает код более организованным.
Использование интерфейсов, конструкторов, приватных переменных и методов, а также вынос повторяющегося кода в отдельные методы - все это правильные подходы в ООП.
Использование ссылок для упрощения доступа к переменным внутри методов не является плохой практикой, но не всегда необходимо. Это может привести к сложностям при понимании кода другими разработчиками. Поэтому рекомендуется использовать $this-> для явного обращения к переменным объекта.
Использование serialize()/unserialize() для хранения массивов в константах не самый эффективный способ. Вместо этого рекомендуется создать методы или классы для работы с этими данными.
Функция CheckArgs() для проверки корректности ввода также улучшает читаемость и обслуживаемость кода.
В целом, ваш код выглядит хорошо структурированным и соответствует основным принципам ООП. Постоянно стремитесь к улучшению и соблюдайте принципы чистого кода.