什么是变量

变量指的就是在程序执行过程中数值可以变化的量,它与我们所讲的常量是相反的,我们常量是只要被定义了,在程序中就不能被改变。而变量是可以变的。

变量作用

变量就是用来保存我们值,相当于一个存储数据的容器。

x = 5;

y = 6;

z = x + y;

从上面的表达式 z = x + y;我们能够计算出 z 的值是 11

在 PHP 中,这三个字母就被称为变量。

变量赋值

变量赋值,是指给一个变量具体的数据值,对于字符串和数字类型的变量,可以通过“=”来实现赋值,像上面一样例子一样,x和y是变量,那么5和6就是变量的值了。

声明变量

通过美元符号 $变量名称 来表示变量

$x = 5;

$y = 6;

$z = $x + $y

上面的实例就完成了我们对变量的定义与赋值了。

PHP 变量规则

变量以 $ 符号开始,后面跟着变量的名称

变量名必须以字母或者下划线字符开始

变量名只能包含字母数字字符以及下划线

变量名不能包含空格

$A驼峰标记法(firstName)或者下划线法命名(first_name)

变量名称严格区分大小写,$y和$Y是两个变量,如果变量名称重复,后面的值会覆盖前面的值

变量可以不声明,直接使用

除了上面的变量直接赋值外,还有两种方式可以声明变量和赋值,一种是变量间的赋值,什么意思呢?看下面的实例

$str1 = 'hello';

$str2 = $str1;

$str1 = 'world';

echo $str2;

输出 “hello”

我们并没有给变量$str2直接赋值,而是将变量$str1赋值给$str2,这就是我们变量间的赋值。

另一种是引用赋值。从PHP4开始,PHP引入了“引用赋值”的概念,就是用不同的名字访问同一个变量内容。当改变其中任何一个变量的值,另一个也会发生变化。引用赋值使用“&”来表示引用。

引用和赋值的区别在于,赋值是将原变量内容复制下来,再用一个新的内存空间来保存,而引用则是给变量的内容在起一个名字,相当于一个别名。就好像一些文学爱好者经常会向报纸,杂志投稿件,但一般都不会真名,而是用笔名,这个笔名就可以看作是一个引用。

//php引用变量:不同变量名指向同一地址

//定义一个变量a,此时内存开辟了一块区域,$a指向该区域

$a = 100;

var_dump($a); //int 100

//定义变量b,将a变量的值赋值给b,此时该区域有两个变量($a和$b)指向。

$b = $a;

var_dump($b); //int 100

//修改$a变量的值,php变量具有Copy On Write的特性,所以会复制并重写a所指向的区域值,此时a和b分别指向不同区域。

$a = 10;

var_dump($a); //int 10

var_dump($b); //int 100

$c = 100;

$d = &$c;

$c = 10;

var_dump($c); //int 10

var_dump($d); //int 10

//当引用指向时,php变量不在具有Copy On Write特性,且指向同一内存区域,无论$c或$d谁变化,另外一个都会变化

可变变量(使用两个美元符号($))

$a = "hello";

$$a = "world";

两个变量都被定义了:$a 的内容是“hello”,并且 $hello 的内容是“world”。因此,可以表述为:

echo “$a ${$a}”;或者 echo “$a $hello”;它们都会输出:hello world

变量作用域

变量在使用时要符合变量的定义规则。变量必须在有效的范围使用,如果变量超出了有限范围,变量也就没有意义了,就好像我们有一沓人民币,我们可以在中国购买商品,但如果来到国外,那么这一沓人民币也就不能用了。这一沓人民币就相当于这个变量,而中国以内的范围就相当于作用域。

PHP的变量由于作用域不同分为:局部变量,全局变量和静态变量,如下表:

局部变量

在函数的内部定义的变量,作用域就是所在的函数范围

全局变量

在被定义所有的函数以外的变量,作用域是整个PHP文件,但是在用户自定义函数内部是不能使用的。如果希望用户在用户自定义函数内部使用全局变量,则使用global关键字声明全局变量

静态变量

能够在函数调用结束后仍保留变量值,当再次回到其作用域,又可以继续使用原来的值。而一般变量是在函数调用后,其存储的数据值会被清除,所占用的内存空间也会被释放。使用静态变量时,先要用关键字static来声明变量,把关键字static放在要定义的变量之前

TIPS

在函数内部定义的变量,其作用域为所在的函数,如果在函数外赋值,将被认为是完全不同的另一个变量。在退出声明变量的函数时,该变量及相应的值就会被清除。

本实例用于比较在函数内赋值的变量(局部变量)和在函数外赋值的变量(全局变量),实例代码如下:

$exam= "在函数外定义"; //声明全局变量

function add(){

$exam="在函数内定义"; //声明局部变量

echo "在函数内输出的内容是:".$exam."
"; //输出局部变量

}

add(); //调用函数

echo "在函数外输出的内容是:".$exam; //输出全局变量

?>

运行结果:

在函数内输出的内容是:在函数内定义

在函数外输出的内容是:在函数外定义

静态变量在很多地方都能用到,静态变量类型说明符是static。

static全局变量只初始化一次,防止在其他文件单元中被引用

static局部变量只被初始化一次,下一次依据上一次结果值

static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

下面的实例使用静态变量和普通变量同事输出一个数据,查看一下两者的功能有什么不同,代码如下:

function zdy0(){

static $message = 0; //初始化静态变量

$message+=1;

echo $message." ";

}

function zdy1(){

$message = 0; //初始化静态变量

$message+=1;

echo $message." ";

}

for ($i=0;$i<10;$i++){

zdy0(); //输出1~10

}

echo "
";

for ($i=0;$i<10;$i++){

zdy1(); //输出10个1

}

php变量教学,PHP变量详解相关推荐

  1. python中的class怎么用_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  2. python中class变量_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  3. Java中的宏变量,宏替换详解。

    转载自 Java中的宏变量,宏替换详解. 群友在微信群讨论的一个话题,有点意思,特拿出来分享一下. 输出true false 来看下面这段程序,和群友分享的大致一样. public static vo ...

  4. python定义静态变量_对Pyhon实现静态变量全局变量的方法详解

    python不能像C++一样直接定义一个static变量或者通过extern来导入别的库的变量而实现数据共享,但是python的思想是通过模块化来解决这个问题,就是通过模块来实现全局变量. 首先新建一 ...

  5. R语言 | xlsx包的安装(附链接:java环境变量的配置与详解)

    在下载xlsx包之前,要先下载java并且完成环境变量的设置 详细的教程见:(7条消息) java环境变量 的配置与详解(全网最详细教程)_S-D-C-L-Yourn的博客-CSDN博客_java环境 ...

  6. java 变量与常量_详解Java变量与常量

    一.常量 用final修饰(也称最终变量) 常量在声明时必须赋初值,赋值后不能再修改值 常量名通常用全大写字母表示 声明时需要添加final或static final类型修饰符,例如: private ...

  7. 条件变量pthread_cond_wait()和pthread_cond_signal()详解

    条件变量          条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起:另一个线程使"条件成立&qu ...

  8. linux sed p变量,Linux sed 命令详解系列教程之各种问题解决

    本文目录: 1 sed中使用变量和变量替换的问题 2 反向引用失效问题 3 "-i"选项的文件保存问题 4 贪婪匹配问题 5 sed命令"a"和"N& ...

  9. python变量定义大全_详解python变量与数据类型

    这篇文章我们学习 Python 变量与数据类型 变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问.在 Python 中 变量命名规定,必须是大小写英文,数字 ...

最新文章

  1. gpu超算算法_俄罗斯科学家:使用GPU将个人电脑转变为超级电脑
  2. 万字长文带你一览ICLR2020最新Transformers进展(下)
  3. jQuery easyUI--layout布局页面
  4. python3 内置函数详解
  5. php unable to save,php – Laravel save()未定义
  6. WebView 在 APP 中的使用
  7. Memcached----2-3
  8. 3个简单步骤即可测试Java 8
  9. ArcEngine 9.3.1与64位操作系统 80040154
  10. 【CSS】学习笔记1 使用CSS样式表
  11. cnn可视化 感受野(receptive field)可视化
  12. 对于vue的评价:没事情做可以学
  13. $().index() 两种用法
  14. 彻底搞懂 python 中文乱码问题_彻底搞懂 python 中文乱码问题(深入分析)
  15. WEB开发技术 知识点总结
  16. java数组和集合的区别_java中数组和集合的区别是什么?
  17. No provider available from registry
  18. 音乐相册android studio,手机音乐相册制作软件哪个好用?2018音乐相册制作软件推荐...
  19. 2020双十一,阿里云GRTN拉开直播和RTC技术下半场的序幕
  20. Java类的初始化和清理

热门文章

  1. linux下的idea的界面问题,错位以及各种...
  2. 二、python框架相关知识体系
  3. Windows中使用wget整站下载
  4. PC_excel完毕一列英文小写变大写
  5. python 3 关于requests库的 text / content /json
  6. 10天学安卓-第二天
  7. 分享一个基于jQuery,backbone.js和underscore.js的消息提示框架 - Backbone.Notifier
  8. 7-1 公路村村通 (30 分)
  9. php点链接直接现在文件吗,PHP实现点击a标签的href做链接时,直接保存文件(任何类型),而...
  10. c语言注释参与程序设计的编译,提高C语言程序设计教学的有益探索