来自Java世界,Runnable功能接口用于表示一段可运行(可执行)代码。
然而,在PHP中,可调用类型提示http://php.net/manual/it/language.types.callable.php可用于键入提示 匿名函数(闭包),一个函数名称(以字符串形式给出),一个静态类或实例的方法(以数组形式给出(" Class",& #34; staticMethod")或数组($ instance,' instanceMethod'))。
当然,Java的Runnable不能返回值(它的run()
方法签名有void
作为返回类型),但是在PHP闭包,函数或方法实际上是"运行","执行",如何调用它,我们可以断言我们可以考虑Java Runnable(尽管有返回值和内部实现,实际上它是如何实现的)执行)PHP可调用吗?
P.S:Java还有一个Callable接口http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html,其文档说明:
Callable接口类似于Runnable,两者都是 设计用于其实例可能由其执行的类 另一个线程。但是,Runnable不会返回结果 不能抛出一个检查过的异常。
因此,如果重复游览,Runnable类似于Java中的Callable,因为它们都代表可运行代码,在PHP中没有Runnable或Callable接口,但是有一个可调用类型提示代表闭包,函数和方法,我们理论上可以认为它是可运行的,因为它也代表可执行代码吗?
感谢您的关注。
答案 0 :(得分:1)
我的理解是,callable表示php解释为方法调用的某种形式的数据。它并不意味着一个可调用的具有立即可执行的代码,java就是这样。
然后,PHP将获取它拥有的参数并运行并查找代码并执行它。我认为这是最大的区别。有时会立即执行可执行代码,有时候必须查找代码所在的位置" \ someclass :: somestaticmethod"
我的想法。
答案 1 :(得分:1)
PHP的可调用与反射中的Java Method
类更相似。您可以使用参数调用可调用的call_user_func()
和invoke()
Method
对象。从两者返回值。最重要的是,Runnable
不同,它设计为在同一个线程中运行。
请记住,Runnable
实施类是普通的POJO,对它没什么特别之处。该接口只能传递给Thread
构造函数。
答案 2 :(得分:1)
Java Runnable
是一个纯接口,可以与某些类合作,包括Thread
。
PHP callable
是类型提示的伪类型。这是一个魔术"合同,确保将参数变量作为函数调用是安全的。
如果您想使用OOP界面,请使用Closure
。有些框架也使用Closure
而不是callable
。
例如,请参阅Laravel Routing。
此外,Runnable
只能在没有参数的情况下调用,而callable
参数可以是包含任意数量参数的任何仿函数。 Java更严格,但您可以定义一个或多或少的通用可调用类型:
public interface Callable {
public Object call(Object... parameters);
}
当然,对于强类型语言,这没有多大意义。