PHP Sub-Classes 可选功能
PHP Sub-Classes for optional functionality
我们公司最近已经接受了一些软件的封闭测试session,我拿走了正在开发的 API 并开始为我们开发包装器 class在我们自己的系统中使用。
基础 class 建立与 API 的连接,发送 JSON 请求并处理所有核心功能。然而,系统在 plugins/modules 上运行,在加载时会添加额外的功能。
PHP 是否支持适用于这种情况的 sub-classes?将基 class 的实例作为参数传递给 "sub-classes" 初始化并使用它发送请求是否最好?
伪代码:
<?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
}
}
?>
是的,这是一个完全正常的场景。
我不会将其称为 subclass
,以免将其与通过 extend
机制扩展父 class 的子 class 混淆。
你描述的我几乎每天都在用
比如说,一个 class 被赋予一个数组来操作。
或者另一个 class 被赋予了要操作的数据库连接。
例如,
$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 插件对象。
祝你编码顺利!
我们公司最近已经接受了一些软件的封闭测试session,我拿走了正在开发的 API 并开始为我们开发包装器 class在我们自己的系统中使用。
基础 class 建立与 API 的连接,发送 JSON 请求并处理所有核心功能。然而,系统在 plugins/modules 上运行,在加载时会添加额外的功能。
PHP 是否支持适用于这种情况的 sub-classes?将基 class 的实例作为参数传递给 "sub-classes" 初始化并使用它发送请求是否最好?
伪代码:
<?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
}
}
?>
是的,这是一个完全正常的场景。
我不会将其称为 subclass
,以免将其与通过 extend
机制扩展父 class 的子 class 混淆。
你描述的我几乎每天都在用
比如说,一个 class 被赋予一个数组来操作。
或者另一个 class 被赋予了要操作的数据库连接。
例如,
$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 插件对象。
祝你编码顺利!