1.文件的本质与作用域
(1)本质:将目录文件复制到当前位置
- 使用include或者require引入文件
// 1. include
include __DIR__ .'/inc/f1.php';
// $username = '王五';
echo $username. '<hr>';
$email = include __DIR__ .'/inc/f1.php';
echo $email.'<hr>';
// 2. require
require __DIR__.'/inc/f1.php';
echo $username. '<hr>';
$email = require __DIR__ .'/inc/f1.php';
echo $email.'<hr>';
(2)作用域:作用在当前引进页面
- header.php
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 页眉 -->
<header>
<nav>
<a href="">首页</a>
<a href="">教学视频</a>
<a href="">学习路径</a>
<a href="">技术文章</a>
</nav>
</header>
- footer.php
<!-- 页脚 -->
<footer>
<div class="copy">php中文网版权所以©2022-2025</div>
</footer>
</body>
</html>
- 主页面
<!-- 页眉 -->
<?php require __DIR__.'/inc/header.php' ?>
<!-- 主体 -->
<main>
<ul>
<li><a href="">最新文章1</a></li>
<li><a href="">最新文章2</a></li>
<li><a href="">最新文章3</a></li>
<li><a href="">最新文章4</a></li>
<li><a href="">最新文章5</a></li>
<li><a href="">最新文章6</a></li>
<li><a href="">最新文章7</a></li>
<li><a href="">最新文章8</a></li>
<li><a href="">最新文章9</a></li>
<li><a href="">最新文章10</a></li>
</ul>
</main>
<!-- 页脚 -->
<?php require __DIR__.'/inc/footer.php' ?>
2.类的关键字
(1)class、new 类的声明与实例
// 类声明
// 1. class
class Goods
{
// ...
}
// 类的实例化:创建对象的过称
// 2. new
$goods = new Goods;
var_dump($goods);
(2)public 公有,可供外部使用
class User1
{
// public
public $username = '张三';
}
$user1 = new User1();
echo $user1->username.'<hr>';
(3)private 私有,仅限当前类中使用
class User1
{
// public
public $username = '张三';
// private
private $age = 18;
}
$user1 = new User1();
echo $user1->username.'<hr>';
echo $user1->age.'<hr>';
class User1
{
// public
public $username = '张三';
// private
private $age = 18;
public function getAge(){
return $this->age;
}
}
$user1 = new User1();
echo $user1->username.'<hr>';
// echo $user1->age.'<hr>';
echo '获取当前类中的age:'.$user1->getAge().'<hr>';
(4)protected 继承(extends), 可在本类或子类中使用, 不对外公开
- 直接使用
class User1
{
// public 公共/公共,默认
public $username = '张三';
// private 私有,仅限在当前类中使用
private $age = 18;
// protected 继承, 可在本类或子类中使用, 不对外公开
protected $id = 1;
public function getAge(){
return $this->age;
}
}
$user1 = new User1();
echo $user1->username.'<hr>';
// echo $user1->age.'<hr>';
echo '获取当前类中的age:'.$user1->getAge().'<hr>';
echo $user1->id.'<hr>';
- 当前类中使用
class User1
{
// public 公共/公共,默认
public $username = '张三';
// private 私有,仅限在当前类中使用
private $age = 18;
// protected 继承, 可在本类或子类中使用, 不对外公开
protected $id = 1;
public function getAge(){
return $this->age;
}
public function getId(){
return $this->id;
}
}
$user1 = new User1();
echo $user1->username.'<hr>';
// echo $user1->age.'<hr>';
echo '获取当前类中的age:'.$user1->getAge().'<hr>';
// echo $user1->id.'<hr>';
echo '获取当前类中的id:'.$user1->getId().'<hr>';
- 子类中使用
class Stu extends User1
{
public function getId(){
return $this->id;
}
}
$stu = new Stu();
echo '子类中使用父类的id:'.$stu->getId().'<hr>';
(5)abstract 抽象
- 将父类声明为一个抽象类
abstract class Demo1
{
}
var_dump(new Demo1);
- 如果不想让用户直接使用父类,而必须通过继承/扩展的子类来间接使用
class Demo2 extends Demo1
{
}
echo 'Demo2的父类是:'.get_parent_class(new Demo2).'<hr>';
(6)interface 接口
- 声明接口
// interface: 声明接口
interface iUser
{
// 1. 类常量
const NATION = 'CHINA';
// 2. 必须是抽象,必须是public
public function m1();
public function m2();
}
- 接口不能直接用, 要用一个类来实现它
(1)用普通类来实现一个接口, 必须将接口中的所有抽象方法全部实现
class Demo11 implements iUser
{
public function m1()
{
}
// public function m2()
// {
// }
}
(2)用抽象类来实现一个接口, 允许有不实现的抽象成员
abstract class Demo22 implements iUser
{
public function m1()
{
}
}
(3)可通过接口,间接实现多继承
interface A
{
}
interface B
{
}
interface C
{
}
class Test implements A, B, C
{
}
// 查看当前类实现的所有接口
$arr = class_implements('Test');
printf('<pre>%s</pre>', print_r($arr, true));