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();
Delphinum, вроде да, это прибавка к абстракции и интерфейсам
Koenig, Как видно из последнего примера, MyClass теперь может являться подсклассом некоторого класса (наследоваться от него), о при этом иметь определенное, нестандартное поведение (за счет реализации интерфейсов и использования трейтов). Другими словами интерфейсы в сочентании с трейтами определяют некоторые действия, которые могут осуществлять классы, а наследование используется в тех случаях, когда нужно сказать - класс B является классом A, но с уточненной логикой.
Я ответил на твой вопрос?
Delphinum, да, спасибо, пойду свалю все методы в один класс, без трэйтов
Koenig, я бы предложил разделить один класс на несколько. Класс MySQL должен отвечать за соединение с базой, а не генерацию DML (за это должны отвечать другие классы, на пример Select, Update и т.д.)
Delphinum, там много методов связанных с placeholder , так как стандартная реализация сильно хромает, в PDO удобнее, вот разделить как минимум на Builder и Mysqli надо, изначально так и хотел
Delphinum, а еще вопрос по исключениям, я тут намутил уже в классе, но не знаю верно ли так мутить исключения
Koenig,
try {
if ($this->stmt) {
return $this->stmt->param_count;
}
}
catch(mysqli_sql_exception $e) {
throw $e;
}
Зачем так делать?
Delphinum, я же говорю, намутил, а как по нормальному замутить не воткну
Koenig, с инсключениями все довольно просто:
* Стараемся обработать проблемы в тех местах где они появляются. Так, если мы получили число меньшее нуля, когда нужно положительное, приводим число к нулю (или используем какой либо другой подход);
* Если код, обнаруживший проблему не может обработать ее сам, то он выбрасывает исключение как бы говоря "я не знаю что с этим делать и умываю руки". Исключения должны обрабатываться выше;
* Если же код обнаружил ошибку, которой в принципе быть не должно (на пример метод получил данные, которые не должен был получить или эти данные некоректны и их нельзя исправить), используются
http://php.net/manual/ru/funct ... t.php для отлова этих проблемных мест
Звучит все довольно просто, но для правильного использования этого подхода нужно много практиковаться, ошибаться и исправляться. Важно понимаеть, какие действия в программе считаются нормальными (первый случай), какие исключительными, но допустимыми (второй случай), а какие недопустимыми и критическими (третий случай).
Так же нужно решить, следует ли вообще использовать исключения в программе, или можно обойтись без них.