的。

创建(声明)PHP 变量

PHP 没有声明变量的命令。
变量在您第一次赋值给它的时候被创建:

实例

<?php$txt=”Hello world!”; $x=5; $y=10.5; ?>
运行实例 »
在上面的语句执行中,变量txt将保存值Hello world!,且变量x将保存值5
注释:当您赋一个文本值给变量时,请在文本值两侧加上引号。


PHP 是一门弱类型语言

在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型。
PHP 会根据变量的值,自动把变量转换为正确的数据类型。
在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。


PHP 变量作用域

变量的作用域是脚本中变量可被引用/使用的部分。
PHP 有四种不同的变量作用域:

  • local
  • global
  • static
  • parameter

局部和全局作用域

在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问:
运行实例 »

实例

<?php$x=5; // 全局变量function myTest(){$y=10; // 局部变量echo “

测试函数内变量:

“;echo “变量 x 为: $x”;echo “
“;echo “变量 y 为: $y”;} myTest();echo “

测试函数外变量:

“;echo “变量 x 为: $x”;echo “
“;echo “变量 y 为: $y”;?>
在以上实例中 myTest() 函数定义了 $x 和 $y 变量。 $x 变量在函数外声明,所以它是全局变量 , $y 变量在函数内声明所以它是局部变量。
当我们调用myTest()函数并输出两个变量的值, 函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,因为 $x 变量在函数外定义,无法在函数内使用,如果要在一个函数中访问一个全局变量,需要使用 global 关键字。
然后我们在myTest()函数外输出两个变量的值,函数将会输出全局变量 $x 的值,但是不能输出 $y 的值,因为 $y 变量在函数中定义,属于局部变量。

PHP 变量 - 图1 你可以在不同函数中使用相同的变量名称,因为这些函数内定义的变量名是局部变量,只作用于该函数内。

PHP global 关键字

global 关键字用于函数内访问全局变量。
在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:
运行实例 »

实例

<?php$x=5; $y=10; functionmyTest(){global$x,$y; $y=$x+$y; }myTest(); echo$y; // 输出 15?>
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。index保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
上面的实例可以写成这样:
运行实例 »

实例

<?php$x=5; $y=10; functionmyTest(){$GLOBALS[‘y’]=$GLOBALS[‘x’]+$GLOBALS[‘y’]; }myTest(); echo$y; ?>


Static 作用域

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用static关键字:
运行实例 »

实例

<?phpfunctionmyTest(){static$x=0; echo$x; $x++; echoPHP_EOL; // 换行符}myTest(); myTest(); myTest(); ?>
然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
注释:该变量仍然是函数的局部变量。


参数作用域

参数是通过调用代码将值传递给函数的局部变量。
参数是在参数列表中声明的,作为函数声明的一部分:

实例

<?phpfunctionmyTest($x){echo$x; }myTest(5); ?>
我们将在PHP 函数章节对它做更详细的讨论。
PHP 语法
PHP echo/print 语句

2 篇笔记写笔记

  1. 佛系coder222*8741@qq.com522在 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();
?>佛系coder佛系coder222*8741@qq.com3年前 (2018-04-26)

  • 1、定义在函数外部的就是全局变量,它的作用域从定义处一直到文件结尾。
  • 2、函数内定义的变量就是局部变量,它的作用域为函数定义范围内。
  • 3、函数之间存在作用域互不影响。
  • 4、函数内访问全局变量需要global关键字或者使用$GLOBALS[index]数组
    1. 南宫晟醺132*443@qq.com89变量的作用域是脚本中变量可被引用和使用的部分,PHP 中有四种不同的变量作用域:1、local(本地的)—— 局部变量的作用域在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。<?php
      function test()
      {
      $a = 15;
      echo “内部输出结果:” . $a;
      }
      echo “外部输出结果:” . $a; // 无法访问变量 a
      echo PHP_EOL;
      test();
      ?>输出结果:外部输出结果:
      内部输出结果:15
      2、global(总体的)—— 全局变量的作用域**在所有函数外部定义的变量是全局变量,除了函数外,全局变量可以被脚本中的任何部分访问、要在一个函数中访问一个全局变量,需要使用 global 关键字。<?php
      $x = 5;
      $y = 10;
      $z = 0;

function test()
{
global$x,$y,$z;
$z = $x + $y;
}

test();
echo $z;
?>结果:15PHP 将所有的全局变量存储在一个名为$GLOBALS[index]的数组里,index保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。<?php
$x = 5;
$y = 10;
$z = 0;
function test()
{
$GLOBALS[‘z’] = $GLOBALS[‘x’]+$GLOBALS[‘y’];
}

Test();
echo $z;
?>结果:153、static(静态的)—— static 作用域当一个函数执行完成时,它的所有变量通常都会被删除。然而,有时需要局部变量不要被删除,要做到这一点,请在您第一次声明变量时使用 static 关键字。当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。<?php
function test() {
static $x=0;
echo $x . “ “;
$x++;
}

test();
test();
test();
test();
?>结果:0 1 2 3每次调用函数时, 该变量将会保留请前函的前被调用的值一次。4、parameter(参数)——参数作用域参数是通过调用代码将值传递给函数的局部变量。关于局部变量和全局变量的优先级,因为在PHP中函数都有自己单独的作用域,所以在局部变量的优先级要大于全局变量(在你不声明这个变量之前),声明之后此变量就变成了局部变量如果修改值那么全局变量的值也会改变。<?php
$a = 10;
$b = 5;
function test()
{
$a = 15;
$b = 5;
$z = $a-$b;
echo $z;
}

test();

function test1()
{
global $a,$b;
$a = 15;
$b = 5;
$z = $a-$b;
echo PHP_EOL;
echo $z;
}

test1();

function test2()
{
global $a,$b;
$z= $a-$b;
echo PHP_EOL;
echo $z;
}

test2();
?>结果:10 10 10

PHP 变量作用域

序号 作用域 描述
1 local 局部作用域
2 global 全局作用域
3 static 静态作用域
4 parameter 函数参数作用域

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; functionaddition(){$GLOBALS[‘z’] = $GLOBALS[‘x’] + $GLOBALS[‘y’]; }addition(); echo$z; ?>
运行实例 »
以上实例中 z 是一个$GLOBALS数组中的超级全局变量,该变量同样可以在函数外访问。


PHP $_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
以下实例中展示了如何使用$_SERVER中的元素:

实例

<?phpecho$_SERVER[‘PHP_SELF’]; echo”
“; echo$_SERVER[‘SERVER_NAME’]; echo”
“; echo$_SERVER[‘HTTP_HOST’]; echo”
“; echo$_SERVER[‘HTTP_REFERER’]; echo”
“; echo$_SERVER[‘HTTP_USER_AGENT’]; echo”
“; echo$_SERVER[‘SCRIPT_NAME’]; ?>
运行实例 »
下表列出了所有 $_SERVER 变量中的重要元素:

元素/代码 描述
$_SERVER[‘PHP_SELF’] 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $SERVER[‘PHPSELF’] 将得到 /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 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@runoob.com)
$_SERVER[‘SERVER_PORT’] Web 服务器使用的端口。默认值为 “80”。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
$_SERVER[‘SERVER_SIGNATURE’] 包含了服务器版本和虚拟主机名的字符串。
$_SERVER[‘PATH_TRANSLATED’] 当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
$_SERVER[‘SCRIPT_NAME’] 包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE 常量包含当前脚本(例如包含文件)的完整路径和文件名。
$_SERVER[‘SCRIPT_URI’] URI 用来指定要访问的页面。例如 “/index.html”。

PHP $_REQUEST

PHP $_REQUEST 用于收集HTML表单提交的数据。
以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 “Submit” 按钮提交表单数据时, 表单数据将发送至

标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:

实例

"> Name: <?php $name = $_REQUEST[‘fname’]; echo $name; ?>
运行实例 »


PHP $_POST

PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:”method=”post”。
以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 “Submit” 按钮提交表单数据时, 表单数据将发送至

标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据:

实例

"> Name: <?php $name = $_POST[‘fname’]; echo $name; ?>
运行实例 »


PHP $_GET

PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:”method=”get”。
$_GET 也可以收集URL中发送的数据。
假定我们有一个包含参数的超链接HTML页面:

Test $GET



当用户点击链接 “Test $GET”, 参数 “subject” 和 “web” 将发送至”test_get.php”,你可以在 “test_get.php” 文件中使用 $_GET 变量来获取这些数据。
以下实例显示了 “test_get.php” 文件的代码:

实例

<?phpecho”Study “ . $_GET[‘subject’] . “ @ “ . $_GET[‘web’]; ?>
运行实例 »
提示:你如果想学习更多关于 $_POST 和 $_GET 的知识,请访问我们的PHP 表单章节。