2011-08-26 60 views
7

我一直在尋找不同的語言來開始。我發現Ruby中的method_missing非常有趣,但無法在Java和PHP中找到相同的東西。 在Java或PHP中是否有類似method_missing的東西?Java或PHP中缺少的方法

+0

長時間使用ruby並返回Java之後,我感覺回到了20世紀。 – texasbruce

回答

8

PHP有__call($name, array $args)。這是一種處理您調用未針對實例定義的方法的情況。

在PHP> = 5.3中,也有__callStatic($name, array $args),它的功能在類級別(duh)上基本相同。

class MyClass 
{ 
    public function __call($name, array $args) 
    { 
     echo "You tried to call $name(".implode(',',$args)."). Silly user."; 
    } 
} 

$k = new MyClass(); 
$k->doSomething(1,2,3); // You tried to call doSomething(1,2,3). Silly user. 

Java中的等價物是有點更麻煩,它涉及到的東西叫做Proxy類。一個教程可以找到here - 這裏的例子有點兒總結。

1

在Java中,您可能可以通過界面,Proxy和反射進行操作。

+0

缺少方法不是檢查方法是否存在。 – xdazz

+0

有一個respond_to?(:method_name)用於檢查Ruby中的對象是否存在方法。 –

1

在PHP中,您可以使用魔術方法__call()