PHPにおけるタイプヒンティングでのClosureとcallableの違い

by @dekokun on 2014/07/25 00:26

Tagged as: PHP, タイプヒンティング.

概要

Closureとcallable、どちらも無名関数に使えるタイプヒンティングなのですが、callableは無名関数以外でも関数名とかでもいけるけどClosureはそういうのいけないよという話。

@do_aki氏に感謝

詳細

<?php

function callableTest(callable $func) {
}
function closureTest(\Closure $func) {
}

callableTest('printf'); // 問題なし
closureTest('printf'); // PHP Catchable fatal error:  Argument 1 passed to closureTest() must be an instance of Closure, string given

class Hoge {
  public function hoge() {
  }
}

$hoge = new Hoge();

callableTest([$hoge, 'hoge']); // 問題なし
closureTest([$hoge, 'hoge']); // PHP Catchable fatal error:  Argument 1 passed to closureTest() must be an instance of Closure, string given

callableTest(function() {}); // 問題なし
closureTest(function() {}); // 問題なし

あとがき

@do_akiさんありがとう

Twitterさんありがとう

comments powered by Disqus