PHP笔记11-day15

抽象类,抽象方法

抽象类:

不能实例化的类;

abstract  class  类名 {}

抽象方法:

就是一个只有方法头,没有方法体的方法;

abstract  class  类名 {

abstract  function  方法名(形参1,形参2, .... )

}

抽象类和抽象方法的细节

1,抽象方法必须放在抽象类中;抽象类中可以没有抽象方法(虽然不常见)

2,子类继承了上级类的抽象方法,则必须:要么去实现它(就是定义其方法体);要么自身也是抽象类;

3,子类实现上级类的抽象方法,其本质就是“重写”(覆盖),则也要求满足:

3.1, 访问控制修饰范围不能更小;

3.2, 方法的形参需要保持一致;

重载技术overloading

重载的基本概念

重载在“通常面向对象语言”中的含义:

是指在一个类中,多个具有不同形参的同名方法的现象;

重载在“php语言”中的含义:

是指:对一个对象(或类)使用其不存在的属性或方法的时候的,“特别处理机制”;

属性重载

__GET($属性名)

就是对一个对象的未定义的(不存在的)的属性进行取值的时候,会自动调用该方法;

__SET($属性名,值)

就是对一个对象的未定义的(不存在的)的属性进行赋值的时候,会自动调用该方法;

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()判断的时候,会自动调用该方法;

__UNSET($属性名)

就是对一个对象的未定义的(不存在的)的属性进行isset()判断的时候,会自动调用该方法;

 

方法重载

是指对一个对象的未定义的方法进行调用的时候,会自动调用方法:__call($方法名,$实参数组 );

是指对一个类的未定义的静态方法进行调用的时候,会自动调用静态方法:__callstatic ($方法名,$实参数组 );

 

利用php的重载技术,实现通常的“方法重载”:

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)技术

什么是接口?

就是一种类似类的更为“简洁”的语法结构,其中只能定义常量和抽象;

接口(interface)定义形式:

interface  接口名{

常量定义若干个;。。。。。

抽象方法定义若干个;。。。。。//这里抽象方法不要abstract和访问控制,默认都是public

}

为什么需要接口?

是对单继承的语法特性的一种“修正措施”,目的是为了一定程度上模拟现实世界的“多继承”特性;

 

使用形式:

实现接口:

class  类名   implements  接口1,接口2....{  。。。  }

接口之间的继承

interface  接口1  extends  接口2{.....}

 

类和对象的成员访问的另一个总结:


 

 

单例3步曲:

1,私有化构造方法:

2,定义一个私有的静态变量,以存储唯一的对象;

3,定义个静态方法,以判断是否需要进行实例化该唯一对象,并返回该对象;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章