我有两个类,A类和B类,我试图通过在A类函数访问B类
此刻,我能够在A类的函数内创建类B的一个新实例要做到这一点,但我想知道是否有办法做到这一点没有A级的内部创建B类的新实例。
这里是什么,我想这样做的例子:
class a{
function a(){
return $this->b();
}
}
class b extends a{
function b(){
return "It Works!";
}
}
$doIt = new a();
echo $doIt->a();
从您的评论:
基本上我有B类与数据库的作品,并在网站上的用户操作连接到B级A级那么用户就something->类A开始working->传递到B类信息添加到数据库中。它似乎,这是不是所有的可能,但我知道有些人有很多更多的知识比我有,所以我想看看别人知道的一些方法来做到这一点。
当你形容:B
工作与数据库,A
执行操作(按用户要求)。 B
听起来像是某种映射/数据访问对象,而A
听起来像一个服务(我将把BMapper
和AService
更深思熟虑)。
什么你列出你没有正确使用PHP继承表示。继承表示“是”关系。 (Image
是Media
,PathMover
是Animator
,等...)。虽然@马尔科姆的回答技术上的作品,它不是为您的方案。
在OOP中,我们会说,BMapper
是AService
的依赖。因此,每当我们呼吁在AService
的方法,我们希望它依赖于BMapper
的一个实例。这种关系是通过依赖注入通常满足(见:What is dependency injection?)。
<?php
class AService {
private $bMapper;
public function __construct(BMapper $bMapper)
{
$this->bMapper = $bMapper;
}
public function doAction()
{
return $this->bMapper->performSomethingInDatabase();
}
}
class BMapper {
public function performSomethingInDatabase()
{
/**
* ..whatever
*/
}
}
$service = new AService(new BMapper);
$service->doAction();
你可以看到,我们在它的构造函数定义了我们依赖的类的依赖,是通过谁/什么是使用该类满意。
你不能。但是,你可以期待一个抽象方法。
abstract class a {
function a() {
return $this->b(); // OK
}
abstract function b(); // Has no method body. Classes extending this class will implement it
}
class b extends a {
function b() {
return 'something';
}
}
$doIt = new b(); // Cannot instantiate abstract class a
echo $doIt->a();