[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функция не всегда возвращает array, обработка искл
strongmaster
Привет. Есть функция которая должна в случае успешной отработки должна вернуть массив.
Как сделать грамотно обработку исключнеий, то есть проверку на то вернула ли функция массив?
У меня примерно вот так.

<?php

function
somefunction($input)
{

// do something

if (!isset($return_mass))
{
$return_mass[0] = '';
}

return array ($return_mass);
}


$test = somefunction('test');

if (count($test) == '1' && $test[0][0] == '')
{
echo "do something";
}

?>

Заранее спасибо.
Valick
is_array()

_____________
Стимулятор ~yoomoney - 41001303250491
AllesKlar
strongmaster
return array ($return_mass);

Твоя функция всегда будет возвращать массив.

Но смысл вопроса ясен.
Функцию пишешь ты, и что она будет возвращать во все 100% случаях ты знаешь.
Можно делать так:

function somefunction($input)
{
$return_mass = null;
// do something
if( все класно, то заполняем $return_mass) {
$return_mass = ['key1' => 'val1', 'key2' => 'val2'];
}
return $return_mass;
}

$test = somefunction('test');
if(!empty($test)) {
// .....
}


_____________
[продано копирайтерам]
strongmaster
Спасибо. empty я не разу не использовал, надо попробовать.
Пока что вот так решил, с отдачей false, если нету массива

<?php

function
somefunction($input)
{

// do something
//$return_mass[0]='data';


if (isset($return_mass))
{
return array($return_mass);
}

return false;

}

$test = somefunction('test');

if ($test)
{
echo "ok";
} else
{
echo "no result";
}

?>
AllesKlar
strongmaster
Это первый шаг в говнокод.
Пойди, поймой ботинок и начинай работать с типами.
Всю жизнь ты в лояльном к говнокоду php работать не будешь, а больше ниодин язык не позволит тебе такой финт с типами сделать.

Что значит
if ($test)

Это значит и 5, и "abc"
А вот array() уже не пройдет под условие, хотя это массив, просто он пустой.

_____________
[продано копирайтерам]
sergeiss
Цитата (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, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
AllesKlar
Цитата (sergeiss @ 13.12.2015 - 17:34)
Так что это не "говнокод", а нормальная ситуация. Как в ПХП, так и в JS.

Не по феншую это, возвращать строгий false, а встречать все, что угодно, которое может быть преобразовано в false.
Ну это ты пока такой, еще годик на яве попишешь и тоже будешь яванутый на всю голову biggrin.gif

_____________
[продано копирайтерам]
xlebosol
Функция всегда должна один тип возвращать, а не устраивать разношерстную компанию.
function somefunction($input)
{
$return_mass = array();
// do something
if( все класно, то заполняем $return_mass) {
$return_mass = ['key1' => 'val1', 'key2' => 'val2'];
}
return $return_mass;
}
sergeiss
Цитата (AllesKlar @ 13.12.2015 - 19:48)
Не по феншую это,...

Цитата (xlebosol @ 13.12.2015 - 19:49)
Функция всегда должна один тип возвращать...

То есть вы оба действительно считаете, что разработчики ПХП - дураки???

Вот только то, что сразу же пришло в голову (посмотрите на тип возвращаемого значения):
http://php.net/manual/ru/function.strpos.php
http://php.net/manual/ru/function.file.php
http://php.net/manual/ru/function.mysql-connect.php
http://php.net/manual/ru/function.mysql-fetch-array.php

И таких функций в ПХП, которые возвращают FALSE или что-то другое, дохрена и больше. Они возвращают величину какого-то типа (данные), отличного от логического, в успешном случае.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
xlebosol
sergeiss Я согласен, что такие есть функции для PHP, я следующий программист, который возьмет данные столь великолепной функции, которая создана по всем критериям и данные функции тупо вставлю в foreach, а тут fatal, мне функция на тебе булево. Ясно, что скажут проверять нужно, но и писать программу нужно так, что бы к минимуму снизить уровень возможных сбоев.
strongmaster
Так правильнее

<?php

function
somefunction($input)
{

// do something
$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

<?php

function
somefunction($input)
{

// do something
$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
strongmaster, да так правильнее.


_____________
Стимулятор ~yoomoney - 41001303250491
Valick
xlebosol, я бы всётаки вернул false вместо пустого массива


_____________
Стимулятор ~yoomoney - 41001303250491
Arh
xlebosol
Цитата
Функция всегда должна один тип возвращать, а не устраивать разношерстную компанию.


В большинстве случаев согласен, но всё зависит от логики.

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

С другой стороны допустим есть функция, которая ищет число в строке и возвращает это число, если нашла. А что делать если не нашла? Тоже возвращать число, 0? А если она нашла число 0, какое возвращать?

Или например какой нибудь кеш или реестр, где можно хранить данные (массив,чисто,строку,объект,bool)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.