适合新手大师级的韩顺平PHP全套笔记

导读://这些提供一个__call//__call是它一个对象调用某个方法,而该方法不存在,则//系统会自动调用__callfunction__call($method,$p){var_dump($p);if($method=="test"){if(count($p)==1){$this->test1($p);}elseif(count(

适合新手大师级的韩顺平PHP全套笔记

//这些提供一个__call

//__call 是它一个对象调用某个方法,而该方法不存在,则

//系统会自动调用__call

function __call($method,$p){

var_dump($p);

if($method=="test"){

if(count($p)==1){

$this->test1($p);

}else if(count($p)==2){

$this->test2($p);

}

}

}

}

$a=new A();

$a->test(1);

$a->test(56,90);

?>

小结: 关于重载

① php5 默认情况下不直接支持方法重载

② php5 可以同__call魔术方法,模拟一个方法效果的效果.

返回PHP学院

74讲 面向对象编程三大特性⑤

更新时间:2013年01月14日14时02分 来源:

方法的重写/方法的覆盖(override)

① 先看一个问题

当一个父类知道所有的子类都有一个方法,但是父类不能确定该方法究竟如何写,可以让子类去覆盖这个方法,具体用法如下:

<?php

//抽象一个Animal类

class Animal{

public $name;

protected $price;

function cry(){

echo "不知道动物怎么叫..";

}

}

class Dog extends Animal{

//覆盖

function cry(){

echo "小狗汪汪叫..";

}

}

class Pig extends Animal{

//覆盖.

function cry(){

echo "哼哼叫..";

}

}

//创建一个只狗

$dog1=new Dog();

$dog1->cry();

$pig1=new Pig();

$pig1->cry();

?>

关于方法重写细节讨论

1. 要实现重写,要求 子类的那个方法的名字和参数列表个数一摸一样,但是并不要求参数的名称一样.

2. 如果子类要去调用父类的某个方法(public / protected) 则可以使用 parent::方法名(参数..) , 父类名::方法名(参数...)

3. 在实现方法覆盖的时候,访问修饰符可以不一样 //但是必须满足: 子类的访问范围>=父类的访问范围

多态体现在什么地方?

class Animal{

public function cry(){

echo '动物叫唤..';

}

}

class Cat extends Animal{

public function cry(){

echo "abc";

}

}

$cat1=new Cat();

$cat1->cry();

当子类没有覆盖父类的方法则 $cat1->cry() 调用的是父类,当 子类覆盖了父类的方法,则调用自己的cry()

返回PHP学院

75讲 抽象类

更新时间:2013年01月16日10时51分 来源:

抽象类

为什么设计抽象类这个技术?

1. 在实际开发中,我们可能有这样一种类,是其它类的父类,但是它本身并不需要实例化,主要用途是用于让子类来继承,这样可以到达代码复用. 同时利于项目设计者,设计类.

快速入门

//在实现方法覆盖的时候,访问修饰符可以不一样

//但是必须满足: 子类的访问范围>=父类的访问范围

abstract class Animal{

public $name;

protected $age;

//这个方法没有方法体,这个方法主要是为了让子类去实现.

abstract public function cry();

}

class Cat extends Animal{

public function cry(){

echo "猫猫叫唤..";

}

}

//创建一个子类实例

$cat1=new Cat();

$cat1->cry();

使用抽象类的注意事项:

1. 基本用法

abstract class 类名{

//方法

//属性

}

2. 如果一个类使用abstract 来修饰,则该类就是抽象类, 如果一个方法被abstract修饰,则该方法就是抽象方法【抽象方法就不能有方法体.】

3. 抽象类可以没有抽象方法.同时还可以有实现了的方法.

<?php

//在实现方法覆盖的时候,访问修饰符可以不一样

//但是必须满足: 子类的访问范围>=父类的访问范围

abstract class Animal{

public $name="abc";

protected $age;

//这个方法没有方法体,这个方法主要是为了让子类去实现.

abstract public function cry();

public function getName(){

return $this->name;

}

}

class Cat extends Animal{

public function cry(){

echo "猫猫叫唤..";

}

}

//创建一个子类实例

$cat1=new Cat();

$cat1->cry();

echo $cat1->getName();

?>

4. 如果一个类中,只要有抽象方法,则该类必须声明为abstract

abstract class A{

abstract function test();

}

echo "ok";

5. 如果A类继承了一个抽象类 B,则要求A类实现从B类继承的所有抽象方法 案例:

//这是一个抽象类

abstract class A{

abstract function test();

}

//B类要么自己抽象,或者实现从A类继承的抽象方法.

class B extends A{

function test(){

echo "我实现A:test()";

}

}

echo "hello"

76讲 接口

更新时间:2013年01月20日16时56分 来源:

接口

快速入门:

<?php

//使用程序模拟现实情况

//定义规范(方法/属性)

interface iUsb{

public function start();

public function stop();

}

//编写相机类,让它去实现接口

//1.当一个类实现了 某个接口,则要求该类必须实现这个接口的所有方法 class Camera implements iUsb{

public function start(){

echo "相机开始工作";

}

public function stop(){

echo "相机停止工作...";

}

}

//编写手机类

class Phone implements iUsb{

public function start(){

echo "手机开始工作";

}

public function stop(){

echo "手机停止工作...";

五星文库wxphp.com包含总结汇报、IT计算机、外语学习、资格考试、人文社科、word文档、考试资料、行业论文以及适合新手大师级的韩顺平PHP全套笔记等内容。

本文共35页1<<29303132333435