эти три параметра в where ну очень не красиво смотряся, да и '?' в качестве аргументов это вобще фейл как по мне.
неужели нельзя как то подругому реализовать?
flaky, похоже ты не видел какой билдер в
кохане
Я не хочу тебя огорчать, но помоему других более подходящих вариантов нет.
Koenig, в where параметр $type я вижу проверка идет с учетом регистра. Т.е. если я захочу написать LIKE вместо like (а я всегда так пишу), то ничего не выйдет.
А вот здесь вообще мультибайтовую функцию зачемто применил, когда вполне хватилобы strtolower
(mb_strtolower($type), array('asc', 'desc'))
Screamer, наоборот, можно в обоих регистрах писать, по сути хватило бы и обычной функции
правда смотрел вызов, код не смотрел, там файлов куча
Koenig, сейчас вот даже специально в ман заглянул. in_array() учитывает регистр строки.
А у тебя там в методе where():
$str = in_array($type, array(/*ololo ...*/))
? '`' . $field . '`' . $type
. (is_int($value)
? $value
: ($value == '?'
? $value
: ($type == 'like'
? "'%" . $value . "%'"
: "'" . $value . "'"
)
)
)
: die('invalid argument in where');
Кстати, а почему бы не заюзать исключения? К чему die? Его не отловить, в лог не записать. Неудобно же.
Для неверного типа аргумента юзаем InvalidArgumentException
Для неверного значения UnexpectedValueException
Далее по методу RuntimeException
Ну и т.д.
Screamer, это потом, когда пишешь запрос!, сразу видишь сообщение где косяк
Koenig, везде в принципе подход одинаковый, я сейчас сам мельком полистал сырцы. Файлов говоришь куча, билдер что-ли не смог найти?
core\classes\database\query
В принципе для библиотеки это нормально, когда куча файлов.
Было бы не плохо если бы ты довел класс до конца включая форматирование как рекомендуется в PSR.
Заюзал неймспейсы, что бы можно было автозагрузчиком подхватить не вмешиваясь ни в код класса, ни в код автозагрузчика (Подразумевается, если автозагрузчик ориентирован на неймспейсы конечно же.)
Исключения, чтобы можно было перехватывать ошибки ну и т.д.
#800360
Не совсем понял. Про исключения чтоли? Так можно же их просто выбрасывать без отлова, и потом уже задать обработчик не перехваченных исключений, где юзер сам решает что с ними делать, вывести в браузер или сохранить в лог, или и то и другое. А с die() впринципе ничего не сделаешь.