• ベストアンサー

クラス内でメソッド呼ぶ際、this付けないとダメ?

クラス内で、メソッドを呼び出す際、なぜ、$this->メソッド名();としなければいけないのでしょうか? 疑問内容としては、下記リンク先の人と同じなのですが、 なんで、メソッド名();を普通に呼ぶだけではダメなのでしょうか? publicクラス内で、publicなメソッドから、publicなメソッドを呼ぶだけだから、普通の呼び出しでイケると思ったのですが… ▽クラス内での関数の呼び出しについて。 - PHPプロ!Q&A掲示板   http://www.phppro.jp/qa/2846

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5096/13322)
回答No.1

そういうルールだからというのが簡単な答えですが。 (^^; クラス内のメソッドと関数を区別するためのルールです。 クラス内で定義したメソッドの名前は、そのクラスのインスタンスで有効な名前なので $this-> を付けて自分自身のインスタンスに定義されているメソッドだと指定してあげなければどのクラスの中のメソッドなのか、関数として定義されているモノなのか判らなくなってしまいます。 以下のようなプログラムだと意味が分かって貰えるのではないでしょうか。 関数 hoge が定義されていて、HogeClass の中にもメソッド hoge が定義されています。 関数 hoge はプログラムのどこからでも呼び出せる関数ですから HogeClass の中からも呼び出せなければいけません。 HogeClass の中の hoge メソッドは関数 hoge と区別されなければいけないので、区別するための識別子が必要なのです。 <?php function hoge () { return "b"; } class HogeClass { public static function hoge () { return "a"; } public static function hoge2 () { return hoge(); } } echo HogeClass::hoge2(); // b が表示される ?>

re97
質問者

お礼

回答ありがとうございました。 説明分かりやすかったですー

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

$thisは自分自身だから

re97
質問者

お礼

回答ありがとうございましたー

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • uasort()でクラスのメソッドは呼べますか?

    2次元連想配列の指定項目をソートするのに、uasort()を使いたいのですが、 uasort()で指定する関数に任意の引数は渡せず、固定の項目しかソートできません。 uasort($rensouArray,"comparar"); 関数ではなくクラスのメソッドが指定できば引数を渡せなくてもクラスのプロパティで渡せると思いましたが、 以下の書き方ではクラスのメソッドは呼べませんでした。 uasort($rensouArray,$this->$comparar()); http://jp.php.net/manual/ja/function.uasort.php の注意書きで、関数名の代わりに、オブジェクトへのリファレンスを格納した配列とメソッド名を指定することも出来ます。とありますが、書き方がわからず困っています。

    • 締切済み
    • PHP
  • クラスのthisとは

    前の質問で クラスにコールバック関数を取り入れる事を質問してきました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2310776 コールバック関数をクラス化させる方法については分かりましたが、 Win32に渡す引数のところになぜ(void*)thisをいれたら解決できなのでしょうか? そもそもthisのとはなにか?なぜクラスにはこのようなのが必要なのか不思議です。 thisとは何者なのでしょうか?

  • メソッドの引数としてのthisの意味

    java初心者です。教えてください。 メソッドの引数としてのthisは何を表しているのですか? いろいろ調べてみてthisには以下の2つの使用法があることがわかりました。 1.インスタンス変数の名前とインスタンスメソッド内のローカル変数名がかぶったときに、メソッド内でインスタンス変数を表すときにthis.変数名とする。 2.あるクラスのコンストラクタ内で、同じクラスの別のコンストラクタを呼ぶときに使う。 しかし、引数としてのthisの意味がわかりません。 具体的には、addMouseListener(this);や、g.drawImage(img,10,10,this);のthisです。 後者の場合はオブジェクトgのインスタンスメソッドなので、thisはオブジェクトgへの参照を表しているのでしょうか?

    • ベストアンサー
    • Java
  • (クラス名.this.メソッド)って・・・?

    次のようなクラスで public class ClassA {   public static void main(String[]args)   {     new ClassA(); /* 構築A */   }   public ClassA()   {     new ClassI();   }   public class ClassI()   {     ClassA.this.MethodA(); /* 命令A */   }   public void MethodA()   {     System.out.println("HELLO");   } } この命令Aの部分の (クラス名.this.メソッド)というアクセス方法がよくわかりません とりあえす(ClassA.this)が構築Aの部分で生成された インスタンスではないかとおもうのですがそれで正しいのでしょうか? また インナークラスはインナークラスの定義されているクラス以外から インスタンスを生成できないのでしょうか? つまり次のクラスを追加して public class ClassB {   public ClassB()   {     new ClassA.ClassI(); /* 構築B */   } } ここの構築Bのように(この場合はダメの様ですが)他のクラスから 構築することです もし仮にできるとしたら そのときの命令Aの(ClassA.this)は一体なんの インスタンスを指すのでしょうか 急ぎのプログラムを作っているので たいへん不躾ですが、なるべく早くお答えをお願いします

    • ベストアンサー
    • Java
  • phpにおいて、クラスのメソッド名を定義する際に、

    phpにおいて、クラスのメソッド名を定義する際に、 メソッド名を変数で与えることはできないのでしょうか? 例えば、下記のようなものを考えています。 class ClassA { foreach( array('AA', 'BB', 'CC') as $val ) { function set{$val}($arg) { $arg = $arg + 1; return $arg; } } しかし、これではうまくいかないようです。 一方、メソッドを用いるときには、 このような変数展開ができるようです。 ですので、定義のときにもやり方があるのでは・・?と思い、 質問させていただきました。 宜しくお願い致しましう。

    • ベストアンサー
    • PHP
  • static methodの引数thisについて

    javaの『static メソッド』の中では、thisが使用できないようです(再質問)。 毎度、お世話になります。 出来れば、下記のコードでthisの部分の変更をお教え頂けないでしょうか? 尚、この場合のthisは、myclsFFTクラスの中の、Thread(this)の引数と なっています(下記のコード参照)。 Q1) このthisに代わる記述、方法はありますか? static void start_threadFFT(int sw_curve){ ..... new Thread(this).start(); .... } 以上、宜しくお願い申し上げます。 ========================================== public class myclsFFT extends myDrawClass implements Runnable{ myclsFFT(){ } static void start_threadFFT(int sw_curve){ ..... new Thread(this).start(); .... } ...... } ==========================================

    • ベストアンサー
    • Java
  • new クラス名(Activity名.this);

    Android ・下記のようなコードがあるのですが、このとき「.this」の意味を教えてください ・Activityクラス自身? ・「.」で繋いでいる意味も、「this」の意味も良く分かりません ・thisだけでは駄目? ・引数は1つ? public class Hoge extends Activity {  public class C1 {//インナークラス?   protected m1method(略) {   略 = new クラス名(Hoge.this);

    • ベストアンサー
    • Java
  • 「static宣言されているメンバ関数」は、「インスタンスメソッド」な

    「static宣言されているメンバ関数」は、「インスタンスメソッド」なのでしょうか? それとも、「クラスメソッド」なのでしょうか? 先日、下記内容で質問して、その時は分かったつもりだったのですが、 やっぱり分かってなかったようなので、教えてください。 ▽「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。   http://okwave.jp/qa/q5858806.html 例) ▽前提 ・Aクラスのインスタンスa ・static宣言されたpublicメソッド「static_public_method」 ・static宣言されていないpublicメソッド「public_method」 ▽メンバ関数呼び出し ・$a->static_public_method() ・A::static_public_method() ・A::public_method() このとき、「$a->static_public_method()」は、インスタンス経由でアクセスすることになるので、 「インスタンスメソッド」になるのでしょうか。それとも、static(静的)宣言しているので、「クラスメソッド」になるのでしょうか? また、「A::static_public_method()」や、「A::public_method()」は、どちらになるのでしょうか? ※現在、頭の中がこんがらがっているのは、下記3点です。どれかひとつでも構わないので、分かりやすい考え方等あれば、ぜひ教えてください。 ・「static宣言したメンバ関数」は、「インスタンスメソッド」? 「クラスメソッド」? ・「スタティック」宣言してるのに、メンバ関数へ、「->(アロー演算子)」(オブジェクト経由)でアクセスできる理由 ・「A::static_public_method()」と「A::public_method()」の違い

    • ベストアンサー
    • PHP
  • javaのstatic メソッドのthisについて

    javaの『static メソッド』の中では、thisが使用できないようです(下記のコード参照)。 毎度、お世話になります。 Q1) このthisに代わる記述、方法はありますか? static void start_threadFFT(int sw_curve){ ..... new Thread(this).start(); .... } 以上、宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • phpのthis

    a.phpを作成しました。 thisによるアクセスが可能かと思ったのですが、やはりできないのでしょうか。 ===a.php==== <?php $val = 1 ; method(); function method(){ echo $val; echo $this -> val; } ?> ===a.phpここまで===== 別のphpファイル(try.php)には以下内容を記述しました。 ===try.php=== <?php class User { private $id; public function get_id(){ return $this->id;} } public function set_id($id){ $this->id=$id; } ?> 質問: なぜ、 「try.phpでは、$idにthisでアクセスできるのでしょうか? (returnの違いかと思いましたが、set関数はreturnがないのでretrunでもないと思っています。) a.phpでは、thisで valにアクセスできないのでしょうか?」 try.phpは、classを付けてクラス作成しているから、$idにthisでアクセスできるのでしょうか? ご教授お願いします。

    • ベストアンサー
    • PHP