powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: Посоветуйте, как сделать прототип функции
10 сообщений из 10, страница 1 из 1
PHP: Посоветуйте, как сделать прототип функции
    #38406647
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у меня функция, скажем cmd_curl.
Функция подключается к веб-сервису, делает определенный запрос с помощью cURL и возыращает результат.
Запросы бывают разных типов, у разных типов разные URL. Параметры запросов передаются в POST, у разных типов разный набор параметров; некоторые запросы параметров не имеют, у большей части запросов параметры задаются в JSON (json={'fld':value}), некоторые запросы передаются в виде пар параметр/значение, а для некоторых типов передается пустой JSON (json={}).
Сейчас у меня такой прототип:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
function cmd_curl($url, $data)
{
  $ch = curl_init();
  ...
  if(isset($data)) {
    $post = ['json' => json_encode($data)]
  }
  ...
}


Вызывается как:
cmd_curl('svc', null) — вызов без параметров
cmd_curl('svc', ['fld1'=>1, 'fld2'=>2, ...]) — параметры в JSON
cmd_curl('svc', array()) — в параметрах пустой JSON (json={})
cmd_curl('svc', 'p1=v1&p2=v2') — параметры уже подготовлены

Но я не знаю, как отличить null от array.
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
PHP: Посоветуйте, как сделать прототип функции
    #38406659
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я подумал и решил сформулировать вопрос иначе. Более понятно, как мне кажется.
У меня есть функция с двумя параметрами, $url и $data; функция выполняет POST-запрос, в $url указан адрес, в $data параметры запроса.
Мне нужно различать следующие ситуации:
1. $data не задан или равен null.
2. В $data передается уже подготовленная строка параметров в формате параметр=значение.
3. Передается массив ключ=>значение, который кодируется в JSON.
4. Передается пустой JSON.
5. Передается массив-список (без ключей, array('str1','str2',...)).
...
Рейтинг: 0 / 0
PHP: Посоветуйте, как сделать прототип функции
    #38406781
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. $data не задан или равен null.
is_null() && function cmd_curl($url, $data = null)
2. В $data передается уже подготовленная строка параметров в формате параметр=значение.
пробуйте декодировать в пункте 3, иначе юзайтеуже онное
3. Передается массив ключ=>значение, который кодируется в JSON.
$decode = json_decode($data, 1);
if ($decode) ....
4. Передается пустой JSON.
вначале раскодируйте пунктом 3 а потом проверяйте
5. Передается массив-список (без ключей, array('str1','str2',...)).
ну тут логики вы не описали
...
Рейтинг: 0 / 0
PHP: Посоветуйте, как сделать прототип функции
    #38406798
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Э... У меня вопрос совершенно противоположный.
К тому же он не по реализации (http_build_query и json_encode я использовать умею), а по структуре.
То есть я думаю проверять (например) так:
Код: php
1.
2.
3.
4.
5.
6.
7.
if (is_array($data)) { //передан массив, пустой или не пустой, варианты 3, 4, 5
  //как различить array(), array(1,2,3) и array('c1'=>1,'c2'=>2,'c3'=>3)?
} else { //передан скаляр, пустой или не пустой, варианты 1, 2
  if(isset($data)) { //вариант 2
  } else { //вариант 1
  }
}
...
Рейтинг: 0 / 0
PHP: Посоветуйте, как сделать прототип функции
    #38406809
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас у меня такой код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	if (is_array($data))
	{
		if (count($data)==0)
		{
			curl_setopt($unifi_curl, CURLOPT_POSTFIELDS, http_build_query(['json'=>"{}"]));
		}
		else
		{
			curl_setopt($unifi_curl, CURLOPT_POSTFIELDS, http_build_query(['json'=>json_encode($data)]));
		}
	}
	else
	{
		if (isset($data)) curl_setopt($unifi_curl, CURLOPT_POSTFIELDS, $data);
	}


Но он не различает варианты 3 и 5 (ну разве что получать array_keys и проверять, что возвращается числовая последовательность).
...
Рейтинг: 0 / 0
PHP: Посоветуйте, как сделать прототип функции
    #38406820
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стыбрено
Код: php
1.
2.
3.
function is_assoc($array) {
  return (bool)count(array_filter(array_keys($array), 'is_string'));
}
...
Рейтинг: 0 / 0
PHP: Посоветуйте, как сделать прототип функции
    #38407319
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставновка задачи какаято неправильная.
...
Рейтинг: 0 / 0
PHP: Посоветуйте, как сделать прототип функции
    #38407392
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну может я использую неправильные наименования терминов, с PHP я знаком плохо.
Но сама задача довольно типичная — вынести в функцию одинаковый код, сделав вдобавок так, чтобы использование этой функции было удобным и легко читаемым.
...
Рейтинг: 0 / 0
PHP: Посоветуйте, как сделать прототип функции
    #38407415
Фотография vip-y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо всем за ответы
давайте я опишу более понятным языком, что мне нужно

пользователь выбирает на форме веб странице checkbox, вводит данные в текстовое поле
и мне нужно в зависимости от полученных данных сделать разные запросы и соответственно вывести на страницу таблицу HTML <table> c разным количеством столбцов и т.д.
вроде это обычная популярная тривиальная задача....
т.к. я делаю это впервой, может я просто не тем путем пошел....

подскажите как сделать правильно
...
Рейтинг: 0 / 0
PHP: Посоветуйте, как сделать прототип функции
    #38407420
Фотография vip-y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори плин не в той теме написал) удалите плз комент
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: Посоветуйте, как сделать прототип функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]