[英]Using global vars within a function in PHP the way you do it in Javascript
我有一個使用大量全局變量和數組的函數-例如
$a=1;
$b[0]='a';
$b[1]='b';
$c='Hello';
function foo() {
echo "$a
$b[0]
$b[1]
$c";
}
我知道,與JS相反,調用函數時必須包含var:
function foo($a,$b,$c)
但是由於我在函數中使用了許多不同的var和數組,並且由於大多數var的主要來源是$ _GET數組(在使用extract($ _ GET)之后),所以我不確定如何執行此操作。
有沒有辦法使PHP函數的行為類似於JS函數?
您應該使用“ global”關鍵字,它告訴編譯器尋找全局變量。
function foo() {
**global $a, $b, $c;**
echo "$a
$b[0]
$b[1]
$c";
}
您可以使用global關鍵字:
$a = "Hello World";
$b = "Hello World";
function outputStrings(){
global $a, $b;
echo $a." - ".$b;
}
$b = "Goodbye World";
outputStrings(); // ouputs "Hello World - Goodbye World"
但是,最好不要使用此結構。 它通常令人困惑,並且會使您的代碼難以維護。 WordPress在其代碼庫中大量使用了這種方法,這使得調試非常棘手。 其他插件和代碼可以插入和修改全局變量,從而更改腳本的輸出。
最好是:
這樣,您可以使用對象,而不僅僅是隨機全局變量。 解決了您在腳本過程中意外覆蓋全局變量的問題。 它還有助於正確組織變量,因此與用戶有關的所有變量都可以在User
類中。 這樣構造它更有意義。
class User {
private $firstName;
private $secondName;
private $gender;
public function __construct($fname, $sname, $gend){
$this->firstName = $fname;
$this->secondName = $sname;
$this->gender = $gend;
}
public function outputDetails(){
echo $this->firstName." ".$this->secondName." is ".$this->gender;
}
}
$user = new User("Thomas", "Clayson", "Male");
$user->outputDetails();
就像您在示例中所示。 這是普遍接受的標准方法。 您應該始終像這樣傳遞變量,它可以幫助您定義范圍和適當的結構。 這也意味着您擁有變量並將其傳遞給函數時就知道變量的值是什么,而不僅僅是從全局范圍中抽取變量。
由於在PHP中不必在使用變量之前先聲明變量,因此以下代碼對於函數所引用的變量是模棱兩可的。
$a = 'ten';
function foo($a) {
echo($a);
}
foo(10); // Outputs: 10
PHP假設函數范圍內的所有變量都是局部變量,除非使用函數global
關鍵字將它們聲明為來自全局范圍,否則PHP消除了歧義。
$a = 10;
function foo($b) {
global $a;
echo($a);
}
foo('ten'); // Outputs: 10
通常不建議使用全局變量,因為它會導致對象之間的緊密耦合,降低代碼的可讀性和局部性,污染全局名稱空間並增加開發人員的負擔,因為開發人員必須記住他們擁有多少個/什么全局變量。
您可以使用global
關鍵字訪問global vars:
global $a=1;
global $b[0]='a';
global $b[1]='b';
global $c='Hello';
function foo() {
global $a, $b, $c;
echo "$a
$b[0]
$b[1]
$c";
}
否則,您可以使用預定義的$GLOBALS
數組:
function foo() {
echo "$GLOBALS['a']
$GLOBALS['b'][0]
$GLOBALS['b'][1]
$GLOBALS[c]";
}
在這里,您可以獲得更多信息:
只要有一個函數,PHP 5.3中的上下文管理都不允許在不使用“ global”關鍵字的情況下訪問全局變量。
Php.net在此處有關於該主題的帖子。
function foo() {
global $a, $b, $c;
echo "$a
$b[0]
$b[1]
$c";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.