回答編集履歴
3
タイプヒンティングコードミス修正
answer
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
|
18
18
|
```php
|
19
19
|
// 型宣言(タイプヒンティング)
|
20
|
-
function something (
|
20
|
+
function something (array $param = array()) {
|
21
21
|
...
|
22
22
|
};
|
23
23
|
|
2
タイプヒンティングコードミス修正
answer
CHANGED
@@ -17,10 +17,12 @@
|
|
17
17
|
|
18
18
|
```php
|
19
19
|
// 型宣言(タイプヒンティング)
|
20
|
-
Array $
|
20
|
+
function something (Array $param = array()) {
|
21
|
+
...
|
22
|
+
};
|
21
23
|
|
22
|
-
|
24
|
+
something(array(1,2,3)); // OK
|
23
|
-
|
25
|
+
something(1) // NG
|
24
26
|
```
|
25
27
|
|
26
28
|
> $e->getMessage() はインスタンスである$eのgetMessagemeメソッドを使用しているということですよね?`$e = new Exception();`
|
1
タイプミス修正
answer
CHANGED
@@ -1,21 +1,28 @@
|
|
1
1
|
> catch(Exception $e)の部分の「Exception」は定義済みのクラスのことですよね?
|
2
2
|
$eはExceptionクラスのインスタンス(オブジェクト)という意味でしょうか?
|
3
3
|
|
4
|
-
PHP内部の定義済みのクラスのことで
|
4
|
+
PHP内部の定義済みのクラスのことで、[定義済みの例外](http://php.net/manual/ja/reserved.exceptions.php)は他にもあります。PHP7では`Error $e`というのもあります。
|
5
5
|
|
6
|
+
```
|
6
|
-
もともと、PHPには
|
7
|
+
もともと、PHPには「try~catch 例外処理」はありませんでした。
|
8
|
+
```
|
7
9
|
|
8
10
|
導入された際に例外の`$e`だけ特殊な扱いで`型宣言`しなくてはならない仕様で導入されました。
|
9
|
-
これが`Exception $e`です。
|
11
|
+
これが`Exception $e`です。
|
10
12
|
|
11
|
-
普通、オブジェクト指向言語では変数の`型宣言`をしなくてはなりません。ストリング(オブジェクト)型の変数$strの場合は、`String $str`という具合です。PHPは型を自動判断しましょうという
|
13
|
+
普通、オブジェクト指向言語では変数の`型宣言`をしなくてはなりません。ストリング(オブジェクト)型の変数$strの場合は、`String $str`という具合です。PHPは型を自動判断しましょうというコンセプトなので通常は型を書かず、例外の時だけ`Exception $e`と書かなければいけません。
|
12
14
|
|
13
|
-
[PHPマニュアルの型宣言について(タイプヒンティング)](http://php.net/manual/ja/functions.arguments.php#functions.arguments.type-declaration)に宣言できる一覧が記載されてます。
|
15
|
+
[PHPマニュアルの型宣言について(タイプヒンティング)](http://php.net/manual/ja/functions.arguments.php#functions.arguments.type-declaration)に型宣言できる型一覧が記載されてます。
|
14
|
-
例えば`Array $array`などです。
|
16
|
+
例えば`Array $array`などというように型を定義して変数宣言できます。こうすることで、配列以外の型を代入することはできなくなり、より厳密にプログラムを作成することができるようになります。
|
15
17
|
|
18
|
+
```php
|
19
|
+
// 型宣言(タイプヒンティング)
|
20
|
+
Array $array = array();
|
21
|
+
|
22
|
+
$array = array(1,2,3); // OK
|
23
|
+
$array = 1 // NG
|
24
|
+
```
|
25
|
+
|
16
26
|
> $e->getMessage() はインスタンスである$eのgetMessagemeメソッドを使用しているということですよね?`$e = new Exception();`
|
17
27
|
|
18
28
|
正確には`try{throw new \Exception();}catch(\Exception $e){}`ですが、感覚的にはあってます。
|
19
|
-
|
20
|
-
いまいち驚きが伝わらないのですが、PHP内部のクラスなどは別に珍しくないですよ。
|
21
|
-
例えばDB接続でおなじみの`PDO`もPHPの内部クラスです。
|