2011-07-03 18 views
2

我想知道是否應該針對特定問題編寫函數(例如function specific()),或者我應該將這段代碼放入一個php腳本中,並在需要時調用require 'specific.php'需求與功能調用的內聯代碼

我在說的具體問題是關於處理通過POST請求的填充表單,然後重定向瀏覽器,因爲PRG(Post/Redirect/Get)模式(其中包括,exit將被調用,代碼isn在require函數調用之後繼續)。用於處理請求的代碼需要兩個腳本。請考慮下面的代碼:

somePage.php

require 'process_form_fnc.php'; // for Variant 2 

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    // process filled form 
    require 'process_form.php'; // Variant 1 
    process_form_fnc();   // or Variant 2 
} 

,你會選擇的功能或需要變種(爲什麼)?

回答

2

使用require在當前位置插入任意代碼塊是一個不好的駭客(即使並不少見)。我總是喜歡把我的代碼保存在函數中。

你可以找到C(#include任意代碼片段對比功能)類似的討論,幾乎相同的參數和同樣明確的共識。

2

變2.爲什麼?

  • 這就是功能的全部目的。
  • 一個函數可以具有參數(多個),並且返回值。
  • 函數都有自己的適用範圍,所以還不能與呼叫者範圍干涉。
+0

包括並要求實際做返回值(這不應該減小你的參數)。 – hakre

1

使用的包括一般只出現了幾個原因:

1)你有,你會在多個頁面使用通用多用的代碼片段

2 )爲了組織的目的,您想將代碼的某些部分抽象爲某種類似「庫」的容器/目錄。

1

我很少,如果直接使用include /需要。我的大部分工作都是通過類來完成的,我使用__AUTOLOAD來加載它。我個人使用的變體2,因爲你遇到了這個問題

$var = "test"; 
include "test.php"; 
$var = "test2"; 
include "test".php"; 

可能會導致有錯誤,如果你在那裏定義的函數,譬如說排序。你會得到一個重複的聲明。如果它是一個函數()

include "test.php"; 
outputTest("test"); 
outputTest("test2"); 

只要你沒有在該函數中定義一個函數,你應該沒問題。

1

該函數是我的偏好有幾個原因,其中一個主要是變量的範圍。

想象一下使用「require」的情況,然後在某處編輯所需的代碼,以包含與代碼中其他位置的變量衝突的新變量。

想象一下,您使用一個像$ x或$ i這樣的快速小通用變量,您可以創建間歇性的惡夢錯誤,這將是一個真正的頭痛追蹤。

1

該代碼應放置在一個函數或方法中,以便它可以有自己的變量作用域,而不是覆蓋全局名稱空間。然而,我寧願將它放在課程的一個方法中。通過這種方式,我可以使用類自動加載器僅在實際使用時加載包含的代碼,並進一步清除全局名稱空間。

http://php.net/manual/en/language.oop5.autoload.php