2017-02-27 23 views
0

我剛在我剛剛遇到的一個PHP框架(Laravel 4)中遇到return的使用。什麼是函數外的PHP返回指令的應用程序

我明白它做什麼,如下:

# contents of file A 
<?php 
//this is fileA.php 
echo '<pre>'; 
echo "here is from file A\n"; 
$output = require('fileB.php'); 
echo $output; // "Hi, I am the return value from file B" 
?> 

# contents of file B 
<?php 
echo "Hi, I am content inside file B\n"; 
$return = "Hi, I am the return value from file B"; 
return $return; //terminate page processing.. 
//should not show 
echo "I bet you don't see me\n"; 
<?php 

以上輸出:

Here is from file A 
Hi, I am content inside file B 
Hi, I am return value from file B 

我的問題是,當是明智的(甚至是上帝的綠色地球可以想象!)到使用這樣的東西?

這似乎與return在函數中類似,但實質上使得包含文件成爲「準功能」,並模糊了面向對象(甚至程序)編碼之間的界限,並將文件基本上提升到方法級別或類。

同樣,我想知道什麼時候這樣的事情是可取的OVER OOP應用程序。

哦,沒有Laravel有什麼特別的想法記在經常執行這一...

+0

這與Laravel有什麼關係? – Ohgodwhy

+0

TAYQ,事實上它僅用於Laravel 4。也許,也許,也許有人可能會對Laravel開發人員爲什麼使用這個功能有一些有用的設計評論。我知道我還沒有遇到過這樣的事情。 –

回答

3

這是你看到的正是在那裏,它不是Laravel有關,但嚴格PHP相關的(而不是OOP與此無關,這與此無關,它不是替代或任何類似的東西)。

docs

如果從全球範圍內調用,則當前腳本文件的執行結束。 如果包含當前腳本文件或需要,則將控制傳回給調用文件。此外,如果包含當前腳本文件,則返回值爲,則返回的值將作爲包含調用的值返回。

它通常用於配置文件:您定義一個配置並返回它;因此配置的使用者可以包含該文件並使用返回的值,而無需訪問或瞭解包含/必需文件中的詳細信息。

例如,你會遇​​到一個模式將沿着線的東西:

// config.php 
return [ 
    'config_key' => 'config_value' 
]; 

// config.consummer.php 
$config = include "config.php"; 

現在,你必須在$config生成的數組,如果需要,您可以在您的配置文件中的邏輯位,你的應用程序不需要知道任何關於你的配置文件,但它「返回一個數組」。

尋址幾點意見

有幾個直接在PHP中的處理配置文件優點:可以嵌入邏輯的一些中等量(認爲realpath,一些基本的算術),IDE的支持,沒有必要學習新的語言/標記,最重要的是,opcaching

一些框架通過允許您在首次執行時使用更簡單,更受限制的語言(yaml,xml等)和預編譯/緩存此配置到PHP來獲得簡單標記的易用性以及使用PHP文件的性能好處。

但是某處,無論你做什麼,並且包含/需要都在發生,如果你的配置來自PHP文件。沒有人會說你應該包含這些文件,我只是解釋爲什麼OP發現的這種事情正在完成。

又一次:這與OO或程序編程沒什麼關係。這是PHP提供的公正而慣用的工具,只要合理和方便就可以使用。

+0

就我個人而言,如果遇到這種情況,我會流下悲傷的淚水。我根本沒有看到這個'模式'的用法,雖然這是一個非常好的答案(所以沒有downvote),我強烈建議不要使用:) – Nanne

+0

這是一個非常常見的模式,例如,ZF2配置文件(其他地方,所以不是很少見)。它具有非常有效的用途,IMO。 – yivi

+0

這可能是一個味道的問題,但有一個看似「隨機」包含隱藏像真的給我的毛骨悚然。但是,由於有更好的配置選項不需要此功能,我仍然會反對使用此功能。但是,這又是一件私人事情,或者也許是一種「文化」(就像你在編程中你從同行中習慣的那樣)。但是,再次,這個答案沒有錯,我只是想提一下我的感受。在這裏,有一個upvote來彌補我的咆哮:) – Nanne

相關問題