本章说说变量的定义。

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

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

变量区分大小写吗?

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

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

分别讲述吧。

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

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

;$VAR='

Kimi;

echo "$var,$VAR";//输出“Jim,Kimi"

?>

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

2. 变量区分大小写吗?

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

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

1

php2 $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

php2 $var=0

;3 functiontest($index

)4

{5 $var=$var+1

;6 echo"The".$index."number is".$var."
"

;7

}8 test(1

);9 test(2

)10 ?>

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

如果你认为是下面:

结果1:

The1numberis1

The

2numberis2

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

其实正确的结果应该是:

结果2

The1numberis1

The

2numberis1

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

1

php2 $var=0

;3 functiontest($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

php2 $var=0

;3 functiontest($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

php2 function

Test()3

{4 static$a=0

;5 echo$a."
"

;6 $a++

;7

}8

Test();9

Test();10 ?>

结果为

1

2

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

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

看看下面的例子:

1

php2 $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

php2 define("CONSTANT","Hello world."

);3 echoCONSTANT;//outputs "Hello world."

4 echoConstant;//outputs "Constant" and issues a notice.

5

6 define("GREETING","Hello you.",true

);7 echoGREETING;//outputs "Hello you."

8 echoGreeting;//outputs "Hello you."

9

10 ?>

常量和变量不同:

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

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

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

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

常量的值只能是标量。

php如何定义变量,它和c# 等语言有什么不同呢?,PHP 变量和常量的定义相关推荐

  1. C语言中临时变量写在哪里,C语言中不允许创建临时变量,交换两个数的内容

    在C语言中可以通过建立临时变量来实现两个变量的交换,当不允许建立临时变量时,应该怎样实现两变量的交换呢? 假设有两个变量num1和num2:下面通过两种方法进行分析. 方法一:利用加减法.具体算法分析 ...

  2. 谁的饭量大 c语言编程,c语言第一章第一节 认识变量(示例代码)

    声明:本人大一新生,闲着无聊..写写c语言教程..菜鸟一枚..大神勿喷!!! 接下来我们都用dev来进行编译..vc++太古老了,没提示功能,不好上手,并且老是出毛病..vs太大了,编个c不至于,运行 ...

  3. c语言中结构体数组的引用,【C语言入门教程】7.2 结构体数组的定义和引用

    7.2 结构体数组的定义和引用 当需要使用大量的结构体变量时,可使用结构体定义数组,该数组包含与结构体相同的数据结构所组成的连续存储空间.如下例所示: struct student stu_a[50] ...

  4. c语言程序中变量先引用声明,C语言如何跨文件调用函数定义中声明的变量

    变量的作用域 我们知道,变量根据其作用域有全局变量和局部变量之分.全局变量作用域是整个文件,并且可以使用关键字 extern 达到跨文件调用的目的.但是局部变量值作用于它当前所在的块(即该变量所处最内 ...

  5. python 定义变量_第三章(第2节):变量和常量

    变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型,比如我们上节课刚刚学过的基本数据类型或者我们后面要学的自定义数据类型. 所谓常量就是不能改变 ...

  6. php语言指针的初始化定义,指针变量的初始化,C语言指针变量初始化详解

    本节来解决如何给一个指针变量初始化.即怎样使一个指针变量指向另一个变量. 前面章节中的某些程序实际上已经使用了,即可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向该变量.比如: int ...

  7. c语言定义64位的变量,李洪强-C语言9-C语言的数据,变量和常量

    一.数据 图片文字等都是数据,在计算机中以0和1存储. (一)分类 数据分为静态数据和动态数据. ①. 静态数据:一些永久性的的数据,一般存储在硬盘中,只要硬盘没坏数据都是存在的.一般以文件的形式存储 ...

  8. 共用体变量不能在定义时初始化_【C语言资料更新】共用体联合体

    文/Edward 共用体又称为联合体,它是C语言中的一种特殊的数据类型.它允许用户在相同的内存位置存储不同的数据类型.用户可以定义一个带有多成员的共用体,但是任何时候这些成员都共享同一块内存.举个例子 ...

  9. 定义一个抽象的Role类 有姓名 年龄 性别等成员变量 .......

    /** 6:定义一个抽象的"Role"类 有姓名 年龄 性别等成员变量      1. 要求尽可能隐藏所有变量(能够私有就私有,能够保护就不要公有)      再通过GetXXX( ...

  10. matlab中sym看不到值和属性,matlab 用sym定义了x,但是输入函数却显示“未定义函数或变量 'x'”?...

    答:亲,是syms x,或者是sym('x')来定义x是符号变量 答:matlab2018a中出现未定义函数或"ploy2sym",怎么改要分情况 情况一:符号变量 必须要定义,定 ...

最新文章

  1. 一键解锁解题秘籍,从向作者提问开始
  2. 是财富自由的声音,蚂蚁上市前,取消了周报
  3. explian执行计划
  4. POJ - 3261 Milk Patterns(二分+后缀数组)
  5. windows命令行无法启动redis_windows系统安装redis
  6. 每天一个小算法(Shell Sort1)
  7. 前端开发 元素的浮动 文字环饶效果 横向排列效果 0229
  8. matlab gui怎样将结果保存_Processing将串行数据保存用作matlab数据分析
  9. windows android ios,TIM for Windows/iOS/Android v2.2.6 正式版发布
  10. KVM基础安装,手动创建桥
  11. fping安装包linux,Linux安装fping和hping
  12. 关于web.xml配置中的url-pattern
  13. Android 压缩解压zip文件
  14. java ajax教程_JAVA AJAX教程第三章—AJAX详细讲解
  15. html调色板快捷键,12款web前端最佳调色板工具
  16. Retrofit原理
  17. 【渝粤教育】电大中专新媒体营销实务 (8)作业 题库
  18. 【代码重构】临时字段(Temporary Field)-- 如何消除和处理代码中临时字段
  19. SQL反模式:实体-属性-值(EAV)问题(一)
  20. 解决Flex项目下bin-debug文件在其他电脑打开不显示的问题

热门文章

  1. iOS 内购详解及遇到的坑
  2. Ubantu 安装SSH
  3. Java多线程 ReentrantLock、Condition 实现生产者、消费者协作模式
  4. linux运维、架构之路-Kubernetes集群部署TLS双向认证
  5. host不能访问虚拟机内web service中踩到的坑--2017年5月3日
  6. GrideView(三)---编辑功能实现
  7. 重装win 修复ubuntu引导
  8. 本地图片预览代码(支持 IE6、IE7)
  9. sql 基本操作语句笔记
  10. 当知识图谱遇上预训练语言模型 -- 留言送书