使用自定义对象创建接口函数
Create interface function with custom object
是否有机会在PHP中创建一个接口函数,其中参数要求是一个对象,但没有指定,它必须是什么对象?
现在我的代码如下所示:
interface Container {
public static function add(\Employee $element);
}
现在我可以用一个参数来实现这个函数,这需要一个来自"Employee"的实例。当我现在在 class 中实现它时,它看起来像这样:
class EmployeeContainer implements Container {
public static function add(\Employee $element) {
$pnr = $element->getPNR();
}
}
当我创建另一个 class,实现 Container 并将所需的对象设置为 Trainee 时,PHP 编译器抛出错误:
class TraineeContainer implements Container {
public static function add(\Trainee $element) {
$pnr = $element->getPNR();
}
}
Fatal error: Declaration of TraineeContainer::add($element) must be
compatible with Container::add(Employee $element)
有没有办法在界面中将所需对象设置为自定义对象?
我为什么要这个?
许多 IDE 支持这种形式的实例描述以建议基于对象的方法。
不幸的是没有。唯一的方法是检查方法中的参数类型:
public static function add($element) {
if(!$element instanceof \Trainee) {
throw new \InvalidArgumentException("your exception message");
}
$pnr = $element->getPNR();
}
自定义 object 参数在接口中是不可能的,但你可以通过其他方式实现它。
建立共同基础class
class SomeBaseClass{
}
扩展你的 classes
class Employee extends SomeBaseClass{
}
class Trainee extends SomeBaseClass{
}
然后在您的界面中使用 SomeBaseClass
作为参数
interface Container {
public static function add(SomeBaseClass $element);
}
class EmployeeContainer implements Container {
public static function add(SomeBaseClass $element) {
$pnr = $element->getPNR();
}
}
class TraineeContainer implements Container {
public static function add(SomeBaseClass $element) {
$pnr = $element->getPNR();
}
}
您似乎有 getPNR
通用函数,因此您可以创建一个抽象 class 或接口并在您的 child classes 中使用它。
是否有机会在PHP中创建一个接口函数,其中参数要求是一个对象,但没有指定,它必须是什么对象?
现在我的代码如下所示:
interface Container {
public static function add(\Employee $element);
}
现在我可以用一个参数来实现这个函数,这需要一个来自"Employee"的实例。当我现在在 class 中实现它时,它看起来像这样:
class EmployeeContainer implements Container {
public static function add(\Employee $element) {
$pnr = $element->getPNR();
}
}
当我创建另一个 class,实现 Container 并将所需的对象设置为 Trainee 时,PHP 编译器抛出错误:
class TraineeContainer implements Container {
public static function add(\Trainee $element) {
$pnr = $element->getPNR();
}
}
Fatal error: Declaration of TraineeContainer::add($element) must be compatible with Container::add(Employee $element)
有没有办法在界面中将所需对象设置为自定义对象?
我为什么要这个?
许多 IDE 支持这种形式的实例描述以建议基于对象的方法。
不幸的是没有。唯一的方法是检查方法中的参数类型:
public static function add($element) {
if(!$element instanceof \Trainee) {
throw new \InvalidArgumentException("your exception message");
}
$pnr = $element->getPNR();
}
自定义 object 参数在接口中是不可能的,但你可以通过其他方式实现它。
建立共同基础class
class SomeBaseClass{
}
扩展你的 classes
class Employee extends SomeBaseClass{
}
class Trainee extends SomeBaseClass{
}
然后在您的界面中使用 SomeBaseClass
作为参数
interface Container {
public static function add(SomeBaseClass $element);
}
class EmployeeContainer implements Container {
public static function add(SomeBaseClass $element) {
$pnr = $element->getPNR();
}
}
class TraineeContainer implements Container {
public static function add(SomeBaseClass $element) {
$pnr = $element->getPNR();
}
}
您似乎有 getPNR
通用函数,因此您可以创建一个抽象 class 或接口并在您的 child classes 中使用它。