
以下のソースコードがあります。
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で返す結果を格納している」という考え方であっているでしょうか。
以下のような質問にはグッドを送りましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 間違っている
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。

回答3件
10
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/25 00:27

退会済みユーザー
2018/04/25 01:51 編集
2
ベストアンサー
サンプルコピペから始めて少し前にそこにつまづいたのでアドバイスになれば
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
総合スコア61
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
2
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総合スコア80030
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
関連した質問
Q&A
解決済
fgets関数が標準入力から受け取る末尾文字について教えてください
回答3
クリップ0
更新
2023/02/02
意見交換
受付中
ApacheとPHPのセットアップ過程、Apacheのサービスをあげることができない
回答6
クリップ0
更新
2023/02/03
Q&A
解決済
最速で配列からデータを取り出し、正規表現で検索したい。
回答3
クリップ1
更新
2023/01/31
Q&A
受付中
Rustで2つの値の入力を1行に行う。
回答2
クリップ0
更新
2023/02/05
Q&A
解決済
【SQLServer2014】select文に列追加/ case when??で同じパターンで複数の値を返す
回答3
クリップ0
更新
2023/02/02
Q&A
解決済
while構文を使う際のbreakの位置と使い方
回答1
クリップ0
更新
2023/02/04
Q&A
解決済
オブジェクトがプレイヤーを追従してしまう。
回答2
クリップ0
更新
2023/01/21
Q&A
解決済
Unity:ランキング入力時のリセットキー無効化
回答2
クリップ0
更新
2023/01/31
同じタグがついた質問を見る
PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。