Цитируя PHP:
В настоящее время анонимные функции реализуются с использованием класса Closure .Это деталь реализации, и на нее не следует полагаться.
Теперь, при этом, следующие проверки считаются ненадежными:
function myFunction(Closure $callback){}
if(!($callback instanceof Closure)){}
, что приводит нас к использованию is_callable()
,Это нормально, однако, если для одного требуется истинное " замыкание ", ( в качестве аргумента или что-то такое ), тогда is_callable()
не является строгимдовольно.Следующие, конечно, дампы bool(true)
для каждого:
function myFunction(){}
class MyClass{
public function __invoke(){}
}
var_dump(is_callable('myFunction'));
var_dump(is_callable(new MyClass));
Как, не полагаясь на класс Closure
( дано , на самом деле ненадежно )Можно ли строго идентифицировать « замыкание »?
Обновление
Мне пришло в голову, что я падаю в сторону плохого дизайна.Однако, несмотря на ответ на этот вопрос, я думаю, было бы полезно, если бы кто-то мог предложить ответы на поставленный вопрос, если не только для академического элемента этого.
Обновление ( снова )
С момента выпуска PHP 5.4 ( некоторое время назад ) тип Closure
больше не является «деталью реализации», и на него можно положиться.function f(Closure $g) { }
все хорошо.