您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2025/2/3 14:59:39发布27次查看
本章说说变量的定义。
如果对于变量和常量的定义,你会注意几个方面呢?你可能会想到:
如何定义变量,它和c# 等语言有什么不同呢? 变量区分大小写吗? php的变量还有其他重要的吗?
常量和变量的定义一样吗?  分别讲述吧。
1.如何定义变量,它和c# 等语言有什么不同呢?
   php 中的变量用一个 美元符号后面跟变量名来表示。变量名是 区分大小写的。例如:
你可能还关心变量的命名,其实和大多数语言一样。
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.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 数组(依然有效,但反对使用)
变量的应用范围
 每个变量都有应用范围,那么php是怎么定义的呢?还是先看看下面代码吧:
 1  php
 2    $var = 0 ;
 3    function  test( $index )
 4   {
 5        $var = $var + 1 ;
 6        echo   the  . $index .  number is  . $var .
;
 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 .
;
 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 ] .
;
 8   }
 9   test( 1 );
10   test( 2 )
11  ?>
代码有什么特殊的吗?那就是用到了 $globals这个超全局变量。
php也有静态变量的说法。不过静态变量一般用在函数里,只能是局部变量了。看看下面代码吧:
 1  php
 2  function  test()
 3  {
 4      static   $a   =   0 ;
 5      echo   $a .
;
 6      $a ++ ;
 7  }
 8  test();
 9  test();
10  ?>  
结果为
1
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 
 6  define ( greeting ,   hello you. ,   true );
 7  echo  greeting;  //  outputs hello you.
 8  echo  greeting;  //  outputs hello you.
 9 
10  ?>
常量和变量不同:
常量前面没有美元符号($);
常量只能用 define() 函数定义,而不能通过赋值语句;
常量可以不用理会变量范围的规则而在任何地方定义和访问;
常量一旦定义就不能被重新定义或者取消定义;
常量的值只能是标量。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product