Contents

PHP return 特別的用法小記

今天看到我同事用 return 寫在 xxx.php(沒有寫在 return 裡面)
我印象中 return 通常都寫在 function 裡面
查看了一下官方文件 PHP: return - Manual
可以寫在 function 外面

先講講單一文件

文件有講到 return 不是一個 function
先講講這個跟 die/exit哪裡不一樣

1
2
<?php
return 2;
1
exit(2);

要怎麼看錯誤碼,我以前這篇寫過
linux 設定環境變數 | 程式狂想筆記

$?是指令回傳錯誤碼

有做 include 文件

如果在全局範圍中調用,則當前腳本文件中止運行。如果當前腳本文件是被 include 的或者 require 的,則控制交回調用文件。此外,如果當前腳本是被 include 的,則 return 的值會被當作 include 調用的返回值。如果在主腳本文件中調用 return,則腳本中止運行。如果當前腳本文件是在 php.ini 中的配置選項 auto_prepend_file 或者 auto_append_file 所指定的,則此腳本文件中止運行。

我覺得先看範例

1
2
3
4
5
a.php
<?php
include("b.php");
echo "a";
?>

b.php

1
2
3
4
<?php
echo "b";
return;
?>

(executing a.php:) will echo “ba”.

whereas (b.php modified):

a.php

1
2
3
4
<?php
include("b.php");
echo "a";
?>

b.php

1
2
3
4
<?php
echo "b";
exit;
?>

(executing a.php:) will echo “b”.

** 小心 global namespace **

a.php

1
2
3
4
5
<?php
include 'b.php';

foo();
?>

b.php

1
2
3
4
5
6
7
<?php
return;

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

Executing a.php will output “foo”.

include 和 return

PHP: include - Manual

1
2
3
4
5
6
7
8
return.php
<?php

$var = 'PHP';

return $var;

?>

noreturn.php

1
2
3
4
5
<?php

$var = 'PHP';

?>

testreturns.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php

$foo = include 'return.php';

echo $foo; // prints 'PHP'

$bar = include 'noreturn.php';

echo $bar; // prints 1

?>

$bar 的值為 1 是因為 include 成功運行了。注意以上例子中的區別。第一個在被包含的文件中用了 return 而另一個沒有。如果文件不能被包含,則返回 FALSE 並發出一個 E_WARNING 警告。

如果在包含文件中定義有函數,這些函數不管是在 return 之前還是之後定義的,都可以獨立在主文件中使用。如果文件被包含兩次,PHP 5 發出致命錯誤因為函數已經被定義,但是 PHP 4 不會對在 return 之後定義的函數報錯。推薦使用 include_once 而不是檢查文件是否已包含並在包含文件中有條件返回。

include_once 和 return

PHP: include_once - Manual
其實看範例很快就可以懂了
載入進去預設會為 True,假如文件有return value,include_once 就會回傳
include_once第二次不會回傳東西

1
2
3
config.php
<?php
return array("test">1);

//first

1
2
3
4
5
$config = include_once("config.php");
var_dump($config);

$config = include_once("config.php");
var_dump($config);

output will be
array(
“test”=>1,
)

nothing

小記 include 和 require 差別

require 和 include 的不同 require 適合用來引入靜態的內容,而 include 則適合用來引入動態的程式碼。
include 在執行時,如果 include 進來的檔案發生錯誤的話,會顯示警告,不會立刻停止;
而 require 則是會顯示錯誤,立刻終止程式,不再往下執行。
include 可以用在迴圈;require 不行。

參考來源: Syun: [PHP]include 與 require 的差別