Php function return query array
Значения возвращаются при помощи необязательного оператора возврата. Возвращаемые значения могут быть любого типа, в том числе это могут быть массивы и объекты. Возврат приводит к завершению выполнения функции и передаче управления обратно к той строке кода, в которой данная функция была вызвана. Для получения более детальной информации ознакомьтесь с описанием return .
Замечание:
Если конструкция return не указана, то функция вернёт значение null .
Использование выражения return
Пример #1 Использование конструкции return
Функция не может возвращать несколько значений, но аналогичного результата можно добиться, возвращая массив.
Пример #2 Возврат нескольких значений в виде массива
function small_numbers ()
return [ 0 , 1 , 2 ];
>
// Деструктуризация массива будет собирать каждый элемент массива индивидуально
[ $zero , $one , $two ] = small_numbers ();
?php
// До версии 7.1.0 единственной эквивалентной альтернативой было использование конструкции list().
list( $zero , $one , $two ) = small_numbers ();
Для того, чтобы функция возвращала результат по ссылке, вам необходимо использовать оператор & и при описании функции, и при присвоении переменной возвращаемого значения:
Пример #3 Возврат результата по ссылке
Для получения более детальной информации о ссылках обратитесь к разделу документации Подробно о ссылках.
User Contributed Notes 10 notes
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.
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
function obj_inc_x ( $obj ) $obj -> x ++;
return $obj ;
>
$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 );
# (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 );
# (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» ;
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.
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!
>
>
?>
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
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
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.
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 ;
>
>
?>
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.
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
?>
Parse URL Querystring Into Array In PHP
Using query strings in PHP is a good way of transferring data from one file to another. This is done by using the $_GET variable. This variable is a global variable that is used to get the content of the query string and allow you to get at this data as an array. Getting at data in a query string can be used in other places in your application for example using Ajax requests you may need to get the contents of a query string. Here is a PHP snippet that will take a query string as a parameter and return an array of the query string data.
/** * Parse out url query string into an associative array * * $qry can be any valid url or just the query string portion. * Will return false if no valid querystring found * * @param $qry String * @return Array */ function queryToArray($qry) < $result = array(); //string must contain at least one = and cannot be in first position if(strpos($qry,'=')) < if(strpos($qry,'?')!==false) < $q = parse_url($qry); $qry = $q['query']; >>else < return false; >foreach (explode('&', $qry) as $couple) < list ($key, $val) = explode('=', $couple); $result[$key] = $val; >return empty($result) ? false : $result; >
PHP Function parese_str
PHP has a built in function to perform this task and convert a query string into an array so that you can loop through the parameters and perform the tasks you need to. This PHP function is called parse_str(), it takes two parameters but the second is optional. The first parameter will be a string which will be the query string and the return of the function will create variables from the query string.
$str = "first=value&arr[]=foo+bar&arr[]=baz"; parse_str($str); echo $first; // value echo $arr[0]; // foo bar echo $arr[1]; // baz
If you give this a second parameter then the return of this will add query string into an array or key value pairs.
$str = "first=value&arr[]=foo+bar&arr[]=baz"; parse_str($str, $output); echo $output['first']; // value echo $output['arr'][0]; // foo bar echo $output['arr'][1]; // baz
Build A Query String From Array
Along with turning a query string into an array there is also a PHP function that will turn an array into a query string. This function is called http_build_query() which takes an array and will return a query string of the key value pair of the array.
$query = array('val' => 1, 'test' => 2, 'key' => 'value'); $string = http_build_query( $query ); echo $string; // this will return val=1&test=2&key=value