您现在的位置:首页 > 教案格式 > 正文

数组换位置一.介绍 PHP(外文名:PHP: Hyperte(21)

2018-02-02 05:05 网络整理 教案网

如果某个类不希望对其进行扩展,则可以将其声明为最终类。

<?php
final class C1{}
class C2 extends C1{}//会报错Class C2 may not inherit from final class (C1)

如果某个方法不希望被下级类覆盖,就可以对其声明为最终方法。

<?php
class C1{
  final function final_func(){
    
  }
}
class C2 extends C1{
  function final_func(){
    
  }//会报错Cannot override final method C1::final_func()
}

在正常定义类的前面,加上关键字:abstract,那就构成抽象类。

抽象类可以用来规范一些类的共同特性,但又不需要去对其进行实例化。

抽象方法是一个没有方法体(也不含大括号)的方法。

方法前面需要加上abstract。

如果一个方法定义为抽象方法,则其所在的类必须定义为抽象类。

一个抽象类中,可以没有抽象方法但通常意义不大。

子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类

子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也须一致(其实这就是重写,所以要满足重写的要求)。

<?php
abstract class Animal{
  public $legs = 4;
  public $eyes = 2;
  public abstract function run();
}
class Man extends Animal{
  public $legs = 2;
  public function run(){
    echo "man can run with 6 meters per second";
  }
}
class Dog extends Animal{
  public function run(){
    echo "man can run with 20 meters per second";
  }
}

其基本语法是这样的:

在一个类中,有多个同名的方法,每个方法的参数不同而已。这种现象就称为“重载”。

参数不同可以是:数量个数不同,或类型不同,或顺序不同。

比如:

class  A{  
int function f1(int x){...}
int function f1(int x, int y){...}
int function f1(string s, int m){...}

但,在php中,一个类中,根本就不可以定义多个同名方法——这直接是语法错误。

实际上,php中的重载指的是:

属性重载:如果使用一个不存在的属性,就会去自动调用类中预先定义好的某个方法以处理数据

方法重载:如果使用一个不存在的方法,就会去自动调用类中预先定义好的某个方法以处理该行为

属性有4种使用情形:

取值:$v1 = 对象->属性;

赋值:对象->属性 = XX值;

判断是否存在:isset(对象->属性;)

销毁:unset(对象->属性;)

所谓属性重载,就是在面对上述4种情形的属性使用场景中,该对象如果来“应对”的问题。

如果某属性不存在,但在语法中使用如下情形,则会发生

取值:$v1 = 对象->属性; ===>自动调用类中的__get()方法

赋值:对象->属性 = XX值; ===>自动调用类中的__set()方法