1. 类继承的三大功能: 继承,重写,扩展
继承: 父类的二类成员自动成为子类的成员
重写: 覆写与父类/基类同名的成员(属性, 方法)
扩展: 子类添加自身的方法来增加/扩展父类的功能
<?php
class Ren
{
public $name;
public $sex;
public $yuyan;
function Say()
{
echo $this->name."正在讲话!";
}
}
//美国人的子类
class America extends Ren
{
public $ziben;
//子类对父类的方法重写
function Say()
{
parent::Say(); //调用父类的Say()方法
echo "hello !";
}
}
//中国人的子类
class China extends Ren
{
public $shehui;
public $wumai;
//对父类方法重写
function Say()
{
echo "你好!";
}
}
$c = new China();
$c->Say();
?>
结果:你好
2. 抽象类的作用与实现
<?php
abstract class ren {
public abstract function getUserInfo ();
public abstract function getWalletInfo ();
}
class xuesheng extends ren {
public function getUserInfo () {
echo 'getinfo';
}
public function getWalletInfo () {
echo 'getwalletInfo';
}
}
$Tom = new xuesheng ();
$Tom -> getUserInfo();
$Tom -> getWalletInfo ();
?>
结果:getinfogetwalletInfo
3. 接口的基本语法
<?php
// 声明一个'iTemplate'接口
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
class Template implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
?>
总结:
1.继承并不改变类的结构。而是表名了两个类之间存在着某种关系,使得其中的成员看起来像是在别的类中存在。
2.定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。(抽象类可以没有抽象方法,但是抽象类依然不能被实例化)被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
3.接口(interface)是一种类似于类的结构,可用于声明实现类所必须声明的方法,例如接口通常用来声明api,而不是用来定义如何实现这个api。