从 PHP 中的父 class 访问扩展 class

Access extended class from parent class in PHP

我有两个 classes,class A 和 class B,我试图通过 class A 中的函数访问 class B .

目前我可以通过在 class A 中的函数内部创建一个 class B 的新实例来做到这一点,但我想知道是否有办法做到这一点这没有在 class A.

中创建 class B 的新实例

这是我想做的一个例子:

class a{

    function a(){
        return $this->b();
    }


}

class b extends a{

    function b(){
        return "It Works!";
    }

}

$doIt = new a();
echo $doIt->a();

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

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();

来自您的评论:

Basically i have class B that works with the database, and class A that connects the users actions on the site to class B. So user does something->class A starts working->Passes info on to class B to add to the database. It did seem that this is not all that possible, but i know there are people with a lot more knowledge than I have so i wanted to see if anyone else knew of some way to do this.

如您所述:B 使用数据库,A 执行操作(由用户请求)。 B 听起来像是某种 mapper/data 访问对象,而 A 听起来像是一种服务(我将参考 BMapperAService 以更加慎重) .

您所概述的内容表明您没有正确使用 PHP 继承。继承表示 "is a" 关系。 (ImageMediaPathMoverAnimator,等等...)。虽然@Malcolm 的回答在技术上可行,但不适合您的情况。

在 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();

你可以看到我们已经在它的构造函数中定义了我们依赖的 class 的依赖,要满足 whoever/whatever 正在使用 class.