不能实例化的类;
abstract class 类名 {}
就是一个只有方法头,没有方法体的方法;
abstract class 类名 {
abstract function 方法名(形参1,形参2, .... );
}
1,抽象方法必须放在抽象类中;抽象类中可以没有抽象方法(虽然不常见)
2,子类继承了上级类的抽象方法,则必须:要么去实现它(就是定义其方法体);要么自身也是抽象类;
3,子类实现上级类的抽象方法,其本质就是“重写”(覆盖),则也要求满足:
3.1, 访问控制修饰范围不能更小;
3.2, 方法的形参需要保持一致;
是指在一个类中,多个具有不同形参的同名方法的现象;
是指:对一个对象(或类)使用其不存在的属性或方法的时候的,“特别处理机制”;
就是对一个对象的未定义的(不存在的)的属性进行取值的时候,会自动调用该方法;
就是对一个对象的未定义的(不存在的)的属性进行赋值的时候,会自动调用该方法;
class A{
public $arr = array();
function __set($key, $value){
$this->arr[$key] = $value;
}
fucntion __get($key){
if( !empty ($this->arr[$key]) ){
return $this->arr[$key];
}
else{
return “未定义的属性!”;
}
}
}
就是对一个对象的未定义的(不存在的)的属性进行isset()判断的时候,会自动调用该方法;
就是对一个对象的未定义的(不存在的)的属性进行isset()判断的时候,会自动调用该方法;
是指对一个对象的未定义的方法进行调用的时候,会自动调用方法:__call($方法名,$实参数组 );
是指对一个类的未定义的静态方法进行调用的时候,会自动调用静态方法:__callstatic ($方法名,$实参数组 );
class A {
function __call($name, $arg ){
if( $name == “f1”){
$len = count($arg); //实参个数!
if( $len == 1){
//。。。。处理
}
else if( $len == 2){
//。。。。处理
}
else if( $len == 3){
//。。。。处理
}
else{
//不准备处理其他情况。。。这里可以引发一个错误!
}
}
else if( $name == “f2”){
.......
}
..........
}
}
$a1 = new A();
$a1->f1(1);
$a1->f1(2, 3);
$a1->f1(3, 4, 5);
$a1->f2(1);
$a1->f2(2, 3);
就是一种类似类的更为“简洁”的语法结构,其中只能定义常量和抽象;
interface 接口名{
常量定义若干个;。。。。。
抽象方法定义若干个;。。。。。//这里抽象方法不要abstract和访问控制,默认都是public
}
是对单继承的语法特性的一种“修正措施”,目的是为了一定程度上模拟现实世界的“多继承”特性;
类实现接口:
class 类名 implements 接口1,接口2,....{ 。。。 }
接口之间的继承:
interface 接口1 extends 接口2{.....}
类和对象的成员访问的另一个总结:
单例3步曲:
1,私有化构造方法:
2,定义一个私有的静态变量,以存储唯一的对象;
3,定义个静态方法,以判断是否需要进行实例化该唯一对象,并返回该对象;