用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

PHP 中变量 常量的定义与用法

时间:2015-01-23  来源:西部数据  作者:西部数据

变量用于存储值,比如数字、文本字符串或数组,一旦设置了某个变量,我们就可以在脚本中重复地使用它,PHP 中的所有变量都是以 $ 符号开始的.

在 PHP 中设置变量的正确方法是:$var_name = value;PHP 的入门者往往会忘记在变量的前面的 $ 符号,如果那样做的话,变量将是无效的,让我们试着创建一个存有字符串的变量,和一个存有数值的变量.

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

如何定义变量,它和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. <?php 
  2. $foo = 'Bob';              // 赋值'Bob'给foo 
  3. $bar = &$foo;              // 通过$bar引用.注意&符号 
  4. $bar = "My name is $bar";  // 修改 $bar 
  5. echo $bar
  6. echo $foo;                // $foo 也修改了. 
  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.phpfensi.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 数组(依然有效,但反对使用) 

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

  1. <?php 
  2.  $var=0; 
  3.  function test($index
  4.  { 
  5.      $var=$var+1; 
  6.      echo "The ".$index." number is ".$var."<br>"
  7.  } 
  8.  test(1); 
  9.  test(2) 
  10. ?> 

你认为以上的代码会显示什么结果呢?如果你认为是下面:

结果1:

The 1 number is 1

The 2 number is 2不好意思,你的结果是错误的。

其实正确的结果应该是:

结果2

The 1 number is 1

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

  1. <?php 
  2. $var=0; 
  3.  function test($index
  4.  {
  5.      global $var
  6.      $var=$var+1; 
  7.      echo "The ".$index." number is ".$var."<br>"
  8.  } 
  9.  test(1); 
  10.  test(2) 
  11. ?> 

这个代码段和上面的代码段有何区别呢?注意第5行,多了一个global关键字,明白了吧,那么还有没有其他方法呢?答案是肯定的,代码如下:

  1. <?php 
  2.  $var=0; 
  3.  function test($index
  4.  { 
  5.       
  6.      $GLOBALS["var"]=$GLOBALS["var"]+1; 
  7.      echo "The ".$index." number is ".$GLOBALS["var"]."<br>"
  8.  } 
  9.  test(1); 
  10.  test(2) 
  11. ?> 

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

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

  1.  <?php 
  2.  function Test() 
  3.  { 
  4.     static $a = 0; 
  5.     echo $a."<br>"
  6.     $a++; 
  7.  } 
  8. Test(); 
  9.  Test(); 
  10.  ?>  
  11. //结果为 
  12. //1 
  13. //2 

PHP还有一个相当令人兴奋的特性:可变变量,所谓可变变量,就是一个变量的变量名可以动态的设置和使用,看看下面的例子:

  1. <?php 
  2.  $a="hello"
  3.  $hello="world"
  4.  echo $a." ".$$a
  5. ?> 

输出的结果居然是hello,world,太神奇了,$$a其实就是$hello,因为$a的值是hello,变量就这多了,下面看看常量.

常量:PHP的常量是不是前面加const呢?让我们看一看,不是的,在PHP必须用下面的方式定义.

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

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

  1. <?php 
  2. define("CONSTANT""Hello world."); 
  3. echo CONSTANT; // outputs "Hello world." 
  4. echo Constant; // outputs "Constant" and issues a notice.  
  5. define("GREETING""Hello you.", true); 
  6. echo GREETING; // outputs "Hello you." 
  7. echo Greeting; // outputs "Hello you."  
  8. ?> 

常量和变量不同:

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

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

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

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

常量的值只能是标量。

实例代码如下:

  1. <?php 
  2. $txt = "Hello World!"
  3. $number = 16; 
  4. ?> 

PHP 是一门松散类型的语言(Loosely Typed Language),在 PHP 中,不需要在设置变量之前声明该变量,在上面的例子中,您看到了,不必向 PHP 声明该变量的数据类型,根据变量被设置的方式,PHP 会自动地把变量转换为正确的数据类型,在强类型的编程语言中,您必须在使用前声明变量的类型和名称.

在 PHP 中,变量会在使用时被自动声明,代码如下:

  1. <?php 
  2.  //引用 
  3.  $one="test"
  4.  two=&amp;$one;//相当于传地址,两个变量指向一个地址 
  5.  
  6. //动态变量 
  7. $one="######"
  8. $two="one"
  9. $three="two"
  10.  
  11. echo $three."&lt;br&gt;";//输出"two" 
  12. echo $$three."&lt;br&gt;";//输出"one" 
  13. echo $$$three."&lt;br&gt;";//输出"######" 
  14.  
  15. //php中有8个类型 
  16. //4种标量:   int integer 
  17. //     bool boolean 
  18. //     float,double,real 
  19. //     string 
  20. //2种复合类型: array 
  21. //  object 
  22. //2种特殊类型:  资源类型 resource 
  23. //   空类型   null 
  24.  
  25.    
  26. //整数的声明   
  27. $int=10; //十进制声明 
  28. $int=045;//八进制声明 
  29. $int=0xff;//十六进制声明 
  30. $float=3.14E+5;//科学计数法 
  31. $float=3.14E-5; 
  32.  
  33. //一下都是false的情况 
  34. $bool=false;  
  35. $bool=0; 
  36. $bool=0.000; 
  37. $bool=null; 
  38. $bool=""
  39. $bool=" "
  40. $bool="0"
  41. $bool=array(); 
  42.  
  43. //字符串的声明 
  44. //1.单引号和双引号都可以声明字符串 
  45. //2.声明的字符串没有长度限制 
  46. //3.在双引号的字符串中,既可以直接解析变量,又可以直接使用转义字符(可以转义单引号本身,也可以转义转义字符"") 
  47. //4.在单引号的字符串中,不可以直接解析变量,也不可以使用转义字符 
  48. //5.在双引号中不能再使用双引号,在单引号中不能再使用单引号 
  49. //6.最好使用单引号, 
  50. $str='aaaaa'
  51. $str="aaaa"
  52. //定界符声明字符串,大量字符串 
  53. //test是自定义的一个字符串,后面不能有任何字符,空格也不可以 
  54. //也要以test这个自定义的字符串结束,结束前不能有任何字符 
  55. $str=&lt;&lt;&lt;test 
  56. this write content...... 
  57. test; 
  58. ?> 
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门