- ベストアンサー
「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。
「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。 あるサイトに、「クラス関数」=「メンバ関数」と書かれていました。 「メンバ関数」=「メソッド」だと思っているのですが、 そうすると、「クラス関数」=「メンバ関数」=「メソッド」という認識で間違いないでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Java や C++ の感覚でいうと下記の様になりますでしょうか。 ・「メンバ関数」=「メソッド」 クラスに定義されている関数(プロシージャ)全般。 ・「クラス関数」=「クラスメソッド」=「静的メソッド」 クラスに定義されている関数の内、静的(static)なもの。インスタンス化せずにアクセスできる。 http://jp2.php.net/manual/ja/language.oop5.static.php ・「インスタンス関数」=「インスタンスメソッド」 クラスに定義されている関数の内、静的(static)でないもの。インスタンス(オブジェクト)を通してアクセスする。 この分類によれば、「メンバ関数」には「クラス関数」と「インスタンス関数」の2種類が有ることになります。 文脈によっては「クラス内の関数」という意味で「メンバ関数」全般のことを「クラス関数」という場合も有るかも知れません。
その他の回答 (3)
- BellBell
- ベストアンサー率54% (327/598)
「メソッド」はクラスが外部に公開している機能の意味ですね。 PHP5からはPrivate関数も定義できるため、Publicで公開された関数のみメソッドと言えるかと思います(Public/Privateを使い分けしていた場合)。 ※Protectedは限定されたメソッドとでも言えばいいでしょうか。 少なくとも、Private関数はメソッドではないですね。 その意味では、Public/Privateが宣言できない、使い分けができないPHP4でも、外部から使用する事を前提として設計された関数のみがメソッド、内部で使う事だけを考えられている関数は、メソッドではないと解釈できるでしょう。 ※定義上ではなく解釈上の話です。 私個人は、拡大解釈も加えて(厳密には誤用かも知れませんが)Private用途はメンバ関数、Public用途はメソッドと呼び分けています。 ※私が考えた呼び分け方法ではなく、解説書などでもこのように呼び分けされている事も多く、その影響で私もこう呼び分けるようになりました。 クラス関数という呼び方はほぼ使用しませんが、そう呼ぶ場合はPHP4のようにPublic/Privateが使い分けできない場合や、あるいは、Public/Privateをひっくるめて呼ぶ場合に使用するぐらいでしょう。 定義としては 「クラス関数」=「メンバ関数」 「メソッド」=「公開されたクラス関数(メンバ関数)」 そのうえで、人によっては 「公開されたクラス関数」→「メソッド」 「公開されていないクラス関数」→「メンバ関数」 と区別して呼び分けしているというところでしょう。
- magicalpass
- ベストアンサー率58% (378/648)
「クラス関数」「メンバ関数」はいずれもクラス内で定義された関数に限定した言い方です。 「メソッド」というのは本来はJavaとかC#のような、プログラムすべてがクラスで定義されるようなオブジェクト指向言語において関数に相当する処理のことを指す言葉です。それらの言語ではクラス外の関数なんてものは存在しないので、「メソッド」と「クラス関数」や「メンバ関数」は一意で同義語になります。 ところが、C++とかPHPとかのようにクラス外にも関数が存在する言語でも「メソッド」という呼び方が使われるようになってきてるんですね。そこでは、JavaとかC#のような言語にならって「クラス関数」や「メンバ関数」と同義に使われていて、一方でクラス外にある関数を「メソッド」と呼んだりすることはあまりありません。 そういう意味では「クラス関数」=「メンバ関数」=「メソッド」という認識で構わないのかと思いますが、「メソッド」という言葉自体には本来クラスの中だとか外だとかいう概念はなく、クラス外の関数を「グローバルメソッド」と呼んだりすることもあるので、「関数」と同じだと言ったわけです。
- magicalpass
- ベストアンサー率58% (378/648)
「クラス関数」とはクラスで定義されている関数のことです。 クラスのメンバなので、そのクラスの「メンバ関数」とも言います。 「メソッド」とは関数の別の言い方です。
補足
>「クラス関数」とはクラスで定義されている関数のことです。クラスのメンバなので、そのクラスの「メンバ関数」とも言います。「メソッド」とは関数の別の言い方です。 ということは、 「クラス関数」=「メンバ関数」=「メソッド」 「正しい」 か 「正しくない」 で言ったら、 「正しい」という認識でよいのでしょうか?
お礼
単に「言い方」の問題だとは思うのですが、ご回答いただいた内容、大変分かりやすかったです。おかげですっきりすることができました。ありがとうございました。