teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

加筆修正

2018/04/25 01:34

投稿

退会済みユーザー
answer CHANGED
@@ -25,4 +25,37 @@
25
25
  `$this->group = $this->test_b();`は、
26
26
  自インスタンスの変数もしくはプロパティである`group`に対して、
27
27
  自インスタンスのメソッドである`test_b()`の結果を代入する、
28
- と解釈できると思います。
28
+ と解釈できると思います。
29
+
30
+ ---
31
+
32
+ あちこちの入門書などに既に丁寧な説明がなされていることを書くのは少々はばかられますが、
33
+ 乗りかかった船なので続けて補足します。
34
+
35
+ phpの公式ドキュメントの、[PHP: クラスとオブジェクト](http://php.net/manual/ja/language.oop5.php)に
36
+ 一通り目を通してサンプルコードを動かしてみてくれると
37
+ 理解が早いと思いますが、
38
+ ```php
39
+ <?php
40
+
41
+ $var = 'global value';
42
+ class SimpleClass
43
+ {
44
+ // プロパティの宣言
45
+ public $var = 'property value';
46
+
47
+ // メソッドの宣言
48
+ public function displayVar() {
49
+ $var = 'local value';
50
+ echo $this->var . PHP_EOL; // 'property value'を出力
51
+ echo $var . PHP_EOL; // 'local value'を出力
52
+ echo $GLOBALS['var'] . PHP_EOL; // 'global value'を出力
53
+ }
54
+ }
55
+
56
+ $test = new SimpleClass;
57
+ $test->displayVar();
58
+ ```
59
+ ひっかけ問題のように小難しくしてみましたが、
60
+ どこで宣言されているものを参照するかを明確にするために、
61
+ $thisや->があります。

2

加筆修正

2018/04/25 01:34

投稿

退会済みユーザー
answer CHANGED
@@ -1,7 +1,27 @@
1
1
  [PHP: クラスの基礎 - Manual](http://php.net/manual/ja/language.oop5.basic.php)
2
2
  `$this`はインスタンス自身のことを、クラス(のプロパティやメソッドなど)の実装をするときに自分自身を指すために使います。
3
+ もしも`$this->grpup`でなく単に`$group`とした場合は、ローカル変数でしかないため、
4
+ メソッドを抜けると保持されなくなります。
5
+
3
6
  `->`は左側に示すインスタンスが所有するメンバーを、右側に示すプロパティやメソッドや定数でアクセスするものです。
7
+ もしも`test_b()`とすると、(名前空間内の)test_b()関数を呼び出す意味になってしまい、
8
+ 例えば
9
+ ```php
10
+ <?php
11
+ class example {
12
+ public function test_b() { // (1)はクラス内のメソッド
13
+ ...
14
+ }
15
+ ...
16
+ }
4
17
 
18
+ function test_b() { // (2)はクラス実装の外側にある
19
+ ...
20
+ }
21
+ ```
22
+ といった意地悪なケースで1と2のどっちを呼ぶのかを迷惑に分ける必要があるため、
23
+ `$this->test_b()`と`test_b()`と書き方が別れます。
24
+
5
25
  `$this->group = $this->test_b();`は、
6
26
  自インスタンスの変数もしくはプロパティである`group`に対して、
7
27
  自インスタンスのメソッドである`test_b()`の結果を代入する、

1

加筆修正

2018/04/24 12:35

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,8 @@
1
1
  [PHP: クラスの基礎 - Manual](http://php.net/manual/ja/language.oop5.basic.php)
2
- `$this`はインスタンス自身のこと、
2
+ `$this`はインスタンス自身のことクラス(のプロパティやメソッドなど)の実装をするときに自分自身を指すために使います。
3
- `->`は左側に示すインスタンスが所有するメンバーを、右側に示すプロパティやメソッドや定数でアクセスするものです。
3
+ `->`は左側に示すインスタンスが所有するメンバーを、右側に示すプロパティやメソッドや定数でアクセスするものです。
4
+
5
+ `$this->group = $this->test_b();`は、
6
+ 自インスタンスの変数もしくはプロパティである`group`に対して、
7
+ 自インスタンスのメソッドである`test_b()`の結果を代入する、
8
+ と解釈できると思います。