Помогите 'расшифровать' код

alexander.pro

Новичок
Помогите 'расшифровать' код

Доброе время...
Есть класс работы с MySQL базой, одним из методов класса выступает это:
PHP:
<?php
function _fixSql($args) { 
  $sql = array_shift($args); 
    if(count($args)) { 
    $data = array_map(array('mysql','esc'), $args); 
    $sql = str_replace(array('%','?'), array('%%','%s'), $sql); 
    $sql = vsprintf($sql, $data); } 
return $sql; 
}
?>
Читал мануал по функциям, попытался прокомментировать.

PHP:
<?php
function _fixSql($args) { //Функции передается аргумент(строка).
  $sql = array_shift($args);//Эта функция мне не понятна.
    if(count($args)) { //?
    $data = array_map(array('mysql','esc'), $args);//? 
    $sql = str_replace(array('%','?'), array('%%','%s'), $sql); //Заменяем символы.
    $sql = vsprintf($sql, $data); } //Выводим отформатированную строку.
return $sql; 
}
?>
В общем некоторые строки мне непонятны, не то чтобы я в претензиях к автору, просто хочется разобраться.
Заранее спасибо....
 

Активист

Активист
Команда форума
PHP:
if(count($args)) // если массив args содержит 1 и более элементов
$data = array_map(array('mysql','esc'), $args);// здесь к каждому элементу массива были применены самописные функции mysql и esc
 

alexander.pro

Новичок
Автор оригинала: Beavis
вам обоим - http://ru2.php.net/docs.php
там про все функции написано
Вы думаете, что я документацию не читал? Зная, что меня отправят, я решил сразу найти информацию по этим функциям. Вот только не понятна цель применения например arraу-shift, ведь информация передается через строки.
 

Фанат

oncle terrible
Команда форума
учитывая общий тон этого кода, я подозреваю, что в функциях esc и mysql лежит мяяяяясо =)

-~{}~ 18.04.09 09:24:

ведь информация передается через строки.
точно через строки, а не через массивы?
 

Фанат

oncle terrible
Команда форума
да ладно.
мало ли в бразилии педров.
уж чего-чего, а мусорокода здесь достаточно, нового не надо

вопросы еще остались?
 

Alexandre

PHPПенсионер
$sql = array_shift($args);//Эта функция мне не понятна.
судя по названию - сдвигает эл-ты массивы http://www.php.net/manual/en/function.array-shift.php
array_shift() извлекает первое значение массива array и возвращает его, сокращая размер array на один элемент. Все числовые ключи будут изменены таким образом, что нумерация массива начнётся с нуля, в то время как строковые ключи останутся прежними. Если array пуст (или не является массивом), будет возвращён NULL.
 

DiMA

php.spb.ru
Команда форума
зачем разбираться в говнокоде?
сделай вывод лог входного аргумнта $args и результата $sql
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Активист
PHP:
$data = array_map(array('mysql','esc'), $args);// здесь к каждому элементу массива были применены самописные функции mysql и esc
Автор оригинала: Фоннат
я подозреваю, что в функциях esc и mysql лежит мяяяяясо
Бгы-гы-гы, знатоки. Там применяются в любом случае не функции "mysql" и "esc", а метод "esc" класса "mysql".
 

fixxxer

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

$data = $args.map(Mysql::esc);
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: *****
К вопросу о дебильности функций типа array_map
Это, как верно отметил товарищ fixxxer, дебильность не конкретно функции array_map, а убогого недоязыка ПоХаПэ вообще: в ём нету типа данных "функция" и приходится вот так вот извращаться с массивами.
 

Lightning

Трудоголик
убогого недоязыка ПоХаПэ вообще: в ём нету типа данных "функция"
Хорошо что в пятерке есть нормальное ООП... А вообще, наверное было бы круто, если на PHP можно было бы программировать как на функциональном языке...
 

fixxxer

К.О.
Партнер клуба
Для этого надо немного: closures в 5.3 сделаны, но по причинам backwards compatibility (и превалирующем мнении среди разработчиков php, что это язык для быдлокодеров) функцию как полноценный тип данных хрен мы получим (получили тип данных closure, который не есть функция).
 

Beavis

Banned
Автор оригинала: Sad Spirit
Бгы-гы-гы, знатоки. Там применяются в любом случае не функции "mysql" и "esc", а метод "esc" класса "mysql".
и я про то же))

Автор оригинала: *****
К вопросу о дебильности функций типа array_map
во всех функциях коллбеки так задаются...
 

alexander.pro

Новичок
Думаю для передачи строки, например 'SELECT*FROM books' мне подойдет:

PHP:
<?php
   private function FixedSQL($argument){
     $this->query = trim(strip_tags($argument));
     $this->query = str_replace(array('%','?'), array('%%','%s'), $this->query);
     $this->GetQuery($this->query);
   }
?>
 

Фанат

oncle terrible
Команда форума
что такое "передача строки через например"?

нет, не подойдет.

-~{}~ 18.04.09 18:05:

это вообще какая-то бредовая функция.
что в ней делает strip_tags?
и какова конечная цель всех этих манипуляций?
 

alexander.pro

Новичок
Эта функция для экранирования символов <html> <php>. Ну и для замены некоторых символов...
 

Фанат

oncle terrible
Команда форума
а зачем экранировать символы <html> <php>?
и какие символы она заменяет и зачем?
 
Сверху