zoukankan      html  css  js  c++  java
  • 语法环境 变量 数据类型 转换 销毁和传值

    第一章 语法环境

    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;
  • 相关阅读:
    centos7.6 使用yum安装mysql5.7
    解决hadoop本地库问题
    docker-compose 启动警告
    docker 安装zabbix5.0 界面乱码问题解决
    docker 部署zabbix问题
    zookeeper 超时问题
    hbase regionserver异常宕机
    (转载)hadoop 滚动升级
    hadoop Requested data length 86483783 is longer than maximum configured RPC length
    zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  • 原文地址:https://www.cnblogs.com/wjlbk/p/12633441.html
Copyright © 2011-2022 走看看