如何使用 1 个接口(类)中的不同类
How work with different classes from 1 interface (class)
我有一个问题。
例如:我有 class "Provider" 和子 classes "Provider_1", "Provider_2"。
"Provider" - "Provider_1" 和 "Provider_2" 的经理。
现在如何运作:
- 我在 "Provider"、"Provider_1" 和 "Provider_2" class 中有一个方法 getFullInfo()。
- 我想从 Provider_1::getFullInfo() 获取信息,但我的控制器必须通过 "Provider" class 工作。
我确实要求:Provider::getFullInfo($provider_id) 并在 Provider::getFullInfo 中使用 switch..case 结构进行路由。
我的问题:如何在没有 switch..case 构造的情况下通过 "Provider" 发出请求。
谢谢
- 您正在覆盖您子 classes 中的父方法 getFullInfo()。
如果您想使用父方法,您必须使用父方法 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;
}
我有一个问题。
例如:我有 class "Provider" 和子 classes "Provider_1", "Provider_2"。
"Provider" - "Provider_1" 和 "Provider_2" 的经理。
现在如何运作:
- 我在 "Provider"、"Provider_1" 和 "Provider_2" class 中有一个方法 getFullInfo()。
- 我想从 Provider_1::getFullInfo() 获取信息,但我的控制器必须通过 "Provider" class 工作。
我确实要求:Provider::getFullInfo($provider_id) 并在 Provider::getFullInfo 中使用 switch..case 结构进行路由。
我的问题:如何在没有 switch..case 构造的情况下通过 "Provider" 发出请求。
谢谢
- 您正在覆盖您子 classes 中的父方法 getFullInfo()。
如果您想使用父方法,您必须使用父方法 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;
}