一、文件包含

  1. 文件包含:在php脚本中,将另外一个脚本的内容引入进来,分工协作完成一个任务

    • 向上包含(索要):使用被包含文件的代码,实现代码共享
    • 向下包含(给予):自己的代码可被使用
  2. 文件包含的4种方式:

    • include:包含并执行文件,失败时产生警告(E_WARNING),脚本继续执行
    • include_once:与include相同,确保只包含过一次
    • require:包含并执行文件,失败时触发致命错误(E_COMPILE_ERROR),脚本立即终止
    • require_once:与require相同,确保只包含过一次

二、文件包含原理

  1. php代码执行流程

    • 读取代码文件(php程序)
    • 编译:将php代码转换成字节码(生成opcode)
    • zendengine解析opcode,按照字节码去进行逻辑运算
    • 转换成对应的html代码
  2. 文件加载原理:

    • php遇到includerequire代码时,会自动执行加载
    • 相当于将被包含文件中的代码嵌入到加载代码所在的位置
    • 被包含的文件是单独编译的
    php文件在编译的过程中如果出现了语法错误,会失败并停止执行;如果是被包含文件有错误,包含关键字是include时才会报错

三、include与require区别

  1. include/require和include_once/require_once的区别

    • include/require遇到一次执行一次,include_once/require_once只执行一次
  2. include和require的区别

    • 被包含文件报错,include产生警告(E_WARNING),脚本继续执行;require触发致命错误(E_COMPILE_ERROR),脚本立即终止

四、文件加载路径

  1. 分类

    • 绝对路径:

      • 从磁盘根目录开始(本地绝对路径):

        • windows:盘符:/路径/php文件
        • linux:/路径/php文件
      • 从网站根目录开始(网站绝对路径)
        相对于主机名字的路径:localhost/index.php => E:/server/apache/htdocs/index.php
    • 相对路径:

      • .:当前文件夹
      • ..:上级目录
  2. 区别

    • 绝对路径效率偏低,但相对安全
    • 相对路径效率偏高,但容易出错

五、文件嵌套包含

  1. 含义:一个文件包含另外一个文件,同时被包含的文件又包含了其他文件
  2. 容易出现相对路径出错的问题:相对路径(...)会发生变化

六、函数

  1. 函数:将实现某一功能的代码块(多行代码)封装到一个结构中,重复利用(复用)
  2. 关键点:function关键字,函数名,参数(形参,实参),函数体,返回值
  3. 语法:

    function 函数名([参数]){
     // 函数体
     // 返回值:return 结果;
    }
  4. 目的:代码复用,一个功能一个函数
  5. 调用:函数名([参数]),函数遇到调用时才会执行,编译时不会执行
  6. 执行分析(先编译后执行):

    • 读取代码进入到代码段(编译:将代码编程二进制存储到内存)
    • 根据代码逐行执行
  7. 命名规范:由字母、数字和下划线组成,但不能以数字开头
  8. 通用规则:

    • 驼峰法:getResoult
    • 下划线法:get_resoult
  9. 在一个脚本周期中,不允许出现同名函数

七、函数形参实参

  1. 参数分类

    • 形参:形式参数,不具有实际意义,仅在函数定义的时候使用
    • 实参:实际参数,具有实际意义,在函数调用时使用,必须是有值的表达式
    形参是实参的载体,实参给形参赋值,然后参与到函数运算中
  2. 注意:

    • php中允许实参多于形参,多余的函数不会使用
    • php中形参个数没有限制,开发中一般不会太多
    • 形参允许有默认值,有默认值的形参排在后面
    • 实参个数不能少于无默认值的形参个数

八、函数形参的默认值

  1. 默认值:default value,函数定义的时候,给形参的初始赋值,如果实际调用的时候没有提供,就会用默认值进行计算
  2. 注意:

    • 有默认值的参数,可以不传入
    • 有默认值的参数可以有多个,必须放在最右边
    • 形参和外部变量无关,名称冲突(同名)不影响程序运行

九、引用传值

  1. 传值方式:

    • 值传递:形参和实参独立,形参改变不影响实参
    • 引用传递:形参和实参是同一个值,形参改变,实参跟着改变 => 实现在函数内部修改外部参数的功能
  2. 语法:&参数
  3. 注意:引用传值,函数调用的时候必须传入变量,不能是值和表达式

十、函数体

  1. 函数体:函数内部(花括号中间)的所有代码
  2. 返回值:将函数计算的结果通过return关键字返回给函数调用处,当作值直接使用
  3. 注意:

    • 函数返回值可以是任意数据类型
    • return关键字直接结束函数
    • return关键字在文件中代表终止后面的代码执行,返回值在文件包含的位置可以接收使用

十一、作用域(上)

  1. 作用域:变量/常量能够被范围的区域
  2. 分类:

    • 全局变量:普通定义的变量(函数外部定义),函数内部不可访问,周期:脚本执行完毕,$GLOBALS
    • 局部变量:函数内部定义,当前函数内部使用,周期:函数执行结束
    • 超全局变量:系统定义的变量(预定义变量:$_SERVER,$_POST等),没有访问限制,周期:脚本执行完毕
  3. 注意:

    • 超全局变量会自动将全局变量纳入$GLOBALS

十二、作用域(下)

  1. 函数内部使用外部数据:

    • 通过$GLOBALS变量
    • 参数(值传递,引用传递)
    • 使用global关键字
  2. 局部和全局变量互通:

    • global关键字定义变量:

      • 变量在外部存在,直接指向外部变量
      • 变量在外部不存在,新增一个全局变量
    global关键字的本质是:同一个变量名使用同一块内存区域存储数据

十三、静态变量

  1. 静态变量:static关键字定义的变量,实现跨函数(同一个函数被多次调用)共享数据
  2. 语法:

    function 函数名([参数]){
     static 变量名 = 值; //通常定义的时候就直接赋值
    }
  3. 原理:编译的时候会对static这一行进行初始化(为静态变量赋值),函数调用的时候会自动跳过static这一行
  4. 应用:

    • 统计函数的调用次数
    • 使函数多次调用得到不同的结果(递归思想)

十四、可变函数

  1. 可变函数:变量保存的值是一个函数的名称,可以使用变量名()的方式调用函数

十五、匿名函数

  1. 匿名函数:没有名字的函数
  2. 语法:

    变量名 = function(){
     函数体;
    }
  3. 调用:变量名()
  4. 闭包:函数内部有局部变量,在函数执行后没有释放,因为函数内部含有对应的函数(匿名函数)在引用

    function display(){
     $num = 1;
     $func = function() use($num){
         return $num;
         $num++; // 没有生效
     };
     return $func;
    }
    $func2 = display();
    echo $func2();
    echo $func2();
    echo $func2();

十六、伪类型

  1. 伪类型:php不存在的类型,方便程序员查看操作手册
  2. 分类:

    • Mixed:混合,多种数据类型
    • Number:任意数值类型(整形和浮点型)

标签: none

评论已关闭