理论 - 我们可以认为可调用的PHP是可运行的吗?

时间:2015-01-09 12:37:44

标签: php runnable callable

来自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接口,但是有一个可调用类型提示代表闭包,函数和方法,我们理论上可以认为它是可运行的,因为它也代表可执行代码吗?

感谢您的关注。

3 个答案:

答案 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);

}

当然,对于强类型语言,这没有多大意义。