语法环境 变量 数据类型 转换 销毁和传值

第一章 语法环境

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中 变量分为以下几种类型

  1. 整形[interger] 数学中的整数
  2. 浮点型[float/double] 数学中的小数
  3. 布尔[boolean] 真假(不区分大小写)
  4. 字符串[string] 一串字符
  5. 数组[array] 键值对的复合数据 后边会学到
  6. 对象[object] 在后面的面向对象中会学到
  7. NULL 没有值 (不区分大小写)
  8. 资源 [resource] 类似"吸管" 我们后边会提到

变量有8种类型,我们不必死记硬背,需要在实际运用中加深理解

在计算机的世界里,所有的数据都由1或者0来进行表述。比如字母A,我们可以使用0100 0001 来进行表示。但是二进制的65同样也是 0100 0001 那么我们的变量是如何表示字符串A和数字65的呢?

我们在声明变量之后,系统在内存中帮我们建立了一张变量表,我们可以把它看做班级的花名册;

变量值和变量类型可以看做某位同学,花名册(变量表)上的变量名指向那位同学;

 

这样区分65和A就方便了许多

$a = "A";
$b = 65;

变量值并不仅仅存储着我们可以"见到"的实际值,还保存着变量的类型;
box.png

我们再看一下特殊的变量类型Null

$null = NULL;


Null是什么?

Null 类型只是标注了它的类型为Null,它的值的字段是空的,NULL是没有值的。

box2.png

在php中 不支持类似js中的只声明不赋值的操作 当我们声明一个变量的时候.必须赋值;否则在调用时会报notice级别的错误;

2.3 变量检测

2.3.1 检测变量是否存在

echo 一个不存在的变量,会报notice级别的错误。所以有时我们在使用变量之前需要检测一下这个变量是否存在;

我们会使用isset 检测变量是否设置。已声明的变量返回true,未声明的变量返回false

$b = null;
$c = false;
$d = 0;
$e = '';
// 分别检测上述变量是否存在
if(isset($a)){
    echo "变量存在";
}else {
    echo "变量不存在";
}

对于值为null的变量,也返回false,因为null没有值

未曾声明的变量,当然也不存在

2.3.2 类型检测

检测一个变量,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不是字符串';
}

2.3.3 调试打印变量

开发程序的时候,不可避免的要把变量的值打印出来看看

如何调试打印变量

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 赋值

我们在声明变量的同时一般会赋给变量一个值;而在之后也需要对这个变量进行操作;

赋值的方式有两种

  1. 传值赋值
  2. 引用赋值

2.5.1 传值赋值

$li = 23;
$wang = $li;
echo $li,"~",$wang;

以上代码在内存中发生了什么?

传值赋值指的是将一个变量的数据值(数据内容)拷贝一份,然后赋值给另一个变量;

chuanzhi.png

改变li的值,wang的值会改变吗?

$li = 23;
$wang = $li;
$li = 90;
echo $li,"~",$wang;

不会~!

2.5.2 引用赋值

引用赋值和传值赋值不同,传值赋值是将变量的值拷贝一份,赋给要赋值的变量,而引用赋值只是拷贝了“引用关系”!
yinyong.png

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

 

posted @ 2019-12-20 08:29  江湖艺人  阅读(68)  评论(0编辑  收藏  举报