0

我在 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
   }
}

非常感谢。

4

3 回答 3

2

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

如果您需要对 string/int 进行不同的实现,只需检查类型并在同一函数中提供实现即可。

于 2012-11-02T21:04:33.963 回答
0

创建一个函数,并根据该参数的类型,执行不同的操作或调用实际函数 func_int 和 funct_string。您实际上是在自己进行调度。

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

于 2012-11-02T16:39:57.323 回答
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 ) {

}
于 2012-11-02T16:41:52.963 回答