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


    第一章 语法环境

    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;
  • 相关阅读:
    程序员优化程序流程
    iOS开发优化的25个方案
    彻底解决_OBJC_CLASS_$_某文件名", referenced from:问题转
    svn服务器搭建与配置
    mac 显示隐藏文件夹
    HDU 2276 Kiki & Little Kiki 2 矩阵构造
    HDU 3306 Another kind of Fibonacci ---构造矩阵***
    HDU 1575 Tr A----矩阵相乘题。
    矩阵的模板----
    HDU 1757 矩阵求第n的递推式
  • 原文地址:https://www.cnblogs.com/wjlbk/p/11783859.html
Copyright © 2020-2023  润新知