Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Функция не всегда возвращает array, обработка искл
strongmaster  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 3
Пользователь №: 42243
На форуме: 11 месяцев, 22 дня
Карма:




Привет. Есть функция которая должна в случае успешной отработки должна вернуть массив.
Как сделать грамотно обработку исключнеий, то есть проверку на то вернула ли функция массив?
У меня примерно вот так.

<?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";
}

?>

Заранее спасибо.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 16 дней
Карма: 167






--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 9 дней
Карма: 170




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)) {
// .....
}


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
strongmaster  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 3
Пользователь №: 42243
На форуме: 11 месяцев, 22 дня
Карма:




Спасибо. 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";
}

?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 9 дней
Карма: 170




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

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

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


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14969
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 28 дней
Карма: 443




Цитата (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
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 9 дней
Карма: 170




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

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


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
xlebosol  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Знатный быдлокодер
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 337
Пользователь №: 32761
На форуме: 4 года, 5 месяцев, 16 дней
Карма: 19




Функция всегда должна один тип возвращать, а не устраивать разношерстную компанию.
function somefunction($input)
{
$return_mass = array();
// do something
if( все класно, то заполняем $return_mass) {
$return_mass = ['key1' => 'val1', 'key2' => 'val2'];
}
return $return_mass;
}
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14969
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 28 дней
Карма: 443




Цитата (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
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
xlebosol  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Знатный быдлокодер
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 337
Пользователь №: 32761
На форуме: 4 года, 5 месяцев, 16 дней
Карма: 19




sergeiss Я согласен, что такие есть функции для PHP, я следующий программист, который возьмет данные столь великолепной функции, которая создана по всем критериям и данные функции тупо вставлю в foreach, а тут fatal, мне функция на тебе булево. Ясно, что скажут проверять нужно, но и писать программу нужно так, что бы к минимуму снизить уровень возможных сбоев.
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
strongmaster  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 3
Пользователь №: 42243
На форуме: 11 месяцев, 22 дня
Карма:




Так правильнее

<?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";
}

?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
xlebosol  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Знатный быдлокодер
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 337
Пользователь №: 32761
На форуме: 4 года, 5 месяцев, 16 дней
Карма: 19





<?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";
}

?>
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 16 дней
Карма: 167




strongmaster, да так правильнее.


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 16 дней
Карма: 167




xlebosol, я бы всётаки вернул false вместо пустого массива


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2103
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 3 дня
Карма: 70




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


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

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

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

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


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса