在PHP父类访问扩展分类

问题描述 投票:-1回答:2

我有两个类,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();
php class oop extend
2个回答
2
投票

从您的评论:

基本上我有B类与数据库的作品,并在网站上的用户操作连接到B级A级那么用户就something->类A开始working->传递到B类信息添加到数据库中。它似乎,这是不是所有的可能,但我知道有些人有很多更多的知识比我有,所以我想看看别人知道的一些方法来做到这一点。

当你形容:B工作与数据库,A执行操作(按用户要求)。 B听起来像是某种映射/数据访问对象,而A听起来像一个服务(我将把BMapperAService更深思熟虑)。

什么你列出你没有正确使用PHP继承表示。继承表示“是”关系。 (ImageMediaPathMoverAnimator,等...)。虽然@马尔科姆的回答技术上的作品,它不是为您的方案。

在OOP中,我们会说,BMapperAService的依赖。因此,每当我们呼吁在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();

你可以看到,我们在它的构造函数定义了我们依赖的类的依赖,是通过谁/什么是使用该类满意。


2
投票

你不能。但是,你可以期待一个抽象方法。

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();
© www.soinside.com 2019 - 2024. All rights reserved.