Класс обертки Mysqli by Koenig (Допилить)

9.19K
.
Koenig
(\/)____o_O____(\/)
Delphinum,
interface SingletonInterface {
    public function getInstance();
}

trait SingletonTrait {
    protected static $instance = null;
    
    public function __construct(){}

    public function __clone(){}

    public function __wakeup(){}
    
    public final static function getInstance() {
        if (null === self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}

class MyClass implements SingletonInterface{
    use SingletonTrait;
  
    public function test() {
        echo '<pre>' . print_r($this, 1) . '</pre>';
    }
}

$a = MyClass::getInstance();
$a->test();
.
(\/)____o_O____(\/)
Delphinum, вроде да, это прибавка к абстракции и интерфейсам
.
Delphinum
Koenig, Как видно из последнего примера, MyClass теперь может являться подсклассом некоторого класса (наследоваться от него), о при этом иметь определенное, нестандартное поведение (за счет реализации интерфейсов и использования трейтов). Другими словами интерфейсы в сочентании с трейтами определяют некоторые действия, которые могут осуществлять классы, а наследование используется в тех случаях, когда нужно сказать - класс B является классом A, но с уточненной логикой.

Я ответил на твой вопрос?
.
(\/)____o_O____(\/)
Delphinum, да, спасибо, пойду свалю все методы в один класс, без трэйтов
.
Koenig, я бы предложил разделить один класс на несколько. Класс MySQL должен отвечать за соединение с базой, а не генерацию DML (за это должны отвечать другие классы, на пример Select, Update и т.д.)
.
(\/)____o_O____(\/)
Delphinum, там много методов связанных с placeholder , так как стандартная реализация сильно хромает, в PDO удобнее, вот разделить как минимум на Builder и Mysqli надо, изначально так и хотел
.
(\/)____o_O____(\/)
Delphinum, а еще вопрос по исключениям, я тут намутил уже в классе, но не знаю верно ли так мутить исключения
.
Koenig,
try {
            if ($this->stmt) {
                return $this->stmt->param_count;
            }
        }
        catch(mysqli_sql_exception $e) {
            throw $e;
        }

Зачем так делать?
.
(\/)____o_O____(\/)
Delphinum, я же говорю, намутил, а как по нормальному замутить не воткну
.
Delphinum
Koenig, с инсключениями все довольно просто:
* Стараемся обработать проблемы в тех местах где они появляются. Так, если мы получили число меньшее нуля, когда нужно положительное, приводим число к нулю (или используем какой либо другой подход);
* Если код, обнаруживший проблему не может обработать ее сам, то он выбрасывает исключение как бы говоря "я не знаю что с этим делать и умываю руки". Исключения должны обрабатываться выше;
* Если же код обнаружил ошибку, которой в принципе быть не должно (на пример метод получил данные, которые не должен был получить или эти данные некоректны и их нельзя исправить), используются http://php.net/manual/ru/funct ... t.php для отлова этих проблемных мест

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

Так же нужно решить, следует ли вообще использовать исключения в программе, или можно обойтись без них.
Всего: 362