多态
oop面向对象编程三大特性:封装,继承,多态
多态分为:重写,重载(php不支持)
重写:子类重写了父类的同名方法
注意:子类中覆盖的方法不能比父类的方法访问权限更加严格
方法修饰符
static (静态的)
1-1
1. 静态属性在加载类的时候分配空间,所以不需要实例化就可以直接访问
2.访问静态成员语法:类名::静态成员
3.静态成员在内存只有就一份,为所有的实例公共。
4. 静态成员不能访问普通成员,只能访问静态成员。因为静态成员被创建的时候可能还没有任何实例被实例化
5.static修饰属性成为静态属性,static修饰方法成为静态方法
1-2 self
self表示当前类的名字

注意:非静态方法被self::调用,自动转成静态方法 不能调用普通属性(在类没有实例化之前 普通属性没有分配空间)

1-3 静态成员可以被继承
1-4 确定当前对象(静态延时绑定)
【static::静态成员】称为延时绑定,static表示的是一个类,具体表示什么类在运行时确定,表示的是当前对象所在的类
final(最终的)
final修饰的类不能被继承
final修饰的方法不能重写
abstruct(抽象的)
abstruct修饰的方法叫抽象方法,abstruct修饰的类叫抽象类
如果只有方法的声明而没有方法的实现成为抽象方法
如果一个类中有一个方法是抽象方法,那么这个类就是抽象类
抽象类不允许实例化,必须在子类中重新实现才能实例化
抽象类的作用:
定义统一的方法名称
防止实例化
接口(interface)
如果一个类中所有的方法全都是抽象方法,那么这个类就可以声明成接口
接口是一个特殊的抽象类
接口中的抽象方法只能是public的,默认也是public权限
通过implements类实现接口
不能通过final和abstract修饰接口中的抽象方法
类不允许多重继承,接口允许多重实现
先继承类,后实现接口
继承类同时实现接口

类常量
补充:类(接口)中可以放属性、方法、常量。
类常量用const定义
父类可以指向子类的引用
类的自动加载
在项目中
一个文件中存放一个类
文件名与类名同名
以.class.php结尾
当页面执行的时候,通过PHP核心程序(Zend Engine)判断用户脚本需要哪个类。如果没有找到,会自动的调用__autoload()函数,并且会将缺少的类名传递给__autoload()函数,我们只需要在__autoload函数中加载缺少的类即可。
手动加载类
1.9.1 手动加载类
require 'Goods.class.php';
require 'Books.class.php';
require 'Phone.class.php';
$book=new Books();
$phone=new Phone();
$book->setName('PHP入门与精通');
$phone->setName('诺基亚2100');
$book->getName();
$phone->getName();自动加载类
类文件存放在同一个目录下

将类的地址映射到数组中加载
类文件存放的地址不规则
function __autoload($class_name) {
$map=array(
'Goods' => './aa/Goods.class.php',
'Books' => './bb/Books.class.php',
'Phone' => './cc/Phone.class.php'
);
require $map[$class_name];
}利用命名规则加载类
将同一类型的类文件放在同一个目录下。
$book=new BooksLib();
$phone=new PhoneLib();
$book->setName('PHP入门与精通');
$phone->setName('诺基亚2100');
$book->getName();
$phone->getName();
//通过命名规则加载类
function __autoload($class_name) {
if(substr($class_name,-3)=='Lib'){
require "./Lib/{$class_name}.class.php";
}
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号