PHP get variable from function
I would advice against global as this introduces side-effects and makes the code harder to maintain/debug.
$ID> is out of scope. Perhaps you should create a global array and store them there.
$myvars = array(); function first() < global $myvars; . $myvars['variable_' . $item->ID] = $item->title; > function second() < global $myvars; . echo $myvars['variable_' . $item->ID]; >
It may be unnecessary, but it’s not necessarily bad. No context was provided for the interplay between the two functions.
Global obfuscates the interaction between what a function does and what it needs to actually do its job. It leads to debugging, maintenance, and extensibility issues. A function’s interface needs to be truthful.
Oh please. Just because you’ve never encountered that situation (yet) doesn’t mean that ignoring best practices is a good idea. They’re considered best practices for a reason. Yes, sometimes best practices are an idealized goal that shouldn’t get in the way of development. ‘Global’ is not one of those as it doesn’t offer anything that passing a variable through an argument list cannot also do. Your code example, for instance, would work just as well by passing the array in by reference. Further, doing that would make it clear to whomever invokes the function that the array is necessary
Last comment: goto-like structures are also included in most languages, even modern ones. I don’t think anyone would say using them is good, or that if one is tempted to use one it’s likely a sign of bad design. The only global-like structure I’ve ever used is a Singleton. And only after careful consideration and care in its use.
Php получить данные из функции
return returns program control to the calling module. Execution resumes at the expression following the called module’s invocation.
If called from within a function, the return statement immediately ends execution of the current function, and returns its argument as the value of the function call. return also ends the execution of an eval() statement or script file.
If called from the global scope, then execution of the current script file is ended. If the current script file was include d or require d, then control is passed back to the calling file. Furthermore, if the current script file was include d, then the value given to return will be returned as the value of the include call. If return is called from within the main script file, then script execution ends. If the current script file was named by the auto_prepend_file or auto_append_file configuration options in php.ini , then that script file’s execution is ended.
Note: Note that since return is a language construct and not a function, the parentheses surrounding its argument are not required and their use is discouraged.
Note: If no parameter is supplied, then the parentheses must be omitted and null will be returned. Calling return with parentheses but with no arguments will result in a parse error.
As of PHP 7.1.0, return statements without an argument in functions which declare a return type trigger E_COMPILE_ERROR , unless the return type is void , in which case return statements with an argument trigger that error.
Php получить данные из функции
Значения возвращаются при помощи необязательного оператора возврата. Возвращаемые значения могут быть любого типа, в том числе это могут быть массивы и объекты. Возврат приводит к завершению выполнения функции и передаче управления обратно к той строке кода, в которой данная функция была вызвана. Для получения более детальной информации ознакомьтесь с описанием 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
?>
Возврат значений из функций php return. Как возвратить массива из php функции за счет return
В php можно создавать функции, которые что-то вычисляют, но при выводе результата, могут возникнуть сложности. Чаще всего для возврата вычислений используется консрукция return. Рассмотрим ее подробнее.
Если в функции установлен return, то когда до него дойдет очередь, функция прекратит все вычисления и сделает возврат значений с помощью этой конструкции.
Если return будет установлен где-нибудь вне функции, то он будет считаться глобальным и когда до него дойдет очередь, скрипт также прекратит работу и выдаст результат.
Особенность return в том, что после завершения работы функции, результат вычислений выведется в той строке, где была вызвана эта функция.
Теперь от теории к практике
function returns1($a) return $a;
echo ‘Вишня’;
>
echo returns1(‘Яблоко’);
В этом примере выведется только Яблоко, так как return стоит перед Вишней и до нее очередь не успевает дойти.
Если с выводом обычных переменных нет никаких сложностей, то вот с выводом массивов за счет return могут быть проблемы.
Как вывести массив из return в php?
К примеру есть функция data($a,$b) в ней будет передавать исходные данные $a и $b. Функция их вычислит, а на выходе мы должны получить массив из 3 значений с помощью return. Делается это так:
//здесь мы задали обычную функция с параметрами
function data($a,$b) //делаем простые вычисления. Не важно какие, главное, что формируется массив $out, который нам надо вывести из return
$out[‘a’] = $a*5;
$out[‘b’] = $b*5;
$out[‘c’] = $a*$b*5;
//после того, как мы сформировали массив, просто выводим его
return $out;
>
//исходные данные
$a = 2; $b = 3;
//теперь присваиваем $data значение функции (return $out)
$data = data($a,$b);
//$data стал массивом, просто выводим там где нужно результат функции: Array ( [a] => 10 [b] => 15 [c] => 30 )
echo $data[‘a’];
echo $data[‘b’];
echo $data[‘c’];
?>
2 вариант. А что если в процесс работы функции нам на выходе нужно получить два и более разных массива. Как их вывести через return? Для этого перед return их нужно соединить в один массив:
//какая-то функция
function datare($a,$b) //данные 1-го массива
$out[] = $a;
$out[] = $b;
$out[] = «Ура»;
//данные 2-го массива
$out2[‘a2’] = $b;
$out2[‘b2’] = ‘Желаю ‘;
$out2[‘c2’] = «Вам»;
//выводим результат двух массивов в массиве
$all = array($out, $out2);
return $all;
>
$a = ‘Азбука ‘; $b = ‘Здоровья ‘;
//запускаем функцию datare с параметрами и присваиваем ей переменную $massiv. Теперь $massiv — массив.
$massiv = datare($a,$b);
//выводим результаты расчетов функции.
print_r($massiv);
echo $massiv[0][0];
echo $massiv[0][1];
echo $massiv[0][2];
echo $massiv[1][‘a2’];
echo $massiv[1][‘b2’];
echo $massiv[1][‘c2’];
/*
На выходе получим:
Array (
[0] => Array ( [0] => Азбука [1] => Здоровья [2] => Ура )
[1] => Array ( [a2] => Здоровья [b2] => Желаю [c2] => Вам )
)
*/
?>
В принципе таким образом, и работает return в php. Надеюсь, материал был полезен.