За последние 24 часа нас посетили 74182 программиста и 10165 роботов. Сейчас ищут 2483 программиста ...

При вызове функции по имени из переменной не передаются параметры

Тема в разделе "PHP для новичков", создана пользователем winmasta, 25 май 2017.

  1. winmasta

    winmasta Новичок

    С нами с:
    25 май 2017
    Сообщения:
    9
    Симпатии:
    1
    Всем добрый день, есть 2 php файла, первый (типа "входной") и второй с нужными функциями, которые запускаются по имени, сформированному из переменных в первом файле.

    Функция (из второго файла)

    Код (Text):
    1. function driver_before_updated($domen, $tz, $region_code, $hook, $user_id, $payload_values, $payload_recordId)
    Как она вызывается (из первого файла)

    Код (Text):
    1. $response = $scenario($domen, $tz, $region_code, $hook, $user_id, $payload_values, $payload_recordId);
    Функция вызывается и работает, но проблема в том, что переменные в эту функцию не передаются, т.е. в первом файле перед входом в функцию они определены (проверял), а в функции уже нет. Вариант объявить их везде как глобальные не подходит.

    Возможно я чего-то еще не понимаю, с удовольствием почитаю ссылки по теме.
     
  2. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Как происходит передача параметров в функцию тест на примере ниже
    PHP:
    1. $param1 = ' test 1';
    2. $param2 = ' test 2';
    3.  
    4. print test($param1, $param2);
    5.  
    6. function test($a, $b)
    7. {
    8. return $a.$b;
    9. }
    Какой процесс у вас происходит, сложно даже назвать.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    @winmasta
    должны попадать, если находятся сами в общей области видимости, а не в функции какой спрятаны.

    скажем так, обязаны и обычно попадают.
    покаж код.
     
  4. winmasta

    winmasta Новичок

    С нами с:
    25 май 2017
    Сообщения:
    9
    Симпатии:
    1
    Код (Text):
    1. <?php
    2. require 'taxium_driver.php';
    3. require 'db.php';
    4.  
    5. unlink ('taxium.txt');
    6. $file = fopen('taxium.txt','a');
    7.  
    8. //Парсим полученный хук.
    9. $hook = json_decode(file_get_contents('php://input'), true);
    10. $hook_event = $hook["hook"]["event"];
    11. $sc_name = explode(".", $hook_event);
    12. $user_id = $hook["user"]["id"];
    13. $payload_values = $hook["payload"]["values"];
    14. $payload_recordId = $hook["payload"]["recordId"];
    15. $req = json_decode(urldecode(filter_input(INPUT_SERVER, "QUERY_STRING")), true);
    16. $domen_id = $req["domen_id"];
    17. $catalog = $req["catalog"];
    18. //Запрос данных в БД, а именно в таблице ssa_domens.
    19. $query = "SELECT domen, tz, region_code, db FROM ssa_domens where id = ".$domen_id.";";
    20. $res = dbconn($query);
    21. dbclose();
    22. $domen=$res["domen"];
    23. $tz=$res["tz"];
    24. $region_code=$res["region_code"];
    25. $db=explode(" ",$res["db"]);
    26. $user=$db[0];
    27. $pass=$db[1];
    28. //Составляем имя файла сценария, запускаем его, если нужно, приходит ответ на хук.
    29. if (count($sc_name) === 3) {
    30.     $scenario = $catalog."_".$sc_name[1]."_".$sc_name[2];
    31. } else {
    32.     $scenario = $catalog."_".$sc_name[1];
    33. }
    34. $response = $scenario($domen, $tz, $region_code, $hook, $user_id, $payload_values, $payload_recordId);
    35. fwrite($file, $response."\n");
    36. if ($msg) {
    37.     echo ($msg);
    38. }
    39. fclose($file);
    заодно попинайте если что где неверно написано, только учусь вторую неделю, файл там создается для дебаггинга, к логике отношения не имеет
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    как ты проверяешь, что не прокатило?
    может пустой ответ правильный?
     
    winmasta нравится это.
  6. winmasta

    winmasta Новичок

    С нами с:
    25 май 2017
    Сообщения:
    9
    Симпатии:
    1
    начал копипастить код, где проверяю пришедшие значения и понял, то не там проверяю, нашел ошибку, теперь все прекрасно приходит как и должно быть, спасибо
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    крутые! Молодец!
     
  8. winmasta

    winmasta Новичок

    С нами с:
    25 май 2017
    Сообщения:
    9
    Симпатии:
    1
    Кину второй сценарий

    Код (Text):
    1. <?php
    2. require 'bpium_api.php';
    3. $catalogId = 36;
    4.  
    5. function driver_created($domen, $tz, $region_code, $hook, $user_id, $payload_values, $payload_recordId) {
    6.     global $catalogId;
    7. //    unlink ("taxium_driver_created.txt");
    8. //    fopen("taxium_driver_created.txt","a");
    9.  
    10.     //Логика сценария.
    11.     $sm_bal = $payload_values["4"];
    12.     if (is_null($sm_bal)) {
    13.         $sm_bal = 0;
    14.     }
    15.     $deb_sum = $payload_values["29"];
    16.      if (is_null($deb_sum)) {
    17.         $deb_sum = 0;
    18.     }
    19.     $total_bal = $sm_bal - $deb_sum;
    20.     $req_type = "PATCH";
    21.     $recordId = $payload_recordId;
    22.     $body = '{"values":{"4":"'.$sm_bal.'","29":"'.$deb_sum.'","30":"'.$total_bal.'"}}';
    23.     $curl_res = send_req($req_type, $domen, $catalogId, $recordId, $body);
    24. //    fclose($file);
    25. }
    26.  
    27. function driver_before_updated($domen, $tz, $region_code, $hook, $user_id, $payload_values, $payload_recordId) {
    28.     global $msg;
    29.     global $catalogId;
    30.        
    31. //    unlink ('taxium_driver_before_updated.txt');
    32. //    $file = fopen('taxium_driver_before_updated.txt','a');
    33. //    fwrite($file, $domen."\n");
    34.    
    35.     //Логика сценария.
    36.     $req_type = "GET";
    37.     $recordId = $payload_recordId;
    38.     $curl_res = json_decode(send_req($req_type, $domen, $catalogId, $recordId), true);
    39.     $comment_old = $curl_res["values"]["25"];
    40.     $comment = $payload_values["25"];
    41.     $fired = $payload_values["6"][0];
    42.     $fired_date = $payload_values["28"];
    43.     $ratio = $payload_values["24"];
    44.     $ratio_old = $curl_res["values"]["24"];
    45.     //fwrite($file, 'ratio '.$ratio.' ratio_old '.$ratio_old."\n");
    46.     if ($fired == 3) {
    47.         if (!$fired_date) {
    48.             $msg = '{"message":{"title":"Внимание.","text":"Необходимо указать дату расторжения договора."}}';
    49.         }
    50.         if ((!$ratio and $ratio_old == 0) or ($ratio == 0 and $ratio_old == 0)) {
    51.             $msg = '{"message":{"title":"Внимание.","text":"Необходимо указать рейтинг водителя."}}';
    52.             header('Content-Type: application/json');
    53.             header('HTTP/1.1 404');
    54.             return headers_list();
    55.             }
    56.         if (!$comment and !$comment_old) {
    57.             $msg = '{"message":{"title":"Внимание.","text":"Необходимо указать комментарий."}}';
    58.             header('Content-Type: application/json');
    59.             header('HTTP/1.1 404');
    60.             return headers_list();
    61.         } elseif (!$comment and $comment_old) {
    62.             $msg = '{"message":{"title":"Внимание.","text":"Необходимо изменить комментарий."}}';
    63.             header('Content-Type: application/json');
    64.             header('HTTP/1.1 404');
    65.             return headers_list();
    66.         }
    67.     } else {
    68.         //fclose($file);
    69.         return header('HTTP/1.1 200');
    70.     }
    71. }
    72.  
    73. function driver_updated($domen, $tz, $region_code, $hook, $user_id, $payload_values, $payload_recordId) {
    74.     global $catalogId;
    75.        
    76.     if ($user_id == 1) {
    77.         return;
    78.     }
    79.     //Логика сценария.
    80.     $req_type = "GET";
    81.     $recordId = $payload_recordId;
    82.     $curl_res = json_decode(send_req($req_type, $domen, $catalogId, $recordId), true);
    83.     $fio = $curl_res["values"]["2"];
    84.     $dr = $curl_res["values"]["3"];
    85.     $passport = $curl_res["values"]["8"];
    86.     $address = $curl_res["values"]["9"];
    87.     if (is_array($curl_res["values"]["10"][0])) {
    88.         $tel = $tel["contact"];
    89.     }
    90.     $link = 'http://bpiumupload.ooossa.com/download.php?fio='.$fio.'&dr='.substr($dr, 0, 10).'&passport='.$passport.'&addres='.$address.'&tel='.$tel;
    91.     $req_type = "PATCH";
    92.     $recordId = $payload_recordId;
    93.     $body = '{"values":{"14":[{"contact":"'.$link.'"}]}}';
    94.     $curl_res = send_req($req_type, $domen, $catalogId, $recordId, $body);
    95. }
    посмотрите, может где не правильный синтаксис или еще чего, короче насколько это нормальный код, если нужно выложу доп сценарии для работы с бд и апи, в принципе интересует, правильно ли я разработал архитектуру, правильно ли написал ?
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    не думай об этом
    будешь много думать о форме - будешь мало делать
    а мастерство приходит с опытом