2014-11-20 152 views
0

難道是算錯了一個變量傳遞給函數,其中傳遞的變量具有相同的名稱作爲函數本身的變量起作用?我從來沒有看到任何人這樣做,但想知道是否有理由(除了可讀性)。例如:通變量使用相同的名稱

$variable = "value"; 

function myFunction($variable) { 
    return $variable; 
} 
+0

我不這麼認爲。 – www139 2014-11-20 22:45:26

+0

不,在函數'$ variable'內部是你傳遞的參數,而不是全局變量。 – Zerquix18 2014-11-20 22:45:52

回答

2

不存在不這樣做,除了一些命名混亂的問題。因爲,

$variable = "value"; // this declaration belong to a global scope 

// but $variable passing through as argument, makes it scope within that function declaration only 
function myFunction($variable) { 
    return $variable; 
} 

你可能有期待,如果你調用像myFunction()即函數不帶任何參數,它會回報你的「價值」,但絕對不是,導致$variable傳遞的參數不是全局的。

但是,如果您嘗試使用myFunction內的全局$variable,那麼它將導致一些衝突,這就是爲什麼沒有人這樣做。

+0

我認爲在現代應用程序中避免這種衝突的更常見的方式是從不使用全局變量,在這一點上,您可以給變量賦予任何名稱對於它們的範圍有意義的變量。 – IMSoP 2014-11-20 23:06:51

0

除了使變量有點混亂追蹤,這沒有什麼錯。它們存在於不同的範圍內。

-2

您可以使用全局和在參數變量添加默認值。

$variable = "value"; 
function myFunction($variable = '') { 
     global $variable; 
    return $variable; 
} 
+0

我不確定你在想什麼確實如此,但你所有的都有一個未使用的函數參數。 – IMSoP 2014-11-20 23:04:59

0

它是由你,但反之,如果你想故意變量傳遞到一個函數..然後你必須使用這樣的:

$variable = "value"; 

function myFunction($variable) { 
global $variable; 
return $variable; 
} 

echo myFunction('another value'); 

還有一點。當創建功能則可以設置一個默認值的PARAMS避免發生錯誤:

function myFunction($variable="default value") { 
return $variable; 
} 

echo myFunction(); 
0

有什麼不妥的地方是在所有的,我還以爲這是很常見的。

然而,你應該總是一個變量或參數選擇最佳的名稱,在每種情況下,不適用一個規則到你的整個代碼。

例如,在數據庫中查找功能,它可能是很明顯指的是什麼$id,所以這將是一個明智的參數名稱;但是在你調用它的地方,你可能會有很多不同種類的ID,所以應該使用更具描述性的變量名稱。另一方面,每次構建一個SQL字符串時,它可能是範圍內唯一這樣的變量,因此給它一個一致的名稱可以使代碼保持整潔並易於閱讀。

一個常見的現象是,所有的代碼讀取往往比它寫入(是的,即使你的個人網站,你會不會與世界敢份額)。應該根據這些選擇變量名稱:是什麼讓這些代碼易於閱讀,理解和維護?

相關問題