以下のソースコードがあります。
switch($t = $this->list->test_a($this->test['groupid'])) {// ページ種別の判定 case '-1': $this->group = $this->test_b(); break; case '0':/ $this->group = $this->test_c(); break; }
this
は何をさしているのでしょうか。
それと、例えば上記の$this->group = $this->test_b();
の意味なのですが、「$thisは連想配列で、その$thisの中にgroupというキーがあって、そのキーに値として$this->test_b()という関数がreturnで返す結果を格納している」という考え方であっているでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
PHP: クラスの基礎 - Manual
$this
はインスタンス自身のことを、クラス(のプロパティやメソッドなど)の実装をするときに自分自身を指すために使います。
もしも$this->grpup
でなく単に$group
とした場合は、ローカル変数でしかないため、
メソッドを抜けると保持されなくなります。
->
は左側に示すインスタンスが所有するメンバーを、右側に示すプロパティやメソッドや定数でアクセスするものです。
もしもtest_b()
とすると、(名前空間内の)test_b()関数を呼び出す意味になってしまい、
例えば
php
1<?php 2class example { 3 public function test_b() { // (1)はクラス内のメソッド 4 ... 5 } 6 ... 7} 8 9function test_b() { // (2)はクラス実装の外側にある 10 ... 11}
といった意地悪なケースで1と2のどっちを呼ぶのかを迷惑に分ける必要があるため、
$this->test_b()
とtest_b()
と書き方が別れます。
$this->group = $this->test_b();
は、
自インスタンスの変数もしくはプロパティであるgroup
に対して、
自インスタンスのメソッドであるtest_b()
の結果を代入する、
と解釈できると思います。
あちこちの入門書などに既に丁寧な説明がなされていることを書くのは少々はばかられますが、
乗りかかった船なので続けて補足します。
phpの公式ドキュメントの、PHP: クラスとオブジェクトに
一通り目を通してサンプルコードを動かしてみてくれると
理解が早いと思いますが、
php
1<?php 2 3$var = 'global value'; 4class SimpleClass 5{ 6 // プロパティの宣言 7 public $var = 'property value'; 8 9 // メソッドの宣言 10 public function displayVar() { 11 $var = 'local value'; 12 echo $this->var . PHP_EOL; // 'property value'を出力 13 echo $var . PHP_EOL; // 'local value'を出力 14 echo $GLOBALS['var'] . PHP_EOL; // 'global value'を出力 15 } 16} 17 18$test = new SimpleClass; 19$test->displayVar();
ひっかけ問題のように小難しくしてみましたが、
どこで宣言されているものを参照するかを明確にするために、
$thisや->があります。
投稿2018/04/24 12:14
編集2018/04/25 01:34退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/24 13:26
2018/04/25 00:27
退会済みユーザー
2018/04/25 01:51 編集
2018/05/03 02:24
2018/05/03 02:24
0
ベストアンサー
サンプルコピペから始めて少し前にそこにつまづいたのでアドバイスになれば
thisや->が使われるのはclass内でメソッドやプロパティを利用している時です
PHP
1<?php 2 3 class clshoge{ 4 public $group ; //変数group (1) 5 6 public function test_b(){ 7 $group ; //変数group (2) 8 9 $this->group = "value class" ; 10 11 $group = "value test_b" ; 12 13 return $group ; 14 } 15 16 } 17 18 ini_set('display_errors', 1); 19 20 //PHPローカル変数group 21 $group = "value PHP" ; //変数group (3) 22 23 //インスタンス生成 24 $hoge = new clshoge ; 25 26 //結果表示 27 28 echo $group . "<BR>" ; //変数group (1) 29 30 //プロパティgroupの取得→まだ値がセットされていない 31 echo $hoge->group . "<BR>" ; //変数group (2) 32 33 //test_bメソッド実行(戻り値:test_b内のgroup) 34 //プロパティgroupにも値をセットしている 35 echo $hoge->test_b() . "<BR>" ; //変数group (3) 36 37 //プロパティgroupの取得 38 echo $hoge->group . "<BR>" ; //変数group (2) 39 40?>
結果:
value PHP
(空白)
value test_b
value class
意地悪く一つのクラス周辺に3つのgroupを用意しましたが、それぞれ別物として扱います。
その際に関係してくるのが
・クラス(インスタンス)hogeを指すthis
・クラス内で持っているプロパティとメソッドを指す->
PHP上でクラス内プロパティgroupを指したいときは
$hoge->group (インスタンスに->)
PHP上でクラス内メソッドtest_bを指したいときは
$hoge->test_b (インスタンスに->)
メソッドtest_b内でクラス内プロパティgroupを指したいときは
$this->group (クラスの中なのでthisと表現)
長々と書きましたがどうでしょうか?thisと->の使い方、理解の一助になりましたか?
投稿2018/04/25 00:20
総合スコア66
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/25 21:11
2018/04/25 23:29
2018/04/28 23:24
2018/04/30 23:25
2018/05/03 01:26
0
thisは何をさしているのでしょうか。
今提示されているコードの中にはありません。
通常は、Class(オブジェクト)自身を指します。
コードの解説を求めるのであれば、なるべくコード全体を提示しましょう。
それと、例えば上記の$this->group = $this->test_b();の意味なのですが、「$thisは連想配列で、その$thisの中にgroupというキーがあって、そのキーに値として$this->test_b()という関数がreturnで返す結果を格納している」という考え方であっているでしょうか。
いいえ、違います。コードが全て提示されないと確実なことは言えませんが、
$thisはtest_b()関数や$groupというプロパティを持っているクラスで、$groupというプロパティでtest_b()関数の結果を受け取って保管している
ということは言えます。
ただしそのクラスが何かしらのクラスを継承している場合、
$groupやtest_b()関数がprivateに設定していなければ、そのクラス自身ではなく親クラス側に持っている可能性もあるので、やはりコード全体が必要です。
->については既に出ている通りですね。
PHPマニュアルを一通り熟読し、色々と動かしてみると良いです。
- PHPマニュアル:クラスの基礎
- PHPマニュアル:プロパティ
- PHPマニュアル:アクセス権
- PHPマニュアル:オブジェクトの継承
- [PHPオブジェクト指向プログラミング入門(1):
PHPにおけるクラスの書き方と呼び出し方――インスタンス、メソッド、プロパティ](http://www.atmarkit.co.jp/ait/articles/1506/03/news019.html)
投稿2018/04/24 20:59
編集2018/04/24 21:02総合スコア80875
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。