只要是编程语言,都会有“变量”这种东西。什么是变量?简单点说是用于存储信息的容器。
PHP变量形式:变量必须以$开头,后面紧跟变量名,比如$var。(PHP独有的变量命名方式,其他编程语言变量命名也有$,但$只是变量名中的一个组成字符,不是必须强有的)
PHP变量命名规则:一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线(A-z、0-9 和 _ )。$var、$_var、$var123、$_var123是合法的变量,$123var就不是合法的变量,会报错。
注意:变量名不能出现空格、严格区分大小写。$a b就不是合法的变量名,一看它就不是一个完整的整体。$var与$Var是两个不同的变量。
关于变量名的长度应该没做限制,直接用一个字母,比如$a都可以的,把变量名写得很长很长也可以。
定义PHP变量:
PHP是一门弱类型语言,用起来非常方便快捷。直接给一个变量赋值,就是定义了这个变量。换句话说,第一次给一个变量赋值,就算定义变量。看下面示图:
编程语言中“=”是赋值的意思。
变量可以给变量赋值 $v1 = $v2;echo $v1;就会显示3。
变量原理:
当程序运行时,操作的数据会放在内存里。程序操作的什么数据,其实就是放在变量里的数据。当程序定义一个变量,等于是程序向计算机要了一块内存,这块内存的大小要大于变量里数据的大小。
我们都听说过C、JAVA这些编程语言都是强类型语言,PHP是弱类型语言,这到底是什么意思?C、JAVA在使用一个变量前,都必须先要定义变量的类型,比如说变量a是int类型,只能给a赋值数字,变量a指向的那块内存二进制数字表示的是数字。变量b是string类型,只能给b赋值字符串,变量b指向的那块内存二进制数字表示的是字符。如果给a赋值字符串,那就会报错。PHP不是这样,不用给变量定义类型,就像上面的$v1变量,楠神不仅可以给它赋值数字,也可以给它赋值字符串。好比变量是一个大箱子,C、JAVA的“箱子”装东西前需要订做,不合适装不了东西。PHP的“箱子”拿来即可用,什么东西都可以装,“箱子”会自适应所装的东西,更灵活。
所以C、JAVA语言是严谨的语言,程序员要帮C、JAVA做好多事情,程序员要告诉程序变量类型,不让程序自己做判断。在C语言里,字符串的赋值不会像PHP这样一个“=”就OK了,需要程序员写好几步。步骤多,会影响程序员的开发效率。PHP更智能,好多工作不需程序员自己做了,简化了步骤,提高了开发效率,但PHP自己要多干活,效率上就不如C、JAVA。还有C、JAVA是编译型编程语言,程序写出来,编译成二进制一次就可以。PHP是解释性编程语言,程序每次运行时都要编译一次,这就是PHP为什么效率上不如C、JAVA。
变量的两种赋值类型:传值赋值和引用赋值
代码如下:
看效果:
分析:
$v1传值赋值给$v2,所以$v2的值是123,后面又重新给$v1传值赋值321。
$v3引用赋值给$v4,所以$v3的值是什么$v4的值就是什么,后面又重新给$v3传值赋值789,那$v4也是789。
手册里的解释:变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。
传值赋值很好理解,如果赋值对象是一个变量,就把这个变量的值拷贝一份给被赋值变量,然后这两个变量就没有任何关系了。
引用赋值的理解需要借助上一章节楠神讲内存的一些的知识。内存是有内存地址的,变量指的就是一块内存,这块内存可能远大于一个字节,那它也有一个十六进制的数字表示这个变量的内存地址。引用赋值其实就是把赋值变量的内存地址赋值给了被赋值变量,如上面示例$v3的内存地址赋值给了$v4,那$v3和$v4就是一个整体了,随便改动$v3或$v4,它两同时改变。
使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。
在PHP开发中,传值赋值用得远比引用赋值多,但引用赋值在PHP中依然非常重要,需要大家多注意。
关于PHP echo语句里的点、单引号、双引号
上一节我们学习了echo语言结构可以向浏览器输出文本内容,楠神再详细地解说下echo的用法:
echo后面是变量的话,可以把变量的值直接输入到浏览器。
用英文“.”可以把两个字符串或两个变量连在一块,“.”是PHP中唯一一个字符串运算符,也叫并置运算符。
echo后面是英文单引号,引号里的所有内容都当做字符串输出。
echo后面是英文双引号,引号里有变量它会把变量里的值输出来,注意变量后面最好是空格或者把变量用大括号抱起来。
看示例:
浏览器效果: