PHP 7:PHP变量和常量的定义

开发 前端
本章说说PHP 7变量的定义,如果对于变量和常量的定义,你会注意几个方面呢?

如果对于变量和常量的定义,你会注意几个方面呢?你可能会想到:

◆ 如何定义变量,它和C# 等语言有什么不同呢?

◆ 变量区分大小写吗?

◆ PHP的变量还有其他重要的吗?

◆ 常量和变量的定义一样吗?

分别讲述吧。

1.如何定义变量,它和C# 等语言有什么不同呢?

PHP 中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的。例如:

  1. <?php   
  2.  $var='Jim';  
  3.   $VAR='Kimi;  
  4.   echo "$var,$VAR";//输出“Jim,Kimi"  
  5.  ?> 

你可能还关心变量的命名,其实和大多数语言一样。

2. 变量区分大小写吗?

如 1里说的,区分大小写。

注意,需要说明的一点是自PHP4以来,引入了引用赋值的概念,其实和多数语言的引用类似,不过我觉得最类似的是C/C++.因为它也用到了"&"符号。例如:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->1 <?php  
  7. $foo = 'Bob';              // 赋值'Bob'给foo  
  8. $bar = &$foo;              // 通过$bar引用.注意&符号  
  9. $bar = "My name is $bar";  // 修改 $bar  
  10. echo $bar;  
  11. echo $foo;                // $foo 也修改了.  
  12. 7 ?>  

和其他语言一样,只能对有变量名的变量才可以引用。

3. PHP其他重要点

预定义变量

预定义变量在PHP是一个重要的概念。 PHP 提供了大量的预定义变量。由于许多这些变量依赖于运行的服务器的版本和设置,及其它因素,所以并没有详细的说明文档。一些预定义变量在 PHP 以命令行形式运行时并不生效。

需要注意的是 在PHP 4.2.0 以及后续版本中,PHP 指令 register_globals 的默认值为 off。这是 PHP 的一个主要变化。让 register_globals 的值为 off 将影响到预定义变量集在全局范围内的有效性。例如,为了得到DOCUMENT_ROOT 的值,将必须使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 来代替 $id 从 URL http://www.example.com/test.php?id=3 中获取 id 值,亦或使用$_ENV['HOME'] 来代替 $HOME 获取环境变量 HOME 的值。

从 PHP 4.1.0 开始,PHP 提供了一套附加的预定数组,这些数组变量包含了来自 web 服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效,例如,在任何范围内自动生效。因此通常被称为自动全局变量(autoglobals)或者超全局变量(superglobals)。(PHP 中没有用户自定义超全局变量的机制。)超全局变量罗列于下文中;而且,你也将注意到旧的预定义数组($HTTP_*_VARS)仍旧存在。自 PHP 5.0.0 起,长格式的 PHP 预定义变量可以通过设置 register_long_arrays 来屏蔽。

下表是PHP的超全局变量:

超全局变量 描述
$GLOBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量。该数组的键名为全局变量的名称。从 PHP 3 开始存在 $GLOBALS 数组。
$_SERVER 变量由 web 服务器设定或者直接与当前脚本的执行环境相关联。类似于旧数组 $HTTP_SERVER_VARS 数组(依然有效,但反对使用)。
$_GET 经由 URL 请求提交至脚本的变量。类似于旧数组 $HTTP_GET_VARS 数组(依然有效,但反对使用)。
$_POST 经由 HTTP POST 方法提交至脚本的变量。类似于旧数组 $HTTP_POST_VARS 数组(依然有效,但反对使用)。
$_COOKIE 经由 HTTP Cookies 方法提交至脚本的变量。类似于旧数组 $HTTP_COOKIE_VARS 数组(依然有效,但反对使用)。
$_FILES 经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用)
$_ENV 执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组(依然有效,但反对使用)。
$_REQUEST 经由 GET,POST 和 COOKIE 机制提交至脚本的变量,因此该数组并不值得信任。所有包含在该数组中的变量的存在与否以及变量的顺序均按照 php.ini 中的 variables_order 配置指示来定义。此数组在 PHP 4.1.0 之前没有直接对应的版本。参见 import_request_variables()。
$_SESSION 当前注册给脚本会话的变量。类似于旧数组 $HTTP_SESSION_VARS 数组(依然有效,但反对使用)

#p#

变量的应用范围

每个变量都有应用范围,那么PHP是怎么定义的呢?还是先看看下面代码吧:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. --> 1 <?php  
  7.  2  $var=0;  
  8.  3  function test($index)  
  9.  4  {  
  10.  5      $var=$var+1;  
  11.  6      echo "The ".$index." number is ".$var."<br>";  
  12.  7  }  
  13.  8  test(1);  
  14.  9  test(2)  
  15. 10 ?> 

你认为以上的代码会显示什么结果呢?

如果你认为是下面:

结果1:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->The 1 number is 1  
  7. The 2 number is 2 

不好意思,你的结果是错误的。

其实正确的结果应该是:

结果2

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->The 1 number is 1  
  7. The 2 number is 1 

那么你从其中发现了什么呢?我们可以知道虽然第2行的代码定义在外面,但第5行的变量和它是不一样的。第5行的变量仅在这个函数里使用。进一步的,如果我想调用第一行的变量而显示结果2.代码可以如下:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->   
  7.  <?php  
  8.   $var=0;  
  9.   function test($index)  
  10.   {  
  11.       global $var;  
  12.       $var=$var+1;  
  13.       echo "The ".$index." number is ".$var."<br>";  
  14.   }  
  15.   test(1);  
  16.   test(2)  
  17.  ?> 

这个代码段和上面的代码段有何区别呢?注意第5行,多了一个global关键字。明白了吧。

那么还有没有其他方法呢?答案是肯定的。

代码如下:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->   
  7. <?php 
  8.   $var=0;  
  9.   function test($index)  
  10.   {  
  11.         
  12.       $GLOBALS["var"]=$GLOBALS["var"]+1;  
  13.       echo "The ".$index." number is ".$GLOBALS["var"]."<br>";  
  14.   }  
  15.   test(1);  
  16.   test(2)  
  17.  ?> 

代码有什么特殊的吗?那就是用到了$GLOBALS这个超全局变量。

PHP也有静态变量的说法。不过静态变量一般用在函数里,只能是局部变量了。看看下面代码吧:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->   
  7.  <?php 
  8.  function Test()  
  9.  {  
  10.     static $a = 0;  
  11.     echo $a."<br>";  
  12.     $a++;  
  13.  }  
  14.  Test();  
  15.  Test();  
  16.  ?>  

结果为

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->1  

PHP还有一个相当令人兴奋的特性:可变变量

所谓可变变量,就是一个变量的变量名可以动态的设置和使用。

看看下面的例子:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. --> <?php 
  7.   $a="hello";  
  8.   $hello="world";  
  9.   echo $a." ".$$a;  
  10.  ?>  

输出的结果居然是hello,world.太神奇了。$$a其实就是$hello,因为$a的值是hello。

变量就这多了。下面看看常量。

常量

PHP的常量是不是前面加const呢?让我们看一看。

不是的。在PHP必须用下面的方式定义。

bool define ( string name, mixed value [, bool case_insensitive] )

name 为常量名,value为常量的值。case_insensitive]为大小写敏感。默认为敏感。例如:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->   
  7.  <?php  
  8.  define("CONSTANT""Hello world.");  
  9.  echo CONSTANT; // outputs "Hello world."  
  10.  echo Constant; // outputs "Constant" and issues a notice.  
  11.    
  12.  define("GREETING""Hello you.", true);  
  13.  echo GREETING; // outputs "Hello you."  
  14.  echo Greeting; // outputs "Hello you."  
  15.    
  16.  ?>  

常量和变量不同:

◆ 常量前面没有美元符号($);

◆ 常量只能用 define() 函数定义,而不能通过赋值语句;

◆ 常量可以不用理会变量范围的规则而在任何地方定义和访问;

◆ 常量一旦定义就不能被重新定义或者取消定义;

◆ 常量的值只能是标量。

原文:http://blog.csdn.net/jpr1990/article/details/7072281

【编辑推荐】

  1. PHP 7展望:PHP需要改变什么
  2. 大话PHP之性能
  3. 如果PHP是用英式英语编写的
  4. Zend Studio 9正式发布,强大的PHP IDE
  5. 手把手教你在Ubuntu上安装Apache、MySql和PHP
责任编辑:陈贻新 来源: jpr1990的博客
相关推荐

2011-06-15 15:36:19

PHP变量常量

2009-12-07 10:37:48

PHP预定义变量数组

2009-12-08 18:11:42

PHP系统常量

2011-07-12 17:06:43

PHP

2019-03-08 08:55:16

PHP7PHP5web安全

2009-12-04 13:14:19

PHP Global变

2009-11-26 14:38:08

PHP函数echo()

2011-07-01 08:41:12

PHP

2009-12-03 19:06:44

PHP关键字globa

2011-07-07 14:28:23

PHP

2009-11-18 14:11:10

PHP数组变量

2009-09-15 09:24:07

PHP和Python

2020-08-19 15:30:04

PHP网络安全代码

2009-12-09 17:14:06

PHP unset()

2009-12-01 19:08:18

PHP外部变量

2015-10-28 13:30:15

PHP7性能揭秘

2009-12-03 18:39:02

PHP变量php_se

2021-03-25 12:00:18

Python变量常量

2009-11-26 18:28:07

PHP函数trim()

2017-07-19 16:58:53

PHPFastCGI 内核探索
点赞
收藏

51CTO技术栈公众号