博客列表 >PHP - 文件加载、类与对象基础

PHP - 文件加载、类与对象基础

晴天
晴天原创
2020年04月28日 16:35:30696浏览

1. 文件加载

  • 文件加载: 可简单的理解为将外部文件内容复制到当前文档中
  • 根据被加载文件的特征和重要性,可分为: “条件加载” 和 “强制加载” 二种方式

1.1 条件加载

加载外部文件,如果失败报警告级(Warning)错误,不会中断程序

序号 语法 描述
1 include 条件加载
2 include_once 去重(chong)条件加载
  • include 条件加载
  1. ## include 文件加载
  2. // 单引号加载
  3. include 'header.html';
  4. // 双引号加载
  5. include "header.html";
  6. // 变量加载
  7. $file = 'header.html';
  8. include $file;
  9. // 拼接加载
  10. $name = 'header';
  11. include $name.'.html';
  12. // 双变量拼接加载
  13. $name = 'header';
  14. $type = '.html';
  15. include $name.$type;
  16. // 条件加载 检测文件是否存在且是一个文件而不是目录,若不存在加载默认文件
  17. $file = 'header111.html'; //没有此文件
  18. (file_exists($file) && is_file($file)) ? include $file : include '404.html';

  • include_once 去重加载
  1. ## include_once 去重加载 检测是否已经加载过此文件,若已经加载过则不加载,若未加载则只加载一次,无论输入多少次
  2. // 单引号加载
  3. include_once 'header.html';
  4. // 双引号加载
  5. include_once "header.html";
  6. // 变量加载
  7. $file = 'header.html';
  8. include_once $file;
  9. // 拼接加载
  10. $name = 'header';
  11. include_once $name.'.html';
  12. // 双变量拼接加载
  13. $name = 'header';
  14. $type = '.html';
  15. include_once $name.$type;

" class="reference-link">

1.2 强制加载

加载外部文件,如果失败报致命级(Fatal error)错误,并中断程序

序号 语法 描述
1 require 强制加载
2 require_once 去重强制加载
  • 强制加载跟条件加载使用方法一样,
    唯独不同的地方是若文件不存在”条件加载”依然向下执行,而”强制加载”则会终止程序
  1. ## 条件加载 指向一个没有的文件
  2. include 'template.php';
  3. echo '<hr>虽然上面文件加载失败,但你依然可以看到我,说明程序继续向下执行<hr>';
  4. ## 强制加载
  5. require 'header.html';
  6. echo '<br><hr>强制加载成功,你可以看到我<hr>';
  7. require 'template.php';
  8. echo '<br><hr>强制加载失败,你看不到我<hr>';

1.3 函数作用域的支持

  1. // 外部加载,内部访问
  2. include 'function.php';
  3. function func(){
  4. global $email;
  5. echo $email;
  6. };
  7. func();
  8. // 输出 admin@php.cn
  9. // 内部加载内部访问
  10. function test(){
  11. include 'function.php';
  12. echo $email;
  13. };
  14. test();
  15. // 输出 admin@php.cn

2. 类与对象

2.1 概念

序号 名称 描述 关键字
1 class 对象的模板 class
2 对象instance 类的实例 new
  • 类与对象界限并不清晰,在不影响理解前提下,常用类代表实例来引用类成员
  • 对象与类的某一个实例绑定, 所以对象与实例可视为同义词,互换并不影响
  1. # 对象也是实现代码复用的手段
  2. # 要使用对象,就必须创建一个类,根据这个类,不断创建多个对象出来,实现代码复用
  3. #类的声明与实例化
  4. // 声明类
  5. class Goods{
  6. }
  7. #类的实例化,是一个创建对象的过程。new
  8. $goods = new Goods();
  9. # 再不会引起误会的情况下,示例与对象是同义词
  10. // 判断对象$goods是不是类Goods的示例
  11. var_dump($goods instanceof Goods);
  12. // 输出 bool(true)
  13. // 查看 对象$goos 的类名
  14. echo get_class($goods);
  15. // 输出 Goods
  16. // 类名是支持使用变量的,动态类
  17. $class = 'Goods';
  18. $obj = new $class();
  19. echo get_class($obj);
  20. // 输出 Goods
  21. // 用函数将首字母转为大写 动态生成类名经常用
  22. $class = ucfirst('goods');
  23. echo $class;
  24. // 输出 Goods

2.2 类中成员

2.2.1 按功能分类

序号 名称 描述 关键字
1 类属性property 类中变量
2 类方法method 类中函数 function
3 类常量method 类中常量 const .
  1. <?php
  2. # 类成员:类属性,类方法,类常量
  3. // 类名必须首字母大写
  4. class User
  5. {
  6. // 类中变量必须要有作用域:或者叫访问限制
  7. // 语法 : 访问限制符 $ 变量名 = 值
  8. // 常规属性 跟静态属性相比又叫动态属性
  9. // public 公开的
  10. // 字符串
  11. public $name = 'micheal';
  12. // 数字
  13. public $age = 15;
  14. // 数组
  15. public $arr = [1,2,3,4];
  16. // nowdoc heredoc
  17. public $txt = <<< TXT
  18. <h2>我爱你中国</h2>
  19. TXT;
  20. ####但是####
  21. // 以下属性不可以用 :非法属性值
  22. // 不能用变量
  23. // public $age = $varl;、
  24. // 不能用类属性 类方法 赋值
  25. // public $age = $this->age;
  26. // 不能用表达式
  27. // public $age = $age*10;
  28. // 不能使用函数调用的结果
  29. // public $age = age();
  30. // 2.静态属性
  31. // 如果一个属性的值对所有示例来说是一样的,换句话说就是他被所有的对象所共享 那么就没有必要用对象来访问
  32. // 用类访问,此时可以声明为静态的
  33. public static $username = '双倍快乐';
  34. // php 程序运行简单分为两个阶段:编译,执行
  35. // 静态属性在程序的编译阶段就完成了初始化,已经有了值了
  36. // 静态属性创建时一定要有值或者默认值,不依赖类的实例化对他进行初始化
  37. // 3.抽象属性:没有被初始化,默认值可以认为null,但不能给他赋值null否则会发生根本性变化,赋值后就不是抽象属性了
  38. public $ages;
  39. }
  40. // 访问
  41. $user = new User;
  42. // -> 对象和成员访问符
  43. echo "姓名:{$user->name}";
  44. // 输出 姓名:micheal
  45. // 在类的外部可以给类中的值进行更新
  46. $name = 'kaiwen';
  47. $user->name = $name;
  48. echo "姓名:{$user->name}";
  49. // 输出 姓名:kaiwen
  50. echo $user->txt;
  51. // 输出 我爱你中国
  52. // 访问静态属性 适用范围解析符,双冒号::
  53. echo User::$username;
  54. // 输出 双倍快乐
  55. // 静态属性也支持更新
  56. User::$username = '不会快乐';
  57. echo User::$username;
  58. // 输出 不会快乐

2.2.2 按访问权限分类

序号 名称 关键字 类外部 类内部 类继承上下文 描述
1 公开成员 public 允许 允许 允许 默认
2 受保护成员 protected 禁止 允许 允许 封装
3 私有成员 private 禁止 允许 禁止 封装

2.2.3 按调用主体分类

序号 名称 关键字 调用主体
1 非静态成员 默认 类实例调用
2 静态成员 static 类调用

2.2.4 按是否有具体实现分类

序号 名称 关键字 具体实现
1 非抽象成员 默认
2 抽象成员 abstract
  • 类中只要有一个抽象方法,该类必须声明为抽象类abstract class
  • 严格来说未初始化的属性也应该算是抽象成员, 即: 抽象属性
  • 思考: 有抽象属性的类,为什么不需要定义为抽象类呢?
    • 普通属性通常会在类实例化通过构造方法进行初始化
    • 静态属性由类调用而没有实例化的机会,所以定义时通常已经初始化

2.2.5 按方法是否可重写

序号 类型 关键字 描述
1 可重写方法 默认 可由子类重写
2 最终方法 final 不允许子类重写

只有 “类和方法” 可声明为final, 属性不可以


2.3 类的分类

序号 类型 关键字 可实例化 可继承 可组合
1 常规类 class 允许 允许 允许
2 最终类 final 允许 禁止 允许
3 抽象类 abstract 禁止 允许 允许
4 特征类 trait 禁止 禁止 允许
5 接口类 interface 禁止 允许 允许
6 匿名类 new class{} 禁止 允许 允许

3.总结

了解文件加载中 条件加载强制加载的区别
初步了解类与对象,类的声明与实例化,非法属性值,外部可更新属性值

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议