我有这样的代码:

$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变量的哪些方面已更改。这样的事情。

php.net/manual/en/security.globals.php

@robinCTS meta.stackoverflow.com/questions/317559/

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

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

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

php中全局变量如何设置,如何在php中声明全局变量?相关推荐

  1. 如题,如何在IDEA的settings属性中,通过设置快捷键实现字符串中的英文字母转大小写?

    如题,如何在IDEA的settings属性中,通过设置快捷键实现字符串中的英文字母转大小写? Ctrl + Shift+u

  2. aws中部署防火墙_如何在AWS中设置自动部署

    aws中部署防火墙 by Harry Sauers 哈里·绍尔斯(Harry Sauers) 如何在AWS中设置自动部署 (How to set up automated deployment in ...

  3. java文件的路径怎么设置,如何在Java中设置路径

    本文概要 是必需的路径使用工具,如javac的,Java等要被设置 如果要保存的JDK / bin目录中的Java源文件,不需要路径设置,因为所有的工具将在当前目录中可用. 但是,如果你有你的Java ...

  4. linux下删除的文件怎么恢复出厂设置,如何在Linux中恢复已删除的文件(机器翻译)...

    如果您在Linux中不小心删除了一个文件,不要担心,只要该区域的磁盘尚未被覆盖,您可能仍然可以恢复它.这篇文章将告诉你如何在Linux中轻松恢复被删除的文件. Foremost能够搜索磁盘或原始图像文 ...

  5. java 中覆 写tostring_如何在Java中正确覆盖toString()?

    如何在Java中正确覆盖toString()? 听起来有点愚蠢,但我需要帮助我的toString()方法,这是非常irking. 我尝试在网上查找,因为toString是搞砸了,"没有找到K ...

  6. npm中node更新_如何在Node中管理NPM和功能时保持理智

    npm中node更新 by Ted Gross 泰德·格罗斯(Ted Gross) 如何在Node中管理NPM和功能时保持理智 (How to keep your sanity while manag ...

  7. 符号在excel中的引用_如何在Excel中添加项目符号

    &符号在excel中的引用 There's no built-in feature for bullets in Excel, like there is in a Word document ...

  8. 如何在ppt中生成柱状图_如何在ppt中制作柱形图和曲线图

    如何在 ppt 中制作柱形图和曲线图 篇一: ppt 柱状图与线状同在的操作 用 excel2010 制作双轴柱线复合图表 就是要用 excel2010 做一个这样的图表: excel2010 中,左 ...

  9. 如何在word中制作流程图_如何在Word中创建流程图

    如何在word中制作流程图 Microsoft Word provides built-in tools for creating and arranging different types of f ...

最新文章

  1. ES 在数据量很大的情况下(数十亿级别)如何提高查询效率?
  2. python3 练习题100例 (二十二)输入两个字符串,输出两个字符串集合的并集
  3. JavaScript中类型检测
  4. iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer...
  5. (转)看盘ABC:看盘七大指标
  6. Qt删除 空格/空白符
  7. 【英语学习】【Level 08】U05 Better option L5 A picture is worth a thousand words
  8. c语言一串字符括号配对,C语言实现括号匹配的方法
  9. LNMP(linux+nginx+mysql+php)服务器环境配置
  10. go技巧-json转map
  11. 《东周列国志》第九十回 苏秦合纵相六国 张仪被激往秦邦
  12. Spring Boot+Spring Security:注解:@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全 - 第20篇
  13. HBuilderX、微信开发者工具、VScode之间运行微信公众号
  14. 年已过,新的一年如何过?
  15. android第三方上传文件,安卓和苹果终于打通!互传文件无需借助第三方,一碰就能传...
  16. 配置python命令tab键自动补全
  17. 人民币,大写中文与数字之间转换
  18. Python爬取新闻动态评论
  19. js 实现 手机app移动端 省市区三级联动选择器(附源码)
  20. Mac常用下载软件速度实测对比,迅雷最快?

热门文章

  1. 操作元素-改变元素内容
  2. 复合选择器-并集选择器(HTML、CSS)
  3. zabbix4监控mysql_zabbix----4-----监控mysql
  4. ise生成msk文件的用处_ISE中上载程序出错,msk文件缺失有关问题
  5. 最短寻道时间优先算法c语言程序,操作系统先来先服务、最短寻道时间优先(SSTf)、扫描算法(SCAN)、循环扫描算法(CSCAN)的c++实现.doc...
  6. linux计划任务一小时,linux,计划任务,每小时执行一次(共7篇).docx
  7. TreeMap的排序
  8. 合格前端系列第九弹-前端面试那些事
  9. Oracle 11gR2 RAC集群服务启动与关闭命令汇总
  10. android 自定义button点击事件,自定义View(2)-从源码分析button的onClick和onTouch