2020-10-28
PHP变量作用域(全局变量&局部变量)&global&static关键字用法实例分析

PHP变量作用域(全局变量&局部变量)&global&static关键字用法实例分析

本文实例讲述了PHP变量作用域(全局变量&局部变量)&global&static关键字用法。分享给大家供大家参考,具体如下:我们知道,变量呢,其实就相当于我们用来储存信息的容器。关于它的命名规则什么的,相信大家也是比较清楚的,这里就不赘述了。这里呢,主要就来看PHP变量的两个作用域,全局变量&局部变量。看到这两个变量作用域,相信大家脑海里会浮现两个单词global&static。没错,就是这两个词。我们知道,在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。然而,在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。下面,我们来看个实例:<?php$x=5; // 全局变量function myTest(){ $y=10; // 局部变量 echo "<p>测试函数内变量:<p>"; echo "变量 x 为: $x"; echo "<br>"; echo "变量 y 为: $y";}myTest();echo "<p>测试函数外变量:<p>";echo "变量 x 为: $x";echo "<br>";echo "变量 y 为: $y";?>在以上实例中 myTest() 函数定义了 $x 和 $y 变量。$x 变量在函数外声明,所以它是全局变量, $y 变量在函数内声明所以它是局部变量。当我们调用myTest()函数并输出两个变量的值,函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,因为 $x 变量在函数外定义,无法在函数内使用,如果要在一个函数中访问一个全局变量,需要使用 global 关键字。然后我们在myTest()函数外输出两个变量的值,函数将会输出全局部变量 $x 的值,但是不能输出 $y 的值,因为 $y 变量在函数中定义,属于局部变量。由此,我们就可以知道,我们可以在不同函数中使用相同的变量名称,因为这些函数内定义的变量名是局部变量,只作用于该函数内。这也算是一个小技巧了哈。废话不多说,我们先来看global关键字。global 关键字用于函数内访问全局变量。在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字,来看个实例:<?php$x=5;$y=10;function myTest(){ global $x,$y; $y=$x+$y;}myTest();echo $y; // 输出 15?>PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。所以,上面的实例可以写成这样:<?php$x=5;$y=10;function myTest(){ $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];}myTest();echo $y;?>大概了解了吧,好吧,我们再来看static关键字。当一个函数完成时,它的所有变量通常都会被删除。然而,有时候我们希望某个局部变量不要被删除。要做到这一点,就要我们第一次声明变量时使用 static 关键字。我们来看个实例:<?phpfunction myTest(){ static $x=0; echo $x; $x++;}myTest();myTest();myTest();//运行结果: 0 1 2?>我们可以看到,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。不过在这里咱们要知道,该变量仍然是函数的局部变量,不能再别的地方使用。不过,我们在使用递归的时候,还是会,用到这个什么static关键字的,大家有兴趣的,可以稍稍研究下。还是蛮有意思的。通过上述的各种点吧,有以下几个总结:1、定义在函数外部的就是全局变量,它的作用域从定义处一直到文件结尾。2、函数内定义的变量就是局部变量,它的作用域为函数定义范围内。3、函数之间存在作用域互不影响。4、函数内访问全局变量需要 global 关键字或者使用 $GLOBALS[index] 数组在 php 中函数是有独立的作用域,所以局部变量会覆盖全局变量,即使局部变量中并定义没有全局变量相同的变量,也会被覆盖。如下所示:<?php$a=5;$b=3;function t(){ echo $a-$b; // 输出 0}t();?>要想在函数中直接使用全局变量可以通过 global 关键字声明或者通过 php 中自定义的 $GLOBALS 数组获取:<?php$a=5;$b=3;function t1(){ global $a,$b; echo $a-$b; // 输出 2}t1();echo PHP_EOL;function t2(){ echo $GLOBALS['a']-$GLOBALS['b']; // 输出 2}t2();?>好啦,本次就到这里了。更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》及《php程序设计算法总结》希望本文所述对大家PHP程序设计有所帮助。...
2020-10-27
PHP 超级全局变量相关总结

PHP 超级全局变量相关总结

超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用。PHP 超级全局变量PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。PHP 超级全局变量列表: $GLOBALS $_SERVER $_REQUEST $_POST $_GET $_FILES $_ENV $_COOKIE $_SESSION 本章节我们将讲解几个常用的超级全局变量,其余变量我们在接下来几个章节会介绍到。PHP $GLOBALS$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。以下实例介绍了如何使用超级全局变量 $GLOBALS:<?php $x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; ?>以上实例中 z 是一个$GLOBALS数组中的超级全局变量,该变量同样可以在函数外访问。PHP $_SERVER$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。以下实例中展示了如何使用$_SERVER中的元素:<?php echo $_SERVER['PHP_SELF'];echo "<br>";echo $_SERVER['SERVER_NAME'];echo "<br>";echo $_SERVER['HTTP_HOST'];echo "<br>";echo $_SERVER['HTTP_REFERER'];echo "<br>";echo $_SERVER['HTTP_USER_AGENT'];echo "<br>";echo $_SERVER['SCRIPT_NAME'];?>下表列出了所有 $_SERVER 变量中的重要元素: 元素/代码 描述 $_SERVER['PHP_SELF'] 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.bar。__FILE__ 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。 $_SERVER['GATEWAY_INTERFACE'] 服务器使用的 CGI 规范的版本;例如,"CGI/1.1"。 $_SERVER['SERVER_ADDR'] 当前运行脚本所在的服务器的 IP 地址。 $_SERVER['SERVER_NAME'] 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com) $_SERVER['SERVER_SOFTWARE'] 服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24) $_SERVER['SERVER_PROTOCOL'] 请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。 $_SERVER['REQUEST_METHOD'] 访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。 $_SERVER['REQUEST_TIME'] 请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496) $_SERVER['QUERY_STRING'] query string(查询字符串),如果有的话,通过它进行页面访问。 $_SERVER['HTTP_ACCEPT'] 当前请求头中 Accept: 项的内容,如果存在的话。 $_SERVER['HTTP_ACCEPT_CHARSET'] 当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"。 $_SERVER['HTTP_HOST'] 当前请求头中 Host: 项的内容,如果存在的话。 $_SERVER['HTTP_REFERER'] 引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。) $_SERVER['HTTPS'] 如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。 $_SERVER['REMOTE_ADDR'] 浏览当前页面的用户的 IP 地址。 $_SERVER['REMOTE_HOST'] 浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。 $_SERVER['REMOTE_PORT'] 用户机器上连接到 Web 服务器所使用的端口号。 $_SERVER['SCRIPT_FILENAME'] 当前执行脚本的绝对路径。 $_SERVER['SERVER_ADMIN'] 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:[email protected]) $_SERVER['SERVER_PORT'] Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。 $_SERVER['SERVER_SIGNATURE'] 包含了服务器版本和虚拟主机名的字符串。 $_SERVER['PATH_TRANSLATED'] 当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。 $_SERVER['SCRIPT_NAME'] 包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名。 $_SERVER['SCRIPT_URI'] URI 用来指定要访问的页面。例如 "/index.html"。 PHP $_REQUESTPHP $_REQUEST 用于收集HTML表单提交的数据。以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:<html><body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">Name: <input type="text" name="fname"><input type="submit"></form> <?php $name = $_REQUEST['fname']; echo $name; ?> </body></html>PHP $_POSTPHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据:<html><body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">Name: <input type="text" name="fname"><input type="submit"></form> <?php $name = $_POST['fname']; echo $name; ?> </body></html>PHP $_GETPHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。$_GET 也可以收集URL中发送的数据。假定我们有一个包含参数的超链接HTML页面:<html><body><a href="test_get.php?subject=PHP&web=runoob.com" rel="external nofollow" >Test $GET</a></body></html>当用户点击链接 "Test $GET", 参数 "subject" 和 "web" 将发送至"test_get.php",你可以在 "test_get.php" 文件中使用 $_GET 变量来获取这些数据。以下实例显示了 "test_get.php" 文件的代码:<html><body> <?php echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];?> </body></html>以上就是PHP 超级全局变量总结的详细内容,更多关于PHP 超级全局变量的资料请关注梦主博客其它相关文章!...
微信二维码