我有一个叫做adminItems内部的课程adminitems.class.php.我想包括这个类的功能之一xmlParser::someName()内xmlParser.class.php.
像这样:
require_once("adminitems.class.php");
$obj = new adminitems();
class xmlParser
{
function someName()
{
$obj->addAds(); // addAds is within adminItems object
}
}
`
Run Code Online (Sandbox Code Playgroud)
这是一种正确的做法吗?
不要仅仅使用extends来获得额外的功能.这是一个代码味道,并暗示
xmlParser是-AadminItems,它显然不是.此外,您将来不能再次扩展,因为PHP没有多重继承.像这个例子所示,选择继承的组合.
使用依赖注入.反转对象的控制,使它们不相互依赖:请参阅控制反转.
class xmlParser
{
/**
* @var adminItems
*/
protected $adminItems;
/**
* @constructor
*
* @param adminItems $adminItems
*/
public function __construct(adminItems $adminItems)
{
$this->adminItems = $adminItems;
}
/**
* Whatever this does...
*/
function someName()
{
$this->adminItems->addAds();
}
}
`
Run Code Online (Sandbox Code Playgroud)
您需要在创建的类外部将它们连接在一起.你adminItems 进入了xmlParser,然后根据你的需要使用它.这称为依赖注入,你可以在所有面向对象的语言中做,而不仅仅是php.
您将使用上面的对象API,如下所示:
$adminItems = new adminItems;
$xmlParser = new xmlParser($adminItems);
$xmlParser->somName();
Run Code Online (Sandbox Code Playgroud)
真的很简单.您的对象(将它们视为可重用的库)不应该依赖于除构造函数或方法注入之外的其他对象 - 因此您可以将它们替换为导致可测试且固有的干净代码.
另外,我建议您查看以下有用链接:
XmlParser而不是xmlParser您的班级名称