重写与重载:
重写:override
一般子类继承父类,同时样的方法时,调用子类复盖了父类的内容,这个过程叫重写。
重载:overload
没有例子。java的例子。
存在多个同名方法,但参数类型,个数不同,传不同的参数,调用不同的方法。
但在PHP中,不准存在多个同名方法,所以PHP不能重载!!!
不过PHP可以实现类似的调用 。
class canculator{
public function area(){
$args = func_get_args();
if(count($args) == 1){
return 3.14*$args[0]*$args[0];
}else if(count($args) == 2){
return $args[0]*$args[1];
}else if(count($args) == 3){
return $args[0]+$args[1]+$args[2];
}else{echo 'unknow';}
}
}
$a = new canculator();
echo $a->area(10);//314
echo '<br/>';
echo $a->area(3,4);//12
echo '<br/>';
echo $a->area(5,20,10);//35
魔术常量:
无法手动修改其值,所以叫常量,但值又是随环境变动的,所以叫魔术常量;
__FILE__, __CLASS__,__METHO__,__LINE__的使用方法;
变量的延期绑定:
注意作用重点。
class human{
public static function t1(){
echo 'this is father room';
}
public static function t2(){
self::t1();
}
public static function say(){
<strong><span style="color:#ff0000;">static</span></strong>::t1();//不是调用父类,而是调用子类的t1().
}
}
class stu extends human{
public static function t1(){
echo 'this is the son room';
}
}
stu::t2();//father room
stu::say();//son room
抽像类:
/*abstract:无法实例化
格式:类前加abstract; 方法前加abstract是抽像方法;
描述:仅仅是一个类里面有若干方法,但方法里是空的,实现不了;
1.抽像方法不能有方法体,所以要去掉大括号 。
2.抽像类不能通过new来实例化。
3.有抽像方法,此类一定是抽像类,抽像类内未必有抽像方法。
使用意义 :生成模板,规范方法;
*/
abstract class flying{
public abstract function engine();
public abstract function blance();
}
abstract class rocket extends flying{
public function engine(){
echo 'fire on ','<br/>';
}
}
class fly extends rocket {
public function engine(){
echo 'put it away','<br/>';
}
public function blance(){
echo 'tow fly keep blance','<br/>';
}
public function start(){
$this->engine();
for($i=0;$i<10;$i++){
$this->blance();
echo 'good flying','<br>';
}
}
}
$a = new fly();
$a->start();
如果抽像类里有方法且能调用,那么可以通过继承来调用 些方法。
29课:自动加载:
如果调用某个不存在的类,在报错之前,系统会传以参并调用__autoload函数,并把这个参数(类名)自动传给__autoload函数显示出来。
因此,我们可以在__autoload里加载需要的类。
digui.php文件内容如下:
class human{
public function say(){
echo 'hello world';
}
public function dc(){
echo 'this is terrible';
}
}
自动加载引入上面的文件,b.php文件内容如下:
function __autoload($c){
require('../0727/digui.php');
}
$a = new human();
$a->say(); //hello world
提示:如果函数里有类,类里有方法;只有函数调用 了,类里的方法才能调用 。