在PHP中,include,include_once,require,require_once 都有引入文件(PHP,HTML等)的作用。我们在运用它们的时候要理解使用。
我们在脚本demo1.php 写入一个求和的函数
<?php
function sum(int $a, int $b){
return $a + $b;
}
在同一目录下的另外一个脚本文件中分别用上述四种方法
include引用文件不会检查被引用的文件在当前文件中是否引用过,并且如果被引用的文件的不存在,当前脚本仍然可以继续执行
include './demo1.php';
echo sum(3, 4);
// 结果是 7
// 但是我们引用两次该demo1.php 文件是就会报错
include './demo1.php';
include './demo1' . '.php';
echo sum(3, 5);
// 结果是:Fatal error: Cannot redeclare sum() ;函数不能重新定义
这时我们就可以使用include_once了。include_once在加载文件是会检查文件是否被引用过。
$a = './demo1.php';
include $a;
include './demo1.php';
echo sum(3,5);
//此时不会报错,结果是8
前文说过,使用include 加载文件,被加载的文件不存在,当前脚本仍然可以继续执行,请看以下例子。
include './demo2.php';
echo '就算被加载文件不存在我仍然可以执行';
// 浏览器报错并返回结果:就算被加载文件不存在我仍然可以执行。
// 说明include 加载文件并不会因为被加载文件不存在而停止当前脚本的执行
// 但被加载的文件有错误时,仍然会报错
require 强制加载文件,被加载文件不存在的话,当前脚本会立即停止
require ('./demo6.php');
echo '就算出错了我仍然可以执行';
// 浏览器报错并且不会输出:“就算出错了我仍然可以执行”
require_once 会在强制加载文件之前检查文件是否被加载过
require ('./demo1.php');
require_once ('./demo1.php');
echo sum(3,4);
// 结果是:7
总结:include_once, require_once可以实现去重加载,但会增加内存开销。require强制加载,若文件不存在的话就会立即停止当前脚本执行,常用于加载一些重要文件。
类的创建与访问。类成员可以有常量,方法,属性
类的创建与实例化
//创建一个类
class User{
}
//创建User类的实例
$user1 = new User();
//判断实例是否是某一个类的对象。
var_dump($use1 instanceof User);
//得到某一个实例对象的类名
echo get_class($use1);
类的属性值与类成员的访问
类属性就是有访问限制的变量。语法:访问限制符 $变量名称。访问限制符有:public protected private
class User
{
//演示类属性的创建
public $name = 'Bob';
public $age = 20;
public $options = [3,4,5];
public $nowdoc = <<< 'hello'
你好,世界
hello;
public $heredoc = <<< "hi"
你好,\n\r世界
hi;
//类属性值不能用以下方法创建
//1.非法属性值 2.变量 3.类属性、类方法 4.表达式 5.函数调用 6.注意heredoc中不能出现变量。
//如果一个属性对所有的实例来说是一样的,用类访问更方便,此时可以声明静态属性
//静态属性在编译阶段初始化,在执行阶段可以更改
public static $nationality = 'CHINA';
//抽象属性, 默认值是null
public $price;
}
//类成员的访问 首先实例化对象
$user1 = new User();
echo $user1->name.'的年龄是'.$user1->age;
//结果是:Bob的年龄是20
//可以实例化后修改当前实例的
$user1->name = 'Tom';
$user1->age = 18;
echo $user1->name.'的年龄是'.$user1->age;
//结果是:Tom的年龄是18
//访问静态属性用两个冒号 ::
echo $user1::$nationality;
//结果是:CHINA
//静态属性一样可以修改
$user1::$nationality = 'USA';
echo $user1::$nationality;
//结果是:USA
//抽象属性的访问
var_dump($user1->price);
// NULL
// 抽象属性的修改
$user1->price = 20;
echo $user1->price;
//结果是:20