strongmaster
13.12.2015 - 16:47
Привет. Есть функция которая должна в случае успешной отработки должна вернуть массив.
Как сделать грамотно обработку исключнеий, то есть проверку на то вернула ли функция массив?
У меня примерно вот так.
<?php
function somefunction($input)
{
if (!isset($return_mass))
{
$return_mass[0] = '';
}
return array ($return_mass);
}
$test = somefunction('test');
if (count($test) == '1' && $test[0][0] == '')
{
echo "do something";
}
?>
Заранее спасибо.
AllesKlar
13.12.2015 - 17:17
strongmasterreturn array ($return_mass);
Твоя функция всегда будет возвращать массив.
Но смысл вопроса ясен.
Функцию пишешь ты, и что она будет возвращать во все 100% случаях ты знаешь.
Можно делать так:
function somefunction($input)
{
$return_mass = null;
if( все класно, то заполняем $return_mass) {
$return_mass = ['key1' => 'val1', 'key2' => 'val2'];
}
return $return_mass;
}
$test = somefunction('test');
if(!empty($test)) {
}
_____________
[продано копирайтерам]
strongmaster
13.12.2015 - 18:23
Спасибо. empty я не разу не использовал, надо попробовать.
Пока что вот так решил, с отдачей false, если нету массива
<?php
function somefunction($input)
{
if (isset($return_mass))
{
return array($return_mass);
}
return false;
}
$test = somefunction('test');
if ($test)
{
echo "ok";
} else
{
echo "no result";
}
?>
AllesKlar
13.12.2015 - 19:21
strongmasterЭто первый шаг в говнокод.
Пойди, поймой ботинок и начинай работать с типами.
Всю жизнь ты в лояльном к говнокоду php работать не будешь, а больше ниодин язык не позволит тебе такой финт с типами сделать.
Что значит
if ($test)
Это значит и 5, и "abc"
А вот array() уже не пройдет под условие, хотя это массив, просто он пустой.
_____________
[продано копирайтерам]
sergeiss
13.12.2015 - 19:34
Цитата (AllesKlar @ 13.12.2015 - 19:21) |
а больше ниодин язык не позволит тебе такой финт с типами сделать. |
JS позволит ;)
strongmaster, при таком подходе тебе нужно более строгое условие проверки делать. То есть, вместо твоего кода
$test = somefunction('test');
if ($test)
{
echo "ok";
} else
{
echo "no result";
}
Надо примерно так сделать:
$test = somefunction('test');
if ($test !== false)
{
echo "ok";
} else
{
echo "no result";
}
Цитата (AllesKlar @ 13.12.2015 - 19:21) |
Это первый шаг в говнокод. |
Вообще-то, многие функции в ПХП именно так и возвращают данные: false в случае неуспешности и какую-то величину в нормальном случае. Примеры могу привести, если сам не знаешь. Так что это не "говнокод", а нормальная ситуация. Как в ПХП, так и в JS.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
AllesKlar
13.12.2015 - 19:48
Цитата (sergeiss @ 13.12.2015 - 17:34) |
Так что это не "говнокод", а нормальная ситуация. Как в ПХП, так и в JS. |
Не по феншую это, возвращать строгий false, а встречать все, что угодно, которое может быть преобразовано в false.
Ну это ты пока такой, еще годик на яве попишешь и тоже будешь яванутый на всю голову
_____________
[продано копирайтерам]
xlebosol
13.12.2015 - 19:49
Функция всегда должна один тип возвращать, а не устраивать разношерстную компанию.
function somefunction($input)
{
$return_mass = array();
if( все класно, то заполняем $return_mass) {
$return_mass = ['key1' => 'val1', 'key2' => 'val2'];
}
return $return_mass;
}
sergeiss
13.12.2015 - 20:58
Цитата (AllesKlar @ 13.12.2015 - 19:48) |
Не по феншую это,... |
Цитата (xlebosol @ 13.12.2015 - 19:49) |
Функция всегда должна один тип возвращать... |
То есть вы оба действительно считаете, что разработчики ПХП - дураки???
Вот только то, что сразу же пришло в голову (посмотрите на тип возвращаемого значения):
http://php.net/manual/ru/function.strpos.phphttp://php.net/manual/ru/function.file.phphttp://php.net/manual/ru/function.mysql-connect.phphttp://php.net/manual/ru/function.mysql-fetch-array.phpИ таких функций в ПХП, которые возвращают FALSE или что-то другое, дохрена и больше. Они возвращают величину какого-то типа (данные), отличного от логического, в успешном случае.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
xlebosol
13.12.2015 - 22:19
sergeiss Я согласен, что такие есть функции для PHP, я следующий программист, который возьмет данные столь великолепной функции, которая создана по всем критериям и данные функции тупо вставлю в foreach, а тут fatal, мне функция на тебе булево. Ясно, что скажут проверять нужно, но и писать программу нужно так, что бы к минимуму снизить уровень возможных сбоев.
strongmaster
13.12.2015 - 22:21
Так правильнее
<?php
function somefunction($input)
{
$return_mass[0]='data';
if (isset($return_mass))
{
return array($return_mass);
}
return false;
}
$test = somefunction('test');
if (is_array($test))
{
echo "ok";
} else
{
echo "no result";
}
?>
xlebosol
13.12.2015 - 22:27
<?php
function somefunction($input)
{
$return_mass = array();
if (!empty($input))
{
$return_mass[] = $input;
}
return $return_mass;
}
$test = somefunction('test');
if (!empty($test) AND is_array($test))
{
echo "ok";
} else
{
echo "no result";
}
?>
Valick
13.12.2015 - 22:47
xlebosol, я бы всётаки вернул false вместо пустого массива
_____________
Стимулятор ~yoomoney - 41001303250491
xlebosol
Цитата |
Функция всегда должна один тип возвращать, а не устраивать разношерстную компанию. |
В большинстве случаев согласен, но всё зависит от логики.
Если ты запрашиваешь функцию, которая должна вернуть 10 новостей за определённую дату, тут всё понятно, она либо возвращает массив, который наполнен новостями, либо возвращает массив, который новостями ненаполнен, либо выбрасывает исключение, потому что к базе не смогла подключится.
С другой стороны допустим есть функция, которая ищет число в строке и возвращает это число, если нашла. А что делать если не нашла? Тоже возвращать число, 0? А если она нашла число 0, какое возвращать?
Или например какой нибудь кеш или реестр, где можно хранить данные (массив,чисто,строку,объект,bool)
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2