メソッドは実装する場所が異なるだけで、関数の一種、という少し乱暴な考えでいるのですが、PHPではどのように扱われるのか、少し調べてみました。
仮説:
- メソッド:クラスの中で定義された関数
- 関数:クラスの外で定義された関数
今回は、PHPの定義済みの定数の動きを確認してみます。
http://php.net/manual/ja/language.constants.predefined.php
__METHOD__
クラスのメソッド名。
__FUNCTION__
関数名。
他に、メソッドと関数を、と言うモノを明確に区別する様なモノがPHPには見当たらなかったので…他に良い指標があれば教えて下さい!
では、実際どう出力されるのか?まずは結論から。
__FUNCTION__
常に関数名を返す。
__METHOD__
**クラスのメソッド内で利用すると、「クラス::関数名」**を返す。
関数内で利用した時は、__FUNCTION__
と同じく、関数名を返す。
__FUNCTION__
をメソッド内で、__METHOD__
を関数内で、あべこべに呼び出したらエラーになったりしないか気になっていたのですが、無難な結果になりました。
以下、テストコードとその出力。
test1.php
class test{
public function mic(){
echo __FUNCTION__ . "\n";
echo __METHOD__. "\n";
}
}
$pic = new test();
$pic->mic();
出力
mic
test::mic
test2.php
function moc(){
echo __FUNCTION__ . "\n";
echo __METHOD__. "\n";
}
moc();
出力
moc
moc