我在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
}
}
非常感谢。
答案 0 :(得分:2)
在C ++或任何其他静态类型语言意义上的重载没有意义 在PHP中,因为你不需要提出类型提示。这就是弱类型语言的本质 因此在php中使用此功能不会有任何好处。您可以将任何类型的任何变量传递给您的函数。在对象的情况下,您具有多态性,而无需使用继承/接口来实现多态行为。这叫做鸭子打字。
如果你需要不同的string / int实现,只需检查类型并在同一个函数中提供实现。
答案 1 :(得分:0)
创建一个函数,根据该参数的类型,执行不同的操作或调用实际函数func_int和funct_string。你自己有效地进行调度。
为了检查类型,有gettype和is_..
函数。
答案 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 ) {
}