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

Php 如何从1个接口(类)使用不同的类,php,oop,Php,Oop,我有个问题 例如:我有类“Provider”和子类“Provider\u 1”、“Provider\u 2” “提供商”-“提供商1”和“提供商2”的经理 它现在的工作原理: 我在“Provider”、“Provider_1”和“Provider_2”类中有一个getFullInfo()方法 我想从提供者_1::getFullInfo()获取信息,但我的控制器必须通过“提供者”类工作 我确实请求:Provider::getFullInfo($Provider_id)和in Provider::g

我有个问题

例如:我有类“Provider”和子类“Provider\u 1”、“Provider\u 2”

“提供商”-“提供商1”和“提供商2”的经理

它现在的工作原理:

  • 我在“Provider”、“Provider_1”和“Provider_2”类中有一个getFullInfo()方法
  • 我想从提供者_1::getFullInfo()获取信息,但我的控制器必须通过“提供者”类工作 我确实请求:Provider::getFullInfo($Provider_id)和in Provider::getFullInfo使用switch..case构造路由

    我的问题:如何通过“提供者”发出请求而不切换..案例构造

    谢谢

  • 您正在重写子类中的父方法getFullInfo()
  • 如果要使用父方法,则必须使用父类(provider),或者使用子类(provider_1),从其方法内调用父方法

    函数getFullInfo(){parent::getFullInfo();…}

  • 这样,您可以使用子对象,但使用父方法


    我不确定我是否正确理解了您试图实现的目标。

    请举例说明我的评论。如您所见,如果您从同一接口/类扩展了所有接口/类,那么只要您知道
    super
    类型Foo的名称,就可以在不测试实际类型的情况下调用该方法

    <?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;
    }
    

    显示您的实际代码,您是否使用了
    指示的静态方法?类
    提供程序1
    提供程序2
    是否继承
    提供程序
    ?如果是这样的话,您可以调用
    getFullInfo
    ,而不必知道它是
    produver
    provider\u 1
    还是
    provider\u X
    @DarkBee,您可以使用链接到示例?@JuanMendes不需要它。我可以使用非静态类。您在询问有关代码的问题时,没有向我们展示您的代码。你不觉得这很傻吗?