Help us understand the problem. What is going on with this article?

PHPのメソッドと関数の違い

More than 5 years have passed since last update.

メソッドは実装する場所が異なるだけで、関数の一種、という少し乱暴な考えでいるのですが、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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away