如何使用 1 个接口(类)中的不同类

How work with different classes from 1 interface (class)

我有一个问题。

例如:我有 class "Provider" 和子 classes "Provider_1", "Provider_2"。

"Provider" - "Provider_1" 和 "Provider_2" 的经理。

现在如何运作:

  1. 我在 "Provider"、"Provider_1" 和 "Provider_2" class 中有一个方法 getFullInfo()。
  2. 我想从 Provider_1::getFullInfo() 获取信息,但我的控制器必须通过 "Provider" class 工作。

我确实要求:Provider::getFullInfo($provider_id) 并在 Provider::getFullInfo 中使用 switch..case 结构进行路由。

我的问题:如何在没有 switch..case 构造的情况下通过 "Provider" 发出请求。

谢谢

  1. 您正在覆盖您子 classes 中的父方法 getFullInfo()。
  2. 如果您想使用父方法,您必须使用父方法 class(提供者),或者使用子方法 class (provider_1) , 从其方法中调用父方法

    function getFullInfo() {parent::getFullInfo(); ...}

这样您就可以使用子对象但使用父方法。

虽然我不确定我是否正确理解了您要完成的任务。

阐述我的评论的示例。如您所见,如果您从同一个 interface/class 扩展所有内容,只要您知道它的 super 类型 Foo,您就可以调用该方法而无需测试实际类型,在本例中为 [=12] =]

<?php

class Foo {
    protected $name;

    public function __construct($n) {
        $this->name = $n;
    }

    public function getName() {
        return $this->name;
    }
}

class Bar extends Foo {

}

class FooBar extends Foo {
    public function getName() {
        return strtoupper($this->name);
    }
}

function sayName(Foo $f) {
    return 'Hello '. $f->getName();
}

$instances = array(
    new Foo('Foo'),
    new Bar('Bar'),
    new FooBar('FooBar'),
);

foreach($instances as $instance) {
    echo sayName($instance).'<br />'.PHP_EOL;
}