[英]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.