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

服务器君一共花费了334.970 ms进行了6次数据库查询,努力地为您提供了提供了这个页面。

上一节介绍了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接口实现:

<?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 "<br />";
echo "MAX_WEIGHT is " . Apple::MAX_WEIGHT;   //静态常量
?>

// 程序输出
// 创建了一个苹果
// MAX_WEIGHT is 5

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

<?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 "<br />";
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 '好吃';
    }
}

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

<?php
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());
?>

Creative Commons License

本文仅供自己学习与收藏之用,请勿转载,请勿用作其它用途(如商业目的等)。 原文链接:http://www.nowamagic.net/librarys/posts/php/36