1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > php中全局变量如何设置 如何在php中声明全局变量?

php中全局变量如何设置 如何在php中声明全局变量?

时间:2019-01-23 15:09:45

相关推荐

php中全局变量如何设置 如何在php中声明全局变量?

我有这样的代码:

$a="localhost";

function body(){

global $a;

echo $a;

}

function head(){

global $a;

echo $a;

}

function footer(){

global $a;

echo $a;

}

?>

有什么方法可以在一处定义全局变量并使变量$a一次在所有函数中访问? 不使用global $a;呢?

没有没有。 如果您不喜欢global关键字,请考虑在所有范围内使用$GLOBALS[a]超全局变量,或考虑将参数传递给函数。

如果它很重要,那么甚至可以使用会话变量。

可以使用$GLOBALS数组代替:

$GLOBALS['a'] = 'localhost';

function body(){

echo $GLOBALS['a'];

}

从手册中:

An associative array containing references to all variables which are currently defined in the global scope of the script. The variable names are the keys of the array.

如果您有一组需要一些公共变量的函数,那么带有属性的类可能是一个不错的选择,而不是全局的:

class MyTest

{

protected $a;

public function __construct($a)

{

$this->a = $a;

}

public function head()

{

echo $this->a;

}

public function footer()

{

echo $this->a;

}

}

$a = 'localhost';

$obj = new MyTest($a);

如果变量不会更改,则可以使用define

例:

define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!');

function footer()

{

echo FOOTER_CONTENT;

}

尝试修改FOOTER_CONTENT时会发生什么?就像Java中的final或C,C ++和C#中的const一样吗?

如果您尝试第二次定义FOOTER_CONTENT,则php会发出有关它的通知

每次加载页面时,我需要计算当前的UNIX纪元时间,然后在几个计算(函数)中使用该值。"定义"对我有用。最初,我没有看到" echo FOOTER_CONTENT;"。没有前面的$,我得到了错误。

如果变量不会更改,则它不是变量。是吗?

语义伴侣。

在$ GLOBALS超级全局数组中添加变量,例如

$GLOBALS['variable'] = 'localhost';

并在全球范围内使用

或者您可以使用在整个脚本中都可以访问的常量

define('HOSTNAME', 'localhost');

如果使用一次定义,则无法更改定义!

在您的第一个示例中,是说$ variable现在在脚本的后面称为localhost了吗?

不,如果要使用此变量,则必须像$ GLOBALS [variable]一样使用它;

如果在函数外部声明了变量,则其已经在全局范围内。因此,无需声明。但是从那里调用此变量必须有权访问此变量。如果从函数内部调用,则必须使用global关键字:

$variable = 5;

function name()

{

global $variable;

$value = $variable + 5;

return $value;

}

在函数外使用全局关键字不是错误。如果要将此文件包含在函数中,则可以将变量声明为global。

config.php

global $variable;

$variable = 5;

other.php

function name()

{

require_once __DIR__ . '/config.php';

}

您也可以使用$GLOBALS。这是一个超全球化的环境,因此无处不在。

$GLOBALS['variable'] = 5;

function name()

{

echo $GLOBALS['variable'];

}

根据您的选择,您可以选择其中一个。

谢谢我需要这个用于mysqli_query($ db,...)函数

这个答案很晚,但是我要做的是设置一个类,该类将布尔值,数组和整数初始值保存为全局范围静态变量。如此定义任何常量字符串。

define("myconstant","value");

class globalVars {

static $a = false;

static $b = 0;

static $c = array('first' => 2, 'second' => 5);

}

function test($num) {

if (!globalVars::$a) {

$returnVal = 'The ' . myconstant . ' of ' . $num . ' plus ' . globalVars::$b . ' plus ' . globalVars::$c['second'] . ' is ' . ($num + globalVars::$b + globalVars::$c['second']) . '.';

globalVars::$a = true;

} else {

$returnVal = 'I forgot';

}

return $returnVal;

}

echo test(9); ---> The value of 9 + 0 + 5 is 14.

echo"";

echo globalVars::$a; ----> 1

static关键字必须存在于该类中,否则变量$ a,$ b和$ c将不会被全局范围化。

由于许多原因,这是一个很好的解决方案。静态类仅需在基本变量名称中添加几个字符:G :: $ Name,其声明如下所示:class G {static $ Name,$ Name2;}注意G可以是真正的全局变量,那么E可以用于与员工相关的变量。这比PHP支持的全面的面向对象范例更容易编程。如果确实需要常量,则可以像在"静态"之后声明的变量一样,在"常量"之后声明它们-只需省略美元符号即可。 G :: Example将是全局常量的示例。

如果符合您的意图,可以在Closure函数或Lambdas中尝试使用关键字use ...虽然是PHP 7.0。那不是更好,而是另一种选择。

$foo ="New";

$closure = (function($bar) use ($foo) {

echo"$foo $bar";

})("York");

演示|

信息

您以编写问题的方式回答了这个问题-使用'define'。但是一旦设置,就无法更改定义。

另外,也可以在类中使用带有常量的技巧,例如class :: constant。您还可以通过向类声明静态属性来使它们可变,并具有用于设置静态属性(如果要更改它)的函数。

让我们考虑一些不同:

class globe{

static $foo ="bar";

}

您可以随心所欲地使用和修改它,例如:

function func(){

echo globe::$var;

}

如果您使用过程函数而不是变量,并在任意位置调用它们该怎么办?

我通常会收集配置值,并将它们放入带有return语句的函数中。我只包括需要利用全局值并调用特定函数的地方。

function host()

{

return"localhost";

}

您不应该再使用全局变量,因为它们在PHP 5.4中不可用。

REGISTER GLOBALS已删除。不是全局变量。

按照书面说明,该答案是错误的,应进行更新以反映unity100的评论。如果GLOBALS仍然可用,请说明GLOBAL变量的哪些方面已更改。这样的事情。

/manual/en/security.globals.php

@robinCTS /questions/317559/

@RobertColumbia非常有趣的帖子,我会牢记其他答案,但是,它不适用于这种特殊情况。 (我希望您只是使用该meta来指出"不做那个"答案可能是有效的,而不是证明这个答案是合理的;))"不做那个"可以是一个有效的答案。"-"可以是"而不是"是"。"但是有时候,无需执行任何操作。如果您只是停止做错事,那么一切都会神奇地重新开始工作。"-由于代码未"损坏",因此此处不再适用。OP只是希望采用"少打字"的工作方式。

"实际上是在试图回答这个问题吗?在大多数情况下是这样。" -"最多",而不是"全部"。 (我什至会质疑"最",但我还没有看到足够多的答案来做出明智的论点。)"在这种情况下,事实并非如此。" -出于同样的原因,在"答案"中也并非如此:"更糟糕的是,墨菲的答案并未提出解决问题的方案。"和"它根本没有给质问者一种工具或方法,也没有提供任何解决其问题的方法"。 …

最后,从规范的帮助中心,我如何写一个好的答案?,我们看到"具体是什么问题要问?请确保您的答案提供了这一点或一种可行的选择。答案可以是"不要做"。该",但它还应包括"尝试使用此方法",这与元数据并不矛盾。因此,我以前的修辞问题仍然存在-"这将以什么可能的方式回答已发布的问题……?"。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。