ФорумПрограммированиеPHP для идиотов → Глобальные переменные

Глобальные переменные

  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 17 марта 2010 г. 13:45, спустя 5 минут 23 секунды

    Плейсхолдеры конечно рассматриваю как вариант, если не получится сделать так, как хочу.
    Но все же склоняюсь к функциям обработки для разных типов.
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 17 марта 2010 г. 14:40, спустя 55 минут 39 секунд

    SpartakuS, нельзя сразу предвидеть все виды запросов и все исключительные ситуации. Я думаю ты найдешь решение, либо благодаря своему, либо чужому опыту.

    Сначала, сделай как можешь, потом переделай и так далее, сам знаешь
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 17 марта 2010 г. 15:19, спустя 38 минут 12 секунд

    SpartakuS, ну а как ты хотел бы чтоб система поняла какие именно переменные делать "глобальными" для тебя? Ты же их все равно в функцию закидываешь. Только вместо того, чтоб кидать их в одну функцию с обработкой запроса, ты их кидаешь в отдельную функцию. Получается две функции вместо одной. И в чем выгода?
    п.с. Да, именно плейсхолдеры и нужно изать, если больше ничего не придумал.
    п.с.2 Мне больше по душе СКЛ-билдер, по подобию встроенного в CodeIgniter.
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 17 марта 2010 г. 15:49, спустя 30 минут 12 секунд


    п.с.2 Мне больше по душе СКЛ-билдер, по подобию встроенного в CodeIgniter.

    тот что активрекордом звётся там?
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 17 марта 2010 г. 16:11, спустя 22 минуты

    Givi, щас с браузера напишу как я хотел.
    Есть запрос:

    $name = 'SpartakuS';
    $id = '823';
    $db->query('DELETE FROM `user` WHERE `name` = $name AND `id` = $id');

    Не придерайтесь к запросу, я понимаю, что по смыслу он ебланский. Просто первое, что пришло в голову.
    Далее функция.

    public function query ($query)
    {
    //тут выполняем запрос.
    //так как параметр в одинарных кавычках, то у нас все переменные прийдут не заменяясь на их значения.
    //парсим запрос, забираем список переменных. В программе они у нас заданы, в функции мы их не видим.
    //вот что придумал я
    $pattern = "/\\$([a-z_]{1}[-a-z0-9_]*)/i"; //ищем переменные. регулярку не отлаживал, не придерайтесь
    preg_match_all ($pattern, $query, $vars); //юзаем регулярку
    foreach ($vars[1] as $var) //имена переменных записываем в $var. У нас $var=='id' и $var == 'name'
    {
    global $$var; //добавляем в глобал найденные переменные
    }
    //Теперь переменные $id и $name доступны здесь и равны 823 и SpartakuS соответственно.
    //Делаем пару манипуляций над запросом и наш запрос становится безопасным
    }

    А если вызвать эту функцию в другой функции. К примеру
    $user->delete(823);
    ////////////////////////////////
    public function delete ($userid)
    {
    $id = $userid;
    $db->query('DELETE FROM `user` WHERE `id` = $id');
    }

    То в функции $db->query $id мы уже не увидим. Не смотря на глобал.
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 17 марта 2010 г. 23:24, спустя 7 часов 13 минут 24 секунды

    пля, область видимости знаем что такое?
    твой код будет делать так:

    $id = 'admin_id_here';
    $user->delete(823);

    public function delete ($userid)
    {
       $id = $userid;
       // kill da admin, mazafaka!!!
       $db->query('DELETE FROM `user` WHERE `id` = $id');
    }

    Прикольно, не правда ли?
    Work, buy, consume, die
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 18 марта 2010 г. 1:03, спустя 1 час 38 минут 41 секунду

    SpartakuS, я понял что примерно ты хотел получить.

    1. У тебя получается такая картина: если ты переменную id получаешь не напрямую, а откудато (с функции или с БД или пофиг откуда), то в коде, вместо того, чтоб написать примерно следующее:
    $db->query('SELECT * FROM `table` WHERE id='.$id,array($_POST['id']));
    //array($_POST['id'] - массив с переменными для формирования запроса

    ты вынужден вписать лишнее присвоение:
    $id = $_POST['id']; // $id = $mysql_result['id'] или другое подобное
    $db->query('SELECT * FROM `table` WHERE id='.$id);

    И вроде как памяти 5-ка пыхи не жрет уже, но код становится говнистее визуально

    2. Использовать глобалсы - это уже ппц как нехорошо, если юзать их "направо и налево".

    Больше ничего сказать конкретного не могу, но мне это идея не очень нравится, учитывая что ты "не контролируешь" полностью что попадает в функцию с запросом.
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 18 марта 2010 г. 1:06, спустя 3 минуты 14 секунд

    SpartakuS
    короче вообще херовая затея, ужасно неудобно. Просто это уже не велосипед, а колесо. За все года PHP уже давно придумали как удобно и имя ему плейсхолдеры ))
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 18 марта 2010 г. 1:22, спустя 16 минут 2 секунды


    SpartakuS
    короче вообще херовая затея, ужасно неудобно. Просто это уже не велосипед, а колесо. За все года PHP уже давно придумали как удобно и имя ему плейсхолдеры ))
    придумали это не в пхп, а когда плейсхолдеры придумали, пхп еще был и правда "для домашних страничек" … пхп это реализоваывали полвека, если бы то было сразу, не появилась бы куча библиотек для работы с базой, ибо нативно этопиздец
    Спустя 82 сек.
    http://exler.ru/blog/item/7727/
    Спустя 11 сек.
    не туда)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 18 марта 2010 г. 2:37, спустя 1 час 15 минут 8 секунд

    phpdude, у экслера закодирован текст
    "іосмотрел эту запись уфологической передачи - и просто кровь застvла в венах и артери х. T жилах не застvла, по жилvм кровь не ходит. =о сіжет действительно страшнvй. іила дама-уфолог вvводила на принтер своі статьі, а там вместо статьи - і+TTL=L+ +T L=+іTL=+T-=! іосмотрите, это ведь не шутка - все правда! +на даже что-то попvталась расшифровать. =о, конечно, пройдет много лет прежде чем ученvе сумеіт прочитать загадочнуі ASCII-клинопись."
    ιιlllιlllι унц-унц
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 18 марта 2010 г. 2:54, спустя 16 минут 28 секунд

    artoodetoo, http://www.artlebedev.ru/tools/decoder/ рулит?
    adw/0
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 18 марта 2010 г. 3:16, спустя 22 минуты 23 секунды

    Naaayh, я это понял. Если бы этого не было, то я бы и тему не создавал.
    В общем не катит эта идея и для меня. Изначально я не помнил про массивы. Еще вера вспомнил. И всетаки плейсхолдеры не рулят. Ну да ладно). Всем спасибо)
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 18 марта 2010 г. 4:30, спустя 1 час 13 минут 53 секунды

    SpartakuS
    попробуй 'DELETE FROM `user` WHERE `id` = $id' сделать с передачей массива и парсингом конечных автоматов
    Спустя 251 сек.
    конечным автоматом
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 18 марта 2010 г. 4:58, спустя 28 минут 2 секунды

    adw0rd, нет. я пользуюсь Far Manager 2. он умеет переключать кодировки
    ιιlllιlllι унц-унц
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 18 марта 2010 г. 5:34, спустя 35 минут 33 секунды

    А, ясно, прикладной софт рулит…. аля всякие "штрилитцы" и "бреды"
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!