语法环境 变量 数据类型 转换 销毁和传值
第一章 语法环境
1.1 后缀
php语言是书写在.php
文件中的。php的书写很简单
<?php
echo "hello";
?>
默认情况下 结束符可以省略;
php文件支持php与html混写。浏览器在读取php文件时,如果遇到html代码会直接渲染,此时必须补全结束符
<?php
echo "hello";
?>
<h1>
World
</h1>
1.2注释
php的注释方式和js类似 单行注释使用//
,多行注释为/** **/
;
第二章 基本语法形式
2.1 变量
在php中,我们需要方便的寻找或者使用某个数据,需要给该数据取一个名字。这个"名字"在编程语言中的概念就是变量;
和js不同,php中的变量是$
符号 加上一个名称组成的;
$a = '123';
echo $a;
变量名称的命名规范:
变量名以`$`开头,后面可以书写[a-z A-Z 0-9]和下划线
变量名称是区分大小写的
变量不能以数字开头
$a = 123;
$_ = 456;
$_% = "hello";
$3c = "world";
$c3 = "nihao";
2.2 变量类型
既然我们理解了变量的概念,那么变量也是分为种类的,一个数字和一句话在我们计算机上是分别理解的
在php中 变量分为以下几种类型
- 整形[interger] 数学中的整数
- 浮点型[float/double] 数学中的小数
- 布尔[boolean] 真假(不区分大小写)
- 字符串[string] 一串字符
- 数组[array] 键值对的复合数据 后边会学到
- 对象[object] 在后面的面向对象中会学到
- NULL 没有值 (不区分大小写)
- 资源 [resource] 类似"吸管" 我们后边会提到
变量有8种类型,我们不必死记硬背,需要在实际运用中加深理解
在计算机的世界里,所有的数据都由1或者0来进行表述。比如字母A,我们可以使用0100 0001 来进行表示。但是二进制的65同样也是 0100 0001 那么我们的变量是如何表示字符串A和数字65的呢?
我们在声明变量之后,系统在内存中帮我们建立了一张变量表,我们可以把它看做班级的花名册;
变量值和变量类型可以看做某位同学,花名册(变量表)上的变量名指向那位同学;
这样区分65和A就方便了许多
$a = "A";
$b = 65;
变量值并不仅仅存储着我们可以"见到"的实际值,还保存着变量的类型;
我们再看一下特殊的变量类型Null
$null = NULL;
Null是什么?
Null 类型只是标注了它的类型为Null,它的值的字段是空的,NULL是没有值的。
在php中 不支持类似js中的只声明不赋值的操作 当我们声明一个变量的时候.必须赋值;否则在调用时会报notice级别的错误;
2.3 变量检测
echo 一个不存在的变量,会报notice级别的错误。所以有时我们在使用变量之前需要检测一下这个变量是否存在;
我们会使用isset 检测变量是否设置。已声明的变量返回true,未声明的变量返回false
$b = null;
$c = false;
$d = 0;
$e = '';
// 分别检测上述变量是否存在
if(isset($a)){
echo "变量存在";
}else {
echo "变量不存在";
}
对于值为null的变量,也返回false,因为null没有值
未曾声明的变量,当然也不存在
检测一个变量,php是把它存储成为一个什么样的类型,对于php而言,获取变量类型是非常简单的,
gettype —获取变量的类型
$a = false;
echo gettype($a);
$b = "1";
echo gettype($b);
$c = 1.11;
echo gettype($c);
$d = 'hello';
echo gettype($d);
$e = null;
echo gettype($e);
判断是否是某类型
is_float()[is_double] 检测变量是否为浮点型
is_int()[is_integer] 检测变量是否为整型
is_string() 检测变量是否为字符串
is_object() 检测变量是否为对象
is_array() 检测变量是否为数组
is_resource 检测变量是否为资源类型
is_bool 检测变量是否是布尔型
is_null 检测变量是否为 NULL
$a = 'hello';
if(is_string($a)) {
echo 'a是字符串';
} else {
echo 'a不是字符串';
}
开发程序的时候,不可避免的要把变量的值打印出来看看
如何调试打印变量
echo 打印字符串 数字
print_r 打印层次化的数据 比如:数组 对象。当然也可以打印字符串和数字
var_dump 打印变量的类型及其值[调试代码比较方便]
$a = 'hello';
$b = array(1,2,"3");
$c = false;
$d = null;
$e = 18;
$f = true;
//布尔型的true会打印出1,false和null什么都不显示
echo $a,$b,$c,$d,$e,$f,'<hr>';
//print_r 打印层次化的数据,比如数组和对象
print_r($b);print_r($c);
print_r($d);
print_r($f);
//不要用echo和print_r打印布尔型的值,因为会干扰我们
//用var_dump打印布尔和null
var_dump($c);
var_dump($d);
2.4 变量类型转换
在php中,变量的类型是可以随时转换的,非常的灵活。
在我们上一小节中,打印变量true/false的时候就出现了奇怪的现象;
最常见变量类型转换就是字符串和数字之间的转换,或者是数字/字符串和布尔值之间的转换
字符串到数字的转换
从左到右截取,直到遇到不合法的数字,截取下来的部分转换成为数字
$a = '12';
$b = $a + 3;
var_dump($b);
$a = "12.5hello99";
$b = $a + 3;
var_dump($b);
$a = "word12.5hello";
$b = $a + 3;
var_dump($b);
数字到字符串的转换
在php中,字符串的拼接使用的是.
,如果一个数字和字符串做了拼接,那么数值会转换为字符串;
$a = 123;
$b = $a . 'hello';
var_dump($b);
数字/字符串等到布尔值的转换
$b = 3;
if($b){
echo "b is true";
}else{
echo "b is false";
}
和js类似 在php中 if条件语句的条件也是true/false,变量在做条件判断的时候会经过类型转换;
以下值 都被理解成为布尔类型的假
空字符串 ''
字符串0 0
数值00
布尔值false false
NULL null
空数组 array()
这些值不仅仅被认为成假,也会被认为成空
$a = '';
var_dump(empty($a));
empty()这个函数可以帮助我们判断一个值是否为空,如果该值为空,则返回true;
没有任何属性的对象也被认为成空 当我们学习了对象之后 空对象在empty检测下也为true
2.5 赋值
我们在声明变量的同时一般会赋给变量一个值;而在之后也需要对这个变量进行操作;
赋值的方式有两种
- 传值赋值
- 引用赋值
$li = 23;
$wang = $li;
echo $li,"~",$wang;
以上代码在内存中发生了什么?
传值赋值指的是将一个变量的数据值(数据内容)拷贝一份,然后赋值给另一个变量;
改变li的值,wang的值会改变吗?
$li = 23;
$wang = $li;
$li = 90;
echo $li,"~",$wang;
不会~!
引用赋值和传值赋值不同,传值赋值是将变量的值拷贝一份,赋给要赋值的变量,而引用赋值只是拷贝了“引用关系”!
$li = 23;
$wang = &$li;
echo $li,$wang;
加&
赋值采用的即为引用赋值
改变li 的值,wang的值会不会发生改变? 会!
$li = 23;
$wang = &$li;
echo $li,$wang;
因为wang只是复制了li的引用,并没有真正的把值拿到自己的花名册中,当li发生改变时,wang会随着$li的改变而改变;
2.6 销毁
为什么要销毁变量?因为,有时比较大的变量比较耗费资源。比如说我们后边所学的数组和对象,尤其是后边的GD库。此时我们需要销毁掉变量,释放出内存;
unset(变量名):销毁指定的变量
首先从变量名(花名册)中删除变量名,再找到它对应的值(人员信息)也删除掉;
$a = 99;
unset($a);
if(isset($a)){
echo 'a 存在';
}else{
echo 'a 不存在';
}
注意:引用赋值,如果两个变量指向同一个值,当销毁其中一个变量的时候,值是不能被销毁的。
$a = 99;
$b = &$a;
unset($a);
echo $b;
重新给$a赋值
$a = 99;
$b = &$a;
unset($a);
$a = 19;
echo $b;
此a非彼a,由于一开始的a已经被释放,新的a是重新声明并赋值的;
2.7 动态变量名
动态变量名,可以体现php非常灵活的一个地方;
动态变量名是用变量的值去做另外一个变量的名
$laoda = 'liubei';
echo $laoda , '<br>';
$paihang = 'laoda';
echo $paihang , '~' , $$paihang;
//排行
$rank = 'paihang';
echo $$$rank;