数组换位置一.介绍 PHP(外文名:PHP: Hyperte(21)
如果某个类不希望对其进行扩展,则可以将其声明为最终类。
<?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()方法
醒醒酒吧