php中return,require,include加括弧和不加括弧的區別

來源:互聯網
上載者:User
php中return,require,include加括弧和不加括弧的區別 2010年6月30日 小旅 發表評論 閱讀評論

在整理代碼規範的時候看到這麼一句,return傳回值盡量不要加括弧,這個是什麼原因呢。

查閱官方手冊,在http://cn2.php.net/manual/en/function.return.php 中發現這麼一句:

Note: You should never use parentheses around your return variable when returning by reference, as this will not work. You can only return variables by reference, not the result of a statement. If you use return ($a); then you’re not returning a variable, but the result of the expression ($a) (which is, of course, the value of $a).

翻譯成中文的意思是:

注意: 當用引用傳回值時永遠不要使用括弧,這樣行不通。只能通過引用返回變數,而不是語句的結果。你只能返回引用的變數,而不是使用一個運算式的結果。如果使用 return ($a); 時其實不是返回一個變數,而是運算式 ($a) 的值(當然,此時該值也正是 $a 的值)。

這句話大家可能還不是很理解,看看下面的測試代碼:

123456789101112
<?php$good = 'good chuzhi';$_SERVER['HTTP_HOST'] = 'hao';function &changeVariable(){ return $_SERVER['HTTP_HOST'];    } $good = &changeVariable();var_dump($good);$_SERVER['HTTP_HOST'] = 'good';var_dump($good,$_SERVER['HTTP_HOST']);

這段代碼輸出:

string(3) “hao”
string(4) “good”
string(4) “good”

如果在返回變數中加括弧,代碼如下:

123456789101112
<?php$good = 'good chuzhi';$_SERVER['HTTP_HOST'] = 'hao';function &changeVariable(){ return ($_SERVER['HTTP_HOST']);    } $good = &changeVariable();var_dump($good);$_SERVER['HTTP_HOST'] = 'good';var_dump($good,$_SERVER['HTTP_HOST']);

這段代碼輸出:

string(3) “hao”
string(3) “hao”
string(4) “good”

第一個例子中“return $_SERVER['HTTP_HOST']”;沒有加引號,返回的是$_SERVER['HTTP_HOST']的引用,這時$good和$_SERVER['HTTP_HOST']指向同一個變數。所以修改了$_SERVER['HTTP_HOST'],$good的值跟著變化。

而第二個例子 如果return 後面的變數加了括弧,則首先計算括弧括起來的這個運算式的值,然後返回計算後的結果。這樣$good 指向”($_SERVER['HTTP_HOST'])”計算的結果,和$_SERVER['HTTP_HOST']指向的變數不是一樣,自然修改了$_SERVER['HTTP_HOST']的值,$good的值保持不變。所以為了保險,return傳回值是能不加括弧就不加括弧。

從上面的列子可以推知require include後面加括弧和不加括弧的區別:

include “a.php”;  //直接將a.php包含進來

include(“a.php”);//首先計算’(“a.php”)’的值,其結果肯定是a.php,然後在include “a.php”

require的道理和include一模一樣。

因此,include和require後面的檔案路徑加不加引號對執行結果是沒有影響的(不存在引用的問題),但是增加了執行步驟,降低了效率。

綜合以上的分析,無論是include,require還是return,對於這樣的操作符,後面能不加括弧就不加括弧。include和require後面加不加括弧對執行結果沒有區別,但是效率較低。而return 在返回引用的時候加上括弧不但效率低而且會造成邏輯錯誤,

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.