Перейти к содержимому

Return php что это

  • автор:

Return php что это

Функция может возвращать некоторое значение — число, строку и т.д., то есть некоторый результат. Для возвращения значения в функции применяется оператор return , после которого указывается возвращаемое значение.

Например, получим из функции сумму двух чисел:

 $result = add(5, 6); echo $result; // 11 ?>

Функция add() принимает два параметра и возвращает сумму их значений.

return $a + $b;

Поскольку функция возвращает значение, мы его можем присвоить переменной:

$result = add(5, 6);

Либо использовать напрямую:

echo add(4, 8);

Если после инструкции return в функции идут другие инструкции, то они не будут выполняться:

function add($a, $b) < $sum = $a + $b; return $sum; // завершение функции echo "sum = $sum"; // эта строка не будут выполняться >

В реальности даже если функция не использует оператор return , она все равно возвращает значение, только в этом случае это значение — null :

"; > $result = add(5, 6); if($result === null) echo "result равен null"; else echo "result не равен null"; ?>

Что такое return в PHP?

Оператор return используется в функциях для возвращения данных после выполнения работы самой функции.

Если функция должна обработать какие-то данные и потом вернуть их, то для возвращения этих данных необходим этот оператор. Рассмотрим все на примере:

function some_test($a, $b, $c) < // Функция с 3 параметрами return $a + $b + $c; // Функция возвращает результат суммы чисел >$res = some_test(4, 6, 1); echo $res;

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

Return php что это

Значения возвращаются при помощи необязательного оператора возврата. Возвращаемые значения могут быть любого типа, в том числе это могут быть массивы и объекты. Возврат приводит к завершению выполнения функции и передаче управления обратно к той строке кода, в которой данная функция была вызвана. Для получения более детальной информации ознакомьтесь с описанием return .

Замечание:

Если конструкция return не указана, то функция вернёт значение null .

Использование выражения return

Пример #1 Использование конструкции return

function square ( $num )
return $num * $num ;
>
echo square ( 4 ); // выводит ’16’.
?>

Функция не может возвращать несколько значений, но аналогичного результата можно добиться, возвращая массив.

Пример #2 Возврат нескольких значений в виде массива

function small_numbers ()
return [ 0 , 1 , 2 ];
>
// Деструктуризация массива будет собирать каждый элемент массива индивидуально
[ $zero , $one , $two ] = small_numbers ();

// До версии 7.1.0 единственной эквивалентной альтернативой было использование конструкции list().
list( $zero , $one , $two ) = small_numbers ();

Для того, чтобы функция возвращала результат по ссылке, вам необходимо использовать оператор & и при описании функции, и при присвоении переменной возвращаемого значения:

Пример #3 Возврат результата по ссылке

Для получения более детальной информации о ссылках обратитесь к разделу документации Подробно о ссылках.

User Contributed Notes 10 notes

7 years ago

PHP 7.1 allows for void and null return types by preceding the type declaration with a ? — (e.g. function canReturnNullorString(): ?string)

However resource is not allowed as a return type:

function fileOpen ( string $fileName , string $mode ): resource
$handle = fopen ( $fileName , $mode );
if ( $handle !== false )
return $handle ;
>
>

$resourceHandle = fileOpen ( «myfile.txt» , «r» );
?>

Errors with:
Fatal error: Uncaught TypeError: Return value of fileOpen() must be an instance of resource, resource returned.

13 years ago

Developers with a C background may expect pass by reference semantics for arrays. It may be surprising that pass by value is used for arrays just like scalars. Objects are implicitly passed by reference.

# (1) Objects are always passed by reference and returned by reference

class Obj public $x ;
>

function obj_inc_x ( $obj ) $obj -> x ++;
return $obj ;
>

$obj = new Obj ();
$obj -> x = 1 ;

$obj2 = obj_inc_x ( $obj );
obj_inc_x ( $obj2 );

print $obj -> x . ‘, ‘ . $obj2 -> x . «\n» ;

# (2) Scalars are not passed by reference or returned as such

function scalar_inc_x ( $x ) $x ++;
return $x ;
>

$x2 = scalar_inc_x ( $x );
scalar_inc_x ( $x2 );

print $x . ‘, ‘ . $x2 . «\n» ;

# (3) You have to force pass by reference and return by reference on scalars

$x2 =& scalar_ref_inc_x ( $x ); # Need reference here as well as the function sig
scalar_ref_inc_x ( $x2 );

print $x . ‘, ‘ . $x2 . «\n» ;

# (4) Arrays use pass by value sematics just like scalars

function array_inc_x ( $array ) $array < 'x' >++;
return $array ;
>

$array = array();
$array [ ‘x’ ] = 1 ;

$array2 = array_inc_x ( $array );
array_inc_x ( $array2 );

print $array [ ‘x’ ] . ‘, ‘ . $array2 [ ‘x’ ] . «\n» ;

# (5) You have to force pass by reference and return by reference on arrays

$array = array();
$array [ ‘x’ ] = 1 ;

$array2 =& array_ref_inc_x ( $array ); # Need reference here as well as the function sig
array_ref_inc_x ( $array2 );

print $array [ ‘x’ ] . ‘, ‘ . $array2 [ ‘x’ ] . «\n» ;

15 years ago

Be careful about using «do this thing or die()» logic in your return lines. It doesn’t work as you’d expect:

function myfunc1 () return( ‘thingy’ or die( ‘otherthingy’ ));
>
function myfunc2 () return ‘thingy’ or die( ‘otherthingy’ );
>
function myfunc3 () return( ‘thingy’ ) or die( ‘otherthingy’ );
>
function myfunc4 () return ‘thingy’ or ‘otherthingy’ ;
>
function myfunc5 () $x = ‘thingy’ or ‘otherthingy’ ; return $x ;
>
echo myfunc1 (). «\n» . myfunc2 (). «\n» . myfunc3 (). «\n» . myfunc4 (). «\n» . myfunc5 (). «\n» ;
?>

Only myfunc5() returns ‘thingy’ — the rest return 1.

7 years ago

With 7.1, these are possible yet;

function ret_void (): void // do something but no return any value
// if needs to break fn exec for any reason simply write return;
if (. ) return; // break
// return null; // even this NO!
>

$db -> doSomething ();
// no need return call anymore
>

function ret_nullable () ? int if (. ) return 123 ;
> else return null ; // MUST!
>
>
?>

20 years ago

Functions which return references, may return a NULL value. This is inconsistent with the fact that function parameters passed by reference can’t be passed as NULL (or in fact anything which isnt a variable).

if ( testRet () === NULL )
echo «NULL» ;
>
?>

parses fine and echoes NULL

8 years ago

PHP 7 return types if specified can not return a null.
For example:
declare( strict_types = 1 );

function add2ints ( int $x , int $y ): int
$z = $x + $y ;
if ( $z === 0 )
return null ;
>
return $z ;
>
$a = add2ints ( 3 , 4 );
echo is_null ( $a ) ? ‘Null’ : $a ;
$b = add2ints (- 2 , 2 );
echo is_null ( $b ) ? ‘Null’ : $b ;
exit();

Output :
7
Process finished with exit code 139

5 years ago

Be careful when introducing return types to your code.

Only one return type can be specified (but prefacing with ? allows null).

Return values of a type different to that specified are silently converted with sometimes perplexing results. These can be tedious to find and will need rewriting, along with calling code.

Declare strict types using «declare(strict_types=1);» and an error will be generated, saving much head-scratching.

5 years ago

You may specify child return type if there is no parent:

class A public function f ( $a )
return 1 ;
>
>

class B extends A public function f ( $a ): int // + return type, OK
return 1 ;
>
>

class C extends A public function f ( int $a ) // + argument type, WARNING
return 1 ;
>
>
?>

7 years ago

Note: the function does not have «alternative syntax» as if/endif, while/endwhile, and colon (:) here is used to define returning type and not to mark where the block statement begins.

4 years ago

Declaring a collection of objects as return type is not implemented and forbidden:
class Child <>

function getChilds (): Child []
return [(new Child ()), (new Child ())];
>

var_dump ( getChilds ());
// Returns: Parse error: syntax error, unexpected ‘[‘, expecting ‘ ?>

We have to use:
class Child <>

function getChilds (): array
return [(new Child ()), (new Child ())];
>

var_dump ( getChilds ());
// Returns:
/*
array (size=2)
0 =>
object(Child)[168]
1 =>
object(Child)[398]
*/
?>

Idem for function parameter:
function setChilds ( Child [] $childs )<>
// Not allowed

function setChilds (array $childs )<>
// Allowed
?>

  • Функции
    • Функции, определяемые пользователем
    • Аргументы функции
    • Возврат значений
    • Обращение к функциям через переменные
    • Встроенные функции
    • Анонимные функции
    • Стрелочные функции
    • Callback-​функции как объекты первого класса
    • Copyright © 2001-2024 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    Возврат значений из функции — Основы PHP

    Функции, которые мы определяли в предыдущих уроках, заканчивали свою работу тем, что печатали на экран какие-то данные:

     function greeting()  print_r('Hello, Hexlet!'); > 

    Пользы от таких функций не очень много, так как результатом их работы невозможно воспользоваться внутри программы. Чтобы это можно было сделать, нужно возвращать значение из функции, чему мы и научимся в этом уроке.

    Рассмотрим задачу обработки электронной почты. Когда пользователь регистрируется на каком-то сайте, он может ввести email любым способом:

    • Добавить случайно пробелы в начале или в конце _support@hexlet.io__
    • Использовать буквы в разном регистре SUPPORT@hexlet.io

    Если мы сохраним email в таком виде в базу данных, то пользователь не сможет войти на сайт. Такое возможно, если он будет вбивать адрес без пробелов и в другом регистре.

    Чтобы этого не произошло, email нужно подготовить к записи в базу. Его нужно привести к нижнему регистру и обрезать пробельные символы по краям строки. Такая задача решается в пару строчек:

     function saveEmail()  $email = " SuppORT@hexlet.IO"; // Обрезаем пробельные символы // Функция trim() удаляет пробелы из начала и конца строки $trimmedEmail = trim($email); $preparedEmail = strtolower($trimmedEmail); print_r($preparedEmail); // Здесь будет запись в базу данных > 

    Этот код стал возможен только благодаря возврату значения. Функции trim() и strtolower() ничего не печатают на экран. Они возвращают результат своей работы, и поэтому мы можем записать его в переменные.

    Если бы функции вместо возврата результата печатали на экран, мы бы не могли присвоить результат их работы переменной. Как мы не можем сделать с определенной выше функцией greeting() :

     $message = greeting(); // Чтобы увидеть null, нужно воспользоваться функцией var_dump() var_dump($message); // => NULL 

    Изменим функцию greeting() так, чтобы она начала возвращать данные вместо их печати. Для этого нам понадобится выполнить возврат вместо печати на экран:

     function greeting()  return 'Hello, Hexlet!'; > 

    return — особая инструкция, которая берет выражение, записанное справа. Далее она отдает его наружу тому коду, который вызвал метод. Как только PHP натыкается на return , выполнение функции на этом завершается:

     // Теперь мы можем использовать результат работы функции $message = greeting(); print_r($message); // => 'Hello, Hexlet!' // И даже выполнить какие-то действия над результатом print_r(strtoupper($message)); // => 'HELLO, HEXLET!' 

    Любой код после return не выполняется:

     function greeting()  return 'Hello, Hexlet!'; print_r('Я никогда не выполнюсь'); > 

    Даже если функция возвращает данные, это не ограничивает ее в том, что она печатает. Кроме возврата данных мы можем и печатать:

     function greeting()  print_r('Я появлюсь в консоли'); return 'Hello, Hexlet!'; > // И напечатает текст на экран и вернет значение $message = greeting(); 

    Возвращать можно не только конкретное значение. Так как return работает с выражениями, то справа от него может появиться почти всё, что угодно. Здесь нужно руководствоваться принципами читаемости кода:

     function greeting()  $message = 'Hello, Hexlet!'; return $message; > 

    Здесь мы не возвращаем переменную. Всегда возвращается значение, которое находится в этой переменной. Ниже пример с вычислениями:

     function doubleFive()  // или return 5 + 5 $result = 5 + 5; return $result; > 

    Вопрос на самопроверку. Что выведет этот код?

     // Определение function run()  // или return 5 + 5 return 5; return 10; > // Использование run(); // => ? 

    Аватары экспертов Хекслета

    Остались вопросы? Задайте их в разделе «Обсуждение»

    Вам ответят команда поддержки Хекслета или другие студенты

    Об обучении на Хекслете

    • Статья «Как учиться и справляться с негативными мыслями»
    • Статья «Ловушки обучения»
    • Статья «Сложные простые задачи по программированию»
    • Вебинар « Как самостоятельно учиться »

    Открыть доступ

    Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

    • 130 курсов, 2000+ часов теории
    • 1000 практических заданий в браузере
    • 360 000 студентов

    Наши выпускники работают в компаниях:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *