上一节介绍了 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());
?>
猜你喜欢:
暂无回复。