文件包含
文件包含的本质就是把外部文件的内容插入到当前的位置
包含的脚本与当前脚本公用一个作用域,相当于是一个文件
用文件包含的方式可以实现一个网站的模块化,将网站的各个部分分到不同的文件,在需要时分别调用
有两个关键字
1.include
这个方法就是直接引入外部的文件,在关键字后直接跟上文件路径
1.1相对路径引入
include 'inc/f1.php';
1.2绝对路径引入(推荐使用)
DIR :返回当前脚本在服务器上的路径
include __DIR__ . '/inc/f1.php';
2.require
和第一个方法一样,在关键字后面直接加文件路径
两个方法的区别
include, require 都支持条件加载,也就是说都支持if判断,满足条件再加载
include, require,功能一样,区别在于出错的处理上
include: 忽略错误,继续执行后面代码, require,直接退出
面向对象
对象是一个容器,是全局成员的一个前缀
类就是对这个对象的描述
类是全局成员
class :声明类
new :实例化类
类的命名方式为大驼峰命名法:例:UserName, PascalName
可以通俗的认为:对象==实例化类
// 这就是一个类的声明
class Goods
{
// ...
}
// 类的实例化->对象
$goods = new Goods();
get_class :返回当前实例的父级(由谁实例而来)
echo get_class($goods)
类成员
1.实例成员
1.1 属性 也就是类里面的变量(分为私有private和公共public)
1.2 方法 也就是类里面的方法
$this指向当前实例类
类内部的私有成员外部无法访问,如果需要在外部访问:
1.可以在内部创建一个访问接口(就是内部函数,通过这个函数访问访问到私有属性,因为这个函数包含在类内部,所以可以访问,然后在外部访问这个函数,就可以访问到需要的属性)
2.获取器:get(当前属性):可以获取当前类中的属性,但是是只读,不能在外部进行修改
3.修改器/设置器, 魔术方法, set(属性,值) 可以在外部读取并可以修改
这种以双下划线开始的 __ 方法,叫做魔术方法,由系统定义。
class User1
{
// 1. 实例成员
// (一) 属性, 变量的语法
// public: 默认
public $username = '张老师';
public $role = '妈';
// 私有, 只能在当前的类中使用
private $salary = 3800;
private $age = 28;
// (二) 方法: 函数的语法
// public function getSalary()
// {
// $user = new User1();
// $this : 和当前类实例绑定
// return $this->salary;
// }
// public function getAge()
// {
// return $this->age;
// }
// 获取器: __get(属性), 魔术方法, 双下划线开始的系统方法
// $name: 要获取的属性名
public function __get($name)
{
// 类内部: $this
// return $this->$name;
if ($name === 'salary') {
if ($this->role === '太太') {
return $this->$name;
} else {
return $this->$name - 1000;
}
}
if ($name === 'age') {
return $this->$name + 10;
}
}
// 修改器/设置器, 魔术方法, __set(属性,值)
public function __set($name, $value)
{
if ($name === 'age') {
if ($value >= 18 && $value <= 50) {
$this->$name = $value;
} else {
echo '年龄越界了';
}
}
}
// __get, __set, 成员访问非法拦截器
}
实例化
-> 指向符 PHP中访问类成员时使用
// 实例化
// 在类外部,用对象访问成员
$user1 = new User1();
echo $user1->username , '<br>';
// echo $user1->salary , '<br>';
echo $user1->salary . '<br>';
echo $user1->age . '<br>';
$user1->age = 48;
echo $user1->age . '<br>';
构造方法
构造方法: 实例化该类时,会自动触发
__construct:构造方法关键字
这个方法的作用可以理解为,创建一个方法,但是里面的属性由用户来填入
public function __construct($username, $salary, $age, $nation = 'CHINA')
{
$this->username = $username;
$this->salary = $salary;
$this->age = $age;
// 初始化静态属性
self::$nation = $nation ;
}
$user2 = new User2('李老师', 2800, 30, '中国');
echo $user2->username . '<br>';
echo User2::$nation . '<br>';
$user3 = new User2('猪老师', 3800, 40, '中国');
静态成员
static: 声明静态成员(可以是属性或者方法)
self:: 用来引用当前类
$this 用来引用当前实例
声明方法:
// 静态属性
public static $nation;
// 静态方法
public static function hello()
{
// return 'Hello,' . User2::$nation;
// 在类中, 使用 self::来引用当前类
return 'Hello,' . self::$nation;
}
外部访问静态成员
// echo $user3->nation . '<br>';
// 类外部,访问静态成员,使用类名称::
echo User2::$nation . '<br>';
echo User2::hello() . '<br>';