Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可选功能的PHP子类_Php_Class_Plugins_Module_Inner Classes - Fatal编程技术网

可选功能的PHP子类

可选功能的PHP子类,php,class,plugins,module,inner-classes,Php,Class,Plugins,Module,Inner Classes,最近,我们公司接受了一些软件的封闭式测试,在那里,我接受了正在开发的API,并开始开发一个包装类,供我们在自己的系统中使用 基类建立到API的连接,发送JSON请求并处理所有核心功能。然而,系统在加载时添加额外功能的插件/模块上运行 PHP是否支持适用于此场景的子类?在初始化“子类”并将其用于发送请求时,最好将基类的实例作为参数传递给它们 伪代码: <?php class PluginClass { private base = null; public functio

最近,我们公司接受了一些软件的封闭式测试,在那里,我接受了正在开发的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
    }
}

?>

是的,这是一个非常正常的情况。
我不会将其称为
子类
,但为了避免将其与通过
extend
机制扩展父类的子类混淆

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

比如说,

$object_screwer = new ObjectScrewer( $some_object ); 
$object_screwer->screw_it(); 
…例如,它依次调用
$this->object->some_method()

一些人还错误地称之为
策略
模式。
根据它的定义,它不是那样的,但它看起来非常相似。
需要明确的是,
策略
模式应该是:

$P = new Payment( new PayPal('username','password') );
$P->pay(10.00);
strategy
模式中,我们给初始对象一些参数:不仅是属性,而且定义其行为的策略。在本例中,我创建了一个支付对象,并为其提供了一个用于支付处理的PayPal插件对象


祝你好运

您的子类没有继承
基类
。感谢您的反馈!因此,与其使用继承/扩展“master”类,只需将实例传递给“plugin”类并从中调用request()方法不会导致任何问题?在我看来,它可以通过我的伪代码工作,但我必须将它提交给另一个开发人员审查,为什么我要确保它是正确的:)没有任何问题。这是一个正常的类使用/模式。例如,
$object\u screer=newobjectscreer($object)$对象_螺丝刀->螺钉()
然后调用
$this->object->some_method()
,例如