如何在这个PHP代码中模仿C ++样式重载

时间:2012-11-02 16:34:59

标签: php oop polymorphism overloading

我在PHP中有一个静态函数:

public static function func( $foo, $bar ) {

}

其中$bar是一个整数。我想实现类似的func,但其中$bar是一个字符串。在C ++中我会使用重载,但PHP文档显示重载与C ++不同。还有其他方法可以实现我想要的吗?

我想到的一个替代方案是一些多态,但似乎有点矫枉过正?:

创建一个定义了func的接口(没有实现),只是以两种不同的方式实现它。所以:

interface Something {
   public static function func( $foo, $bar );
}

class Something1 implements Something {
   public static function func( $foo, $bar ) {
      // some implementation
   }
}

class Something2 implements Something {
   public static function func( $foo, $bar ) {
      // some other implementation
   }
}

非常感谢。

3 个答案:

答案 0 :(得分:2)

在C ++或任何其他静态类型语言意义上的重载没有意义 在PHP中,因为你不需要提出类型提示。这就是弱类型语言的本质 因此在php中使用此功能不会有任何好处。您可以将任何类型的任何变量传递给您的函数。在对象的情况下,您具有多态性,而无需使用继承/接口来实现多态行为。这叫做鸭子打字。

如果你需要不同的string / int实现,只需检查类型并在同一个函数中提供实现。

答案 1 :(得分:0)

创建一个函数,根据该参数的类型,执行不同的操作或调用实际函数func_int和funct_string。你自己有效地进行调度。

为了检查类型,有gettypeis_..函数。

答案 2 :(得分:0)

这样的事情可能有所帮助,你可以确定$ bar的类型,然后调用相应的函数。

public static function func( $foo, $bar ) {
   if (is_int($bar)) {
       self::funcBarInteger($foo, $bar);
   } else {
       self::funcBarString($foo, $bar);
   }
}

public static function funcBarInteger( $foo, $bar ) {

}

public static function funcBarString( $foo, $bar ) {

}