用于可选功能的PHP子类

时间:2015-01-20 04:26:17

标签: php class plugins module inner-classes

我们公司最近已经接受了一些软件的封闭测试会议,我已经开始使用正在开发的API,并开始开发一个包装类供我们在我们自己的系统中使用。

基类建立与API的连接,发送JSON请求并处理所有核心功能。然而,系统在插件/模块上运行,在加载时添加额外的功能。

PHP是否支持适用于此方案的子类?在初始化时将基类的实例作为参数传递给“子类”并将其用于发送请求是否最佳?

伪代码:

<?php

class PluginClass
{
    private base = null;

    public function __construct($base_system)
    {
        if (isset($base_system))
        {
            $this->base = $base_system;
        }

        $this->base->sendRequest("someData");
    }
}

class BaseClass
{
    public function __construct($host = 'localhost', $port = '8080', $user = 'admin', $pass = '')
    {
        if(!empty($host) && !empty($port) && !empty($user) && !empty($pass))
        {
            $this->login($host, $port, $user, $pass);
        }
    }

    public function sendRequest($data)
    {
        // Send JSON Request Data
    }
}

?>

1 个答案:

答案 0 :(得分:0)

是的,这是完全正常的情况 我不会将此subclass称为不要将此与通过extend机制扩展父类的子类混淆。

你所描述的我几乎每天都在使用 比方说,给一个数组来操作的类。
或者给予数据库连接以进行操作的另一个类。

例如,

$object_screwer = new ObjectScrewer( $some_object ); 
$object_screwer->screw_it(); 

...它轮流调用$this->object->some_method()例如

有些人也错误地将其称为strategy模式 这不是它的定义,但它看起来非常相似。

<小时/> 需要明确的是,strategy模式将是:

$P = new Payment( new PayPal('username','password') );
$P->pay(10.00);

strategy模式中,我们为初始对象提供了一些参数:不仅是属性,还定义了其行为的策略。在这种情况下,我创建了一个付款对象,并为付款处理提供了一个PayPal插件对象。

祝你好运!