PHP Unconference Europe 2015

return

Bir işlevin içinde kullanıldığında, return deyimi çalışmakta olan işlevi hemen sonlandırıp değiştirgesini çağrılan işlevin değeri olarak döndürür. return ayrıca, bir betiğin veya bir eval() deyiminin çalışmasını sonlandırmak için de kullanılabilir.

Betik genelinde çağrıldığında, betik dosyasının çalışmasını sonlandırılır. Eğer dosya include ya da require ile betik dosyasına dahil edilmiş bir dosya ise, return deyimi akış denetiminin ana dosyaya aktarılmasını sağlar. Dahası, return deyiminin çağrıldığı dosya include ile dahil edilmişse return değeri include çağrısının değeri olarak dönecektir. return ana betik dosyasının içinden çağrıldığı takdirde, betiğin çalışması sonlandırılacaktır. Eğer return deyiminin çağrıldığı dosya, ismi php.ini içindeki auto_prepend_file veya auto_append_file yapılandırma seçenekleri ile atanan bir dosya ise bu betik dosyasının da çalışmasını sonlandıracaktır.

Daha fazla bilgi için, Dönüş değerleri bölümüne bakınız.

Bilginize: return bir işlev değil bir dil oluşumu olduğundan, değiştirgesini içeren parantez yalnızca değiştirge bir ifade içeriyorsa zorunludur. Bir değişken döndürürken genellikle parantez kullanılmaz. Böyle bir durumda, PHP'nin daha az işlem yapması için bu yöntemi izlemeniz gerekir.

Bilginize: Değiştirgesiz kullanılacaksa yaylı ayraçlar konulmamalıdır bu durumda dönen değer NULL olur. Değiştirge içermeyen yaylı ayraçların kullanımı bir çözümleme hatası ile sonuçlanır.

Bilginize: Bir değişkeni gönderimli olarak döndürüyorsanız, asla parantez kullanmamalısınız, bu çalışmayacaktır. Bir deyimin sonucunu gönderimli olarak döndüremezsiniz, yalnızca değişkenler gönderimli olarak döndürülebilir. return ($a); kullanıyorsanız, bir değişken değil, bir ifadenin sonucunu ($a) döndürüyorsunuz demektir (bu da elbette, $a değişkeninin değeridir).

add a note add a note

User Contributed Notes 4 notes

up
18
warhog at warhog dot net
8 years ago
for those of you who think that using return in a script is the same as using exit note that: using return just exits the execution of the current script, exit the whole execution.

look at that example:

a.php
<?php
include("b.php");
echo
"a";
?>

b.php
<?php
echo "b";
return;
?>

(executing a.php:) will echo "ba".

whereas (b.php modified):

a.php
<?php
include("b.php");
echo
"a";
?>

b.php
<?php
echo "b";
exit;
?>

(executing a.php:) will echo "b".
up
12
Tom
8 months ago
Keep in mind that even if PHP allows you to use "return" in the global scope it is very bad design to do so.

Using the return statement in the global scope encourages programmers to use files like functions and treat the include-statement like a function call. Where they initialize the file's "parameters" by setting variables in the global scope and reading them in the included file.

Like so: (WARNING! This code was done by professionals in a controlled environment. Do NOT try this at home!)
<?php
$parameter1
= "foo";
$parameter2 = "bar";
$result = include "voodoo.php";
?>

Where "voodoo.php" may be something like:
<?php
return $parameter1 . " " . $parameter2;
?>

This is one of the worst designs you can implement since there is no function head, no way to understand where $parameter1 and $parameter2 come from by just looking at "voodoo". No explanation in the calling file as of what $parameter1 and -2 are doing or why they are even there. If the names of the parameters ever change in "voodoo" it will break the calling file. No IDE will properly support this very poor "design". And I won't even start on the security issues!

If you find yourself in a situation where a return-statement in global scope is the answer to your problem, then maybe you are asking the wrong questions. Actually you may be better off using a function and throwing an exception where needed.

Files are NOT functions. They should NOT be treated as such and under no circumstances should they "return" anything at all.

Remember: Every time you abuse a return statement God kills a kitten and makes sure you are reborn as a mouse!
up
5
J.D. Grimes
1 year ago
Note that because PHP processes the file before running it, any functions defined in an included file will still be available, even if the file is not executed.

Example:

a.php
<?php
include 'b.php';

foo();
?>

b.php
<?php
return;

function
foo() {
     echo
'foo';
}
?>

Executing a.php will output "foo".
up
-10
andrew at neonsurge dot com
6 years ago
Response to stoic's message below...

I believe the way you've explained this for people may be a bit confusing, and your verbiage is incorrect.  Your script below is technically calling return from a global scope, but as it says right after that in the description above... "If the current script file was include()ed or require()ed, then control is passed back to the calling file".  You are in a included file.  Just making sure that is clear.

Now, the way php works is before it executes actual code it does what you call "processing" is really just a syntax check.  It does this every time per-file that is included before executing that file.  This is a GOOD feature, as it makes sure not to run any part of non-functional code.  What your example might have also said... is that in doing this syntax check it does not execute code, merely runs through your file (or include) checking for syntax errors before execution.  To show that, you should put the echo "b"; and echo "a"; at the start of each file.  This will show that "b" is echoed once, and then "a" is echoed only once, because the first time it syntax checked a.php, it was ok.  But the second time the syntax check failed and thus it was not executed again and terminated execution of the application due to a syntax error.

Just something to help clarify what you have stated in your comments.
To Top