格式
php
class Dog {
public $name = 'tom';
public function eat() {
}
}
$cat = new Dog;
echo $cat->name;
$cat->eat();
函数的public可以省略,变量的不能省略
$this
代表自身的对象
访问控制
public:共有的类成员可以在任何地方被访问
protected:受保护的类成员可以被其自身以及其子类和父类访问
private:私有的类成员只能被其定义所在的类访问
构造函数
创建对象时,会被自动调用;
用于初始化对象;
没有返回值
php
class A {
private $name;
public funciton __construct($name)
{
$this->name = $name;
}
}
析构函数
在对象被销毁时自动调用;
用来执行一些清理操作,如释放资源或关闭数据库连接;
当对象不在被引用或脚本执行结束时,析构函数会被自动调用;
php
class ex {
public function say() {
echo 'hello';
}
public function __destruct() {
}
}
static静态变量和self
静态:无需对类进行实例化,就可以直接调用这些属性和方法
所有对静态变量进行的操作都会对所有变量起作用;
php
public static $dog='dogodogodg';
echo self::$dog;
类常量
所有的对象共用一个属性;
类常量不可以更改,静态属性可以更改
php
const dog='dogodogodg';
echo self::dog;
类外也可以正常调用
php
echo Dog::dog;
static静态方法
可以调用静态方法、静态变量
php
public static function eat() {
echo self::$name;
}
可以调用非静态方法、非静态变量
php
public function eat(){
echo (new self)->name;
echo (new self)->eat();
继承
php
class b extends a{}
-
final关键字
防止类被继承
防止类的方法被重写
final不能用于属性
-
调用父类方法
parent::方法名
parent::__construct()
-
static静态延迟绑定
运行时根据实际调用的类来确定静态方法和属性的绑定(动态绑定)
php
static::$name
多态
PHP中不允许方法名重复
方法重写是指子类重写父类的的方法,以改变方法的实现细节;
方法重载是只在同一个类中根据参数个数或类型不同来实现不同功能;
-方法重载
php
$args = func_get_args(); //获取参数
$numargs = func_num_args(); //获取参数数量
要借助条件判断实现,根据不同的参数或参数数量来重写
接口和抽象类
- interface
接口是指一组方法的集合,不是类,不能被实例化;
可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容;
只可以使用public; - abstract
抽象类是一种特殊的类,只能被继承,不能被实例化;
抽象类用于定义一组相关的方法,但这些方法的具体实现由继承它的子类来完成;
子类继承抽象 类后,必须实现抽象类中所有的抽象方法;
抽象类可以包含抽象方法和普通方法
抽象方法是没有具体实现的方法,只有方法的声明,而不需要方法体;
抽象方法只能存在于抽象类中;
可以使用prtected,但不能使用private - 区别
抽象类可以包含非抽象方法的实现,而接口只能包含方法的声明,没有方法的实现;
类只能继承一个抽象类,但可以实现多个接口;
抽象类可以有构造函数,而接口不能有构造函数;
抽象类中的方法可以有public、protected和private访问修饰符,而接口中的方法只能说public;
子类继续抽象类时,必须实现抽象类中的所有抽象方法,负责子类也必须声明为抽象类;
子类实现接口时,必须实现接口中的所有方法;