Теория. Можем ли мы считать вызываемый PHP работоспособным?

Исходя из мира 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, но есть подсказка вызываемого типа, которая представляет замыкания, функции и методы, можем ли мы теоретически рассмотреть это запускаемый, так как он представляет исполняемый код тоже?

Спасибо за внимание.

0

Решение

Насколько я понимаю, вызываемый объект представляет собой некоторую форму данных, которую php интерпретирует как вызов метода. Это не означает, что вызываемый объект имеет сразу исполняемый код, как в Java.

Затем PHP примет, какие параметры он имеет, и отправит, НАЙДЕТ код и выполнит его. Я думаю, что это самая большая разница. Иногда есть непосредственно исполняемый код, иногда он должен искать, где код «\ someclass :: somestaticmethod»

Мои мысли.

1

Другие решения

Вызываемый PHP больше похож на Java Method класс в отражении. Ты можешь позвонить call_user_func() по требованию, и invoke() Method объект, оба с параметрами. Значение возвращается из обоих. И самое главное, где Runnable отличается, он предназначен для запуска в одном потоке.

Помни что Runnable Класс реализации — это простой POJO, в этом нет особого смысла. Интерфейс позволяет только перейти на Thread конструктор.

1

в Java Runnable это чистый интерфейс, который может взаимодействовать с некоторыми классами, включая Thread,

РНР callable является псевдотипом для подсказок типа. Это «магический» контракт, который гарантирует, что можно безопасно вызывать переменную параметра как функцию.

Если вы хотите использовать интерфейс ООП, то используйте Closure, Некоторые фреймворки также используют Closure вместо callable,

Например, см. Laravel Routing.

Кроме того, основное отличие в том, что Runnable может быть вызван только без параметров, в то время как callable Параметр может быть любым функтором с любым количеством параметров. Java более строг, но вы можете определить более или менее универсальный вызываемый тип:

public interface Callable {

public Object call(Object... parameters);

}

Конечно, в случае строго типизированного языка это не имеет особого смысла.

1