1. 文件加载
- 文件加载: 可简单的理解为将外部文件内容复制到当前文档中
- 根据被加载文件的特征和重要性,可分为: “条件加载” 和 “强制加载” 二种方式
1.1 条件加载
加载外部文件,如果失败报警告级(Warning)错误,不会中断程序
序号 |
语法 |
描述 |
1 |
include |
条件加载 |
2 |
include_once |
去重(chong )条件加载 |
## include 文件加载
// 单引号加载
include 'header.html';
// 双引号加载
include "header.html";
// 变量加载
$file = 'header.html';
include $file;
// 拼接加载
$name = 'header';
include $name.'.html';
// 双变量拼接加载
$name = 'header';
$type = '.html';
include $name.$type;
// 条件加载 检测文件是否存在且是一个文件而不是目录,若不存在加载默认文件
$file = 'header111.html'; //没有此文件
(file_exists($file) && is_file($file)) ? include $file : include '404.html';
## include_once 去重加载 检测是否已经加载过此文件,若已经加载过则不加载,若未加载则只加载一次,无论输入多少次
// 单引号加载
include_once 'header.html';
// 双引号加载
include_once "header.html";
// 变量加载
$file = 'header.html';
include_once $file;
// 拼接加载
$name = 'header';
include_once $name.'.html';
// 双变量拼接加载
$name = 'header';
$type = '.html';
include_once $name.$type;
1.2 强制加载
加载外部文件,如果失败报致命级(Fatal error)错误,并中断程序
序号 |
语法 |
描述 |
1 |
require |
强制加载 |
2 |
require_once |
去重强制加载 |
- 强制加载跟条件加载使用方法一样,
唯独不同的地方是若文件不存在”条件加载”依然向下执行,而”强制加载”则会终止程序
## 条件加载 指向一个没有的文件
include 'template.php';
echo '<hr>虽然上面文件加载失败,但你依然可以看到我,说明程序继续向下执行<hr>';
## 强制加载
require 'header.html';
echo '<br><hr>强制加载成功,你可以看到我<hr>';
require 'template.php';
echo '<br><hr>强制加载失败,你看不到我<hr>';
1.3 函数作用域的支持
// 外部加载,内部访问
include 'function.php';
function func(){
global $email;
echo $email;
};
func();
// 输出 admin@php.cn
// 内部加载内部访问
function test(){
include 'function.php';
echo $email;
};
test();
// 输出 admin@php.cn
2. 类与对象
2.1 概念
序号 |
名称 |
描述 |
关键字 |
1 |
类class |
对象的模板 |
class |
2 |
对象instance |
类的实例 |
new |
- 类与对象界限并不清晰,在不影响理解前提下,常用类代表实例来引用类成员
- 对象与类的某一个实例绑定, 所以对象与实例可视为同义词,互换并不影响
# 对象也是实现代码复用的手段
# 要使用对象,就必须创建一个类,根据这个类,不断创建多个对象出来,实现代码复用
#类的声明与实例化
// 声明类
class Goods{
}
#类的实例化,是一个创建对象的过程。new
$goods = new Goods();
# 再不会引起误会的情况下,示例与对象是同义词
// 判断对象$goods是不是类Goods的示例
var_dump($goods instanceof Goods);
// 输出 bool(true)
// 查看 对象$goos 的类名
echo get_class($goods);
// 输出 Goods
// 类名是支持使用变量的,动态类
$class = 'Goods';
$obj = new $class();
echo get_class($obj);
// 输出 Goods
// 用函数将首字母转为大写 动态生成类名经常用
$class = ucfirst('goods');
echo $class;
// 输出 Goods
2.2 类中成员
2.2.1 按功能分类
序号 |
名称 |
描述 |
关键字 |
1 |
类属性property |
类中变量 |
无 |
2 |
类方法method |
类中函数 |
function |
3 |
类常量method |
类中常量 |
const |
. |
<?php
# 类成员:类属性,类方法,类常量
// 类名必须首字母大写
class User
{
// 类中变量必须要有作用域:或者叫访问限制
// 语法 : 访问限制符 $ 变量名 = 值
// 常规属性 跟静态属性相比又叫动态属性
// public 公开的
// 字符串
public $name = 'micheal';
// 数字
public $age = 15;
// 数组
public $arr = [1,2,3,4];
// nowdoc heredoc
public $txt = <<< TXT
<h2>我爱你中国</h2>
TXT;
####但是####
// 以下属性不可以用 :非法属性值
// 不能用变量
// public $age = $varl;、
// 不能用类属性 类方法 赋值
// public $age = $this->age;
// 不能用表达式
// public $age = $age*10;
// 不能使用函数调用的结果
// public $age = age();
// 2.静态属性
// 如果一个属性的值对所有示例来说是一样的,换句话说就是他被所有的对象所共享 那么就没有必要用对象来访问
// 用类访问,此时可以声明为静态的
public static $username = '双倍快乐';
// php 程序运行简单分为两个阶段:编译,执行
// 静态属性在程序的编译阶段就完成了初始化,已经有了值了
// 静态属性创建时一定要有值或者默认值,不依赖类的实例化对他进行初始化
// 3.抽象属性:没有被初始化,默认值可以认为null,但不能给他赋值null否则会发生根本性变化,赋值后就不是抽象属性了
public $ages;
}
// 访问
$user = new User;
// -> 对象和成员访问符
echo "姓名:{$user->name}";
// 输出 姓名:micheal
// 在类的外部可以给类中的值进行更新
$name = 'kaiwen';
$user->name = $name;
echo "姓名:{$user->name}";
// 输出 姓名:kaiwen
echo $user->txt;
// 输出 我爱你中国
// 访问静态属性 适用范围解析符,双冒号::
echo User::$username;
// 输出 双倍快乐
// 静态属性也支持更新
User::$username = '不会快乐';
echo User::$username;
// 输出 不会快乐
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.总结
了解文件加载中 条件加载 和 强制加载的区别
初步了解类与对象,类的声明与实例化,非法属性值,外部可更新属性值
Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:类与对象中, 有一些概念是有点绕, 似是而非, 所以要多看一些相关资料和多做练习