好奇的探索者,理性的思考者,踏实的行动者。
Table of Contents:
<?php
class wine {($sub) {
public function adv$obj = new $sub();
$obj->adv();
}
}
class kouzi {() {
public function adv'生活,离不开那口子';
echo
}
}
class jinjiu {() {
public function adv'劲酒虽好,不要贪杯哟';
echo
}
}
class erguotou {() {
public function adv'56度,闷倒驴';
echo
}
}// 在开发中,假设有两拨人,一是开发酒类广告词的,一类是广告的调用者.
// 作为调用者
// 只关心酒类,不关心酒的子类,调用酒类的广告方法
// 不关心子类如何实现的.
$owine = new wine();
$owine->adv('kouzi');
// 从开发广告词的角度看,不必理解外界调用子类.
// 开发新酒类广告词,只需要满足:和父类的方法一样,就有机会被外界所调用.
// 新增洋河
class yanghe {() {
public function adv'洋河大典!蓝色经典';
echo
}
}$owine->adv('yanghe');
?>
在php中,不支持重载,一个类中,根本就不可以定义多个同名方法——这直接是语法错误。
// 通过PHP的魔术方法,来模拟方法重载
// 当调用不存在的方法时,__call会被自动调用, 还会自动传给__call两个参数,
// 分别代表被调用的不存在的方法名和调用时传递的参数
class sharp {($m,$arg) {
public function __call$cnt = count($arg);
($cnt == 3) {
if// 计算3角形面积
$arg[0] + $arg[1] + $arg[2];
return ($cnt == 4) {
} else if$arg[0] * $arg[1] * $arg[2] * $arg[3];
return
} else {'未知类型';
return
}
}
}$sharp = new sharp();
$sharp->area(1,2,3,4); echo
<?php
// 单例第1步, 不允许类进行new操作.
// 单例模式第2步,在类内部开启一个接口,来实例化对象.
// 单例模式第3步,加判断,判断该类的实例是否已经存在.
class mysql {$rand;
public $ins = null;
public static
// 没有对象存在的时候,能调用此方法.
() {
public static function getIns(self::$ins) {
if$ins;
return self::
}$ins = new mysql();
self::$ins;
return self::
}() {
protected function __construct$this->rand = rand(10000,99999);
}
}
$m1 = mysql::getIns();
$m2 = mysql::getIns();
print_r($m1);
print_r($m2);