PHP类的继承和接口

PHP类的继承的一些语法

-PHP的类只支持单继承,就是每个类最多只能有一个父类或者没有父类。

-子类不能继承父类使用private修饰的成员。

修饰符 可访问范围
public 当前类、子类和类外
protected 当前类和子类
private 当前类
类的类型 含义
被final修饰的类 只能实例化不能被继承
被abstract修饰的类 只能被继承不能被实例化

注意:

被final修饰的方法不能被子类重写。

-通常要被子类继承的成员都使用protected,其余的尽量使用private,把类的内部实现隐藏起来。

-子类可以重写父类的成员,但不可以重写父类private修饰的成员。

-可以使用parent访问父类的成员。

修饰符 含义
self 当前类本身
parent 当前类父类
$this 当前对象

-构造函数和析构函数的执行顺序

- 一个没有父类的类先执行构造函数再执行析构函数
- 一个有父类的类先执行子类的构造函数再执行父类的构造函数,析构函数的执行顺序跟构造函数的执行顺序相反。
<?php
// 定义一个Person类
class Person {
    // 构造函数
    public function __construct() {
        echo "Person‘s __construct.",‘<br />‘;
    }
    // 析构函数
    public function __destruct() {
        echo "Person‘s __destruct.",‘<br />‘;
    }
}
// 定义一个PersonMale类继承Person类
class PersonMale extends Person {
    // 构造函数
    public function __construct() {
        echo "PersonMale‘s __construct.",‘<br />‘;
        // 调用父类的构造函数
        parent::__construct();
    }
    // 析构函数
    public function __destruct() {
        parent::__destruct();
        echo "PersonMale‘s __destruct.",‘<br />‘;
    }
}
// 定义一个PersonFemale类继承Person类
class PersonFemale extends Person{
    // 构造函数
    public function __construct() {
        echo "PersonFemale‘s __construct.",‘<br />‘;
        parent::__construct();
    }
    // 析构函数
    public function __destruct() {
        parent::__destruct();
        echo "PersonFemale‘s __destruct.",‘<br />‘;
    }
}

$personObject = new Person();
$personMaleObject = new PersonMale();
$PersonFemaleObject = new PersonFemale();

运行结果:
Person‘s __construct.
PersonMale‘s __construct.
Person‘s __construct.
PersonFemale‘s __construct.
Person‘s __construct.
Person‘s __destruct.
PersonFemale‘s __destruct.
Person‘s __destruct.
PersonMale‘s __destruct.
Person‘s __destruct.

PHP的接口

-一个类可以实现多个接口

-接口里的方法都是不完整的方法(没有函数体的)

-接口的使用

<?php
/**
*   接口MyInterFaceA
*/
interface MyInterFaceA {
    public function functionA();
    public function functionB();
}
/**
*   接口MyInterFaceB
*/
interface MyInterFaceB {
    public function functionC();
    public function functionD();
}
/**
*   类实现接口MyInterFaceA和MyInterFaceB
*   并且重写接口里所有的公共的抽象方法
*/
class MyClass implements MyInterFaceA,MyInterFaceB{
    public function functionA() {

    }
    public function functionB() {

    }
    public function functionC() {

    }
    public function functionD() {

    }
}
时间: 2024-11-08 12:17:08

PHP类的继承和接口的相关文章

【C# 复习总结】类、继承和接口

1 类 定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat { } class Cat:object { } C#中所有的类都是默认由object类派生来的,显示指定或者省略效果是一样的,所以上面的两个例子是完全相同的. C#中类包括:抽象类.密封类.非抽象类 abstract:表示修饰的类不完整,也就是抽象类,只能用做基类. 在使用是不能直接实例化, 不能使用new运算符. sealed:表示修饰的类不可派生,也就是密封类. base:访问最近的基类,也就是

java基础第五天_静态代码块、类的继承和接口

1.文字阐述静态代码块的作用. 静态代码块在类加载的时候执行,而且只执行一次. 2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么? 构造代码块调用顺序优先于构造方法,和方法的声明位置无关. 构造代码块作用:a.可以存放多个构造方法的共同代码,提升代码的重复性 b.对成员变量初始化 3.类加载时,是否一定会执行静态代码块?如何手动控制类加载? 类加载时默认执行静态代码块. 手动控制类加载使用Class.forName("classname"

IT十八掌作业_java基础第五天_静态代码块、类的继承和接口

1.文字阐述静态代码块的作用. A:静态代码块常用来执行类属性的初始化,且只被执行一次. 2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么? 执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 和位置无关. 构造代码块在每次创建对象是都会执行. 3.类加载时,是否一定会执行静态代码块?如何手动控制类加载? 类加载时默认加载静态代码块,class.forName(String name) 或 class.forNa

静态代码块、类的继承和接口

1.文字阐述静态代码块的作用. 2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么? 3.类加载时,是否一定会执行静态代码块?如何手动控制类加载? 4.定义类Person,Man,Woman形成继承关系. 5.什么是抽象方法?什么是抽象类?抽象类是否有构造函数,是否可以重载? 6.抽象修饰符有哪些非法组合?并给出合理的解释? 7.super和this作用以及用法以及注意事项? 8.定义接口 1.IWhite 2.IRich 3.IBeanti 4.定

类的继承和接口

一:关于构造函数的继承 class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); } } class Parent extends Grandparent {

swift类、继承、接口

import Foundation class Hello{ var _name:String?="swift global" init(name:String){ //定义类中有参数的构造方法 _name=name; println("Hello , \(name)"); } init(){ //定义类中无参数的构造方法 println("this is init method"); } func sayHello(){ //定义成员方法 pr

面向对象基础(继承类,抽象方法,接口,委托和事件)

1.页面上实现猫叫,狗叫,虎叫 <asp:Button ID="cat" runat="server" Text="猫叫" onclick="cat_Click" /><br/> <asp:Button ID="dog" runat="server" Text="狗叫" onclick="dog_Click" />

类、对象和接口

1.定义类继承结构 1.1 kotlin中的接口 声明接口 interface Clickable{ fun click() } 声明了一个只有一个抽象方法的接口,和java中一样,实现这个接口的类要提供这个抽象方法的具体实现. 实现接口 class Button:Clickable{ override fun click()=println("I was clicked")//override修饰符是强制要求的 } 在kotlin中":"相当于java中的exte

Java通过继承thread类与实现Runnable接口实现多线程的区别

Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 一.通过继承Thread类实现多线程 class MyThread extends Thread{ String name = null; int ticket = 0; public MyThread(String name){ this.name = name; } public synchronized v