php接口三结构,用接口来改善PHP的代码结构

上一节介绍了PHP的接口,这里来看看如何更好地使用这个OOP特性。

interface Fruit

{

const MAX_WEIGHT = 5; //此处不用声明,就是一个静态常量

function setName($name);

static function getName() {

}

}

class Apple implements Fruit

{

}

通过implements来实现一个接口时,只需要写出抽象方法,不需要给出具体实现,否则将会如下报错:

Fatal error: Interface function User::getName() cannot contain body。

看一下正确的php接口实现:

interface Fruit

{

const MAX_WEIGHT = 5; //此处不用声明,就是一个静态常量

function setName($name);

function getName();

}

//实现接口

class Apple implements Fruit

{

private $name;

function getName() {

return $this->name;

}

function setName($_name) {

$this->name = $_name;

}

}

$apple = new Apple(); //创建对象

$apple->setName("苹果");

echo "创建了一个" . $apple->getName();

echo "
";

echo "MAX_WEIGHT is " . Apple::MAX_WEIGHT; //静态常量

?>

// 程序输出

// 创建了一个苹果

// MAX_WEIGHT is 5

PHP还可以实现多个接口,一个类可以实现多个接口。只要使用 , 将多个接口链接起来就可以。

interface Fruit

{

const MAX_WEIGHT = 5; //此处不用声明,就是一个静态常量

function setName($name);

function getName();

}

interface Food

{

function dilicious();

}

//实现接口

class Apple implements Fruit, Food

{

private $name;

function getName() {

return $this->name;

}

function setName($_name) {

$this->name = $_name;

}

function dilicious() {

echo '好吃';

}

}

$apple = new Apple(); //创建对象

$apple->setName("苹果");

echo "创建了一个" . $apple->getName();

echo $apple->dilicious();

echo "
";

echo "MAX_WEIGHT is " . Apple::MAX_WEIGHT; //静态常量

?>

PHP还可以继承并实现接口:

interface Fruit

{

const MAX_WEIGHT = 5; //此处不用声明,就是一个静态常量

function setName($name);

function getName();

}

interface Food

{

function dilicious();

}

class FoodObjects

{

}

//实现接口

class Apple extends FoodObjects implements Fruit, Food

{

private $name;

function getName() {

return $this->name;

}

function setName($_name) {

$this->name = $_name;

}

function dilicious() {

echo '好吃';

}

}

当我们明白了接口以及工厂的意义时,可以写一下下面的代码,一个数据库操作为例子:

interface PersonProvider

{

public function getPerson($givenName, $familyName);

}

class DBPersonProvider implements PersonProvider

{

public function getPerson($givenName, $familyName)

{

/* pretend to go to the database, get the person... */

$person = new Person();

$person->setPrefix("Mr.");

$person->setGivenName("John");

return $person;

}

}

class PersonProviderFactory

{

public static function createProvider($type)

{

if ($type == 'database')

{

return new DBPersonProvider();

} else {

return new NullProvider();

}

}

}

$config = 'database';

/* I need to get person data... */

$provider = PersonProviderFactory::createProvider($config);

$person = $provider->getPerson("John", "Doe");

echo($person->getPrefix());

echo($person->getGivenName());

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值