Исходя из мира Java, функциональный интерфейс Runnable используется для представления части исполняемого (исполняемого) кода.
В PHP, однако, есть подлежащий выкупу подсказка типа http://php.net/manual/it/language.types.callable.php который может быть использован для подсказка типа анонимная функция (закрытие), имя функции (задается в виде строки), метод статического класса или экземпляра (заданный в виде массива («Class», «staticMethod») или массива ($ instance, instanceMethod ‘)).
Конечно, Java Runnable не может возвращать значения (это run()
подпись метода имеет void
как возвращаемый тип), но, как и в замыканиях PHP, функции или методы на самом деле «запускаются», «выполняются», называйте это как хотите, можем ли мы утверждать, что можем рассматривать Java Runnable (несмотря на возвращаемое значение и внутреннюю реализацию, как на самом деле это выполняется) PHP вызываемый?
П.С .: У Java также есть вызываемый интерфейс, http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html, и его документация гласит:
Интерфейс Callable похож на Runnable в том, что оба
предназначен для классов, чьи экземпляры потенциально выполняются
другая нить. Runnable, однако, не возвращает результат и
не может сгенерировать проверенное исключение.
Так что если повторить тур, Runnable похож на Callable в Java, так как они оба представляют выполняемый код, в PHP нет интерфейса Runnable или Callable, но есть подсказка вызываемого типа, которая представляет замыкания, функции и методы, можем ли мы теоретически рассмотреть это запускаемый, так как он представляет исполняемый код тоже?
Спасибо за внимание.
Насколько я понимаю, вызываемый объект представляет собой некоторую форму данных, которую php интерпретирует как вызов метода. Это не означает, что вызываемый объект имеет сразу исполняемый код, как в Java.
Затем PHP примет, какие параметры он имеет, и отправит, НАЙДЕТ код и выполнит его. Я думаю, что это самая большая разница. Иногда есть непосредственно исполняемый код, иногда он должен искать, где код «\ someclass :: somestaticmethod»
Мои мысли.
Вызываемый PHP больше похож на Java Method
класс в отражении. Ты можешь позвонить call_user_func()
по требованию, и invoke()
Method
объект, оба с параметрами. Значение возвращается из обоих. И самое главное, где Runnable
отличается, он предназначен для запуска в одном потоке.
Помни что Runnable
Класс реализации — это простой POJO, в этом нет особого смысла. Интерфейс позволяет только перейти на Thread
конструктор.
в Java Runnable
это чистый интерфейс, который может взаимодействовать с некоторыми классами, включая Thread
,
РНР callable
является псевдотипом для подсказок типа. Это «магический» контракт, который гарантирует, что можно безопасно вызывать переменную параметра как функцию.
Если вы хотите использовать интерфейс ООП, то используйте Closure
, Некоторые фреймворки также используют Closure
вместо callable
,
Например, см. Laravel Routing.
Кроме того, основное отличие в том, что Runnable
может быть вызван только без параметров, в то время как callable
Параметр может быть любым функтором с любым количеством параметров. Java более строг, но вы можете определить более или менее универсальный вызываемый тип:
public interface Callable {
public Object call(Object... parameters);
}
Конечно, в случае строго типизированного языка это не имеет особого смысла.