回答編集履歴

3

編集

2016/06/03 11:49

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ```php
10
10
 
11
- $m = new maimail();
11
+ $m = new MyMail();
12
12
 
13
13
  $m->to ="a@a.com"
14
14
 
@@ -30,11 +30,17 @@
30
30
 
31
31
 
32
32
 
33
- とすればエラーになりません.しかし,これでは少し取り扱いにくいので,**送信のために`send()`が呼ばれたタイミングで`_`を`-`に変換してメール送信する**,という処理を行ってくれています.**マジックメソッド経由`$this->headers`に格納るタイミングで変換はされていません**
33
+ とすれば文法エラーになりません.しかし,これでは少し取り扱いにくいので,`-`を`_`で代わりに記述させておいて,**送信のために`send()`が呼ばれたタイミングで`_`を`-`に変換してメール送信する**,という処理を行ってくれている,ということです.
34
34
 
35
35
 
36
36
 
37
+ - 実際には`to` `subject` `message`以外はオブジェクトのプロパティではなく`headers`の配列要素として格納されているだけ
38
+
39
+ - `headers`に格納されるタイミングで変換はされていない
40
+
41
+
42
+
37
- もちろんのタイミングで行うようにも書けますけどね…
43
+ という点で質問者さんの認識と食い違いがあると思います.もちろん以下ように,格納および取得のタイミングで変換を行うようにも書けますけどね…
38
44
 
39
45
 
40
46
 
@@ -100,7 +106,7 @@
100
106
 
101
107
 
102
108
 
103
- 結論は, 「`{'プロパティ名'}` のようにすればどんな値でもプロパティ名として記述できる」,です.
109
+ 結論は, **「`{'プロパティ名'}` のようにすればどんな値でもプロパティ名として記述できる」**,です.
104
110
 
105
111
 
106
112
 

2

補足

2016/06/03 11:49

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -30,8 +30,78 @@
30
30
 
31
31
 
32
32
 
33
- とすれば実現でき.しかし,これでは少し取り扱いにくいので,**送信のために`send()`が呼ばれたタイミングで`_`を`-`に変換してメール送信する**,という処理を行ってくれています.**マジックメソッド経由で`$this->headers`に格納するタイミングで変換はされていません.**(もちろんこのタイミングで行うようにも書けますが)
33
+ とすればエラーになりせん.しかし,これでは少し取り扱いにくいので,**送信のために`send()`が呼ばれたタイミングで`_`を`-`に変換してメール送信する**,という処理を行ってくれています.**マジックメソッド経由で`$this->headers`に格納するタイミングで変換はされていません.**
34
34
 
35
35
 
36
36
 
37
+ もちろんこのタイミングで行うようにも書けますけどね…
38
+
39
+
40
+
41
+ ```php
42
+
43
+ class MyMail
44
+
45
+ {
46
+
47
+ public $to;
48
+
49
+ public $subject;
50
+
51
+ public $message;
52
+
53
+ private $headers = [];
54
+
55
+
56
+
37
- MIMEヘッダに`X-Mailer`といったものがあるのはご存知ですよね?
57
+ public function __set($name, $value)
58
+
59
+ {
60
+
61
+ $this->headers[str_replace('_', '-', $name)] = $value;
62
+
63
+ }
64
+
65
+
66
+
67
+ public function __get($name)
68
+
69
+ {
70
+
71
+ return $this->headers[str_replace('_', '-', $name)];
72
+
73
+ }
74
+
75
+
76
+
77
+ public function send()
78
+
79
+ {
80
+
81
+ $others = '';
82
+
83
+ foreach($this->headers as $key => $value) {
84
+
85
+ $others .= "{$key}:{$value}\n";
86
+
87
+ }
88
+
89
+ mb_send_mail($this->to, $this->subject, $this->message, $others);
90
+
91
+ }
92
+
93
+ }
94
+
95
+ ```
96
+
97
+
98
+
99
+ 結局「マジックメソッドを使えば`-`つきで格納できるか」という質問はミスリーディングで,本質は**「プロパティ名部分に`-`を使っても文法エラーにならないか」**というところにあります.未定義のプロパティをどう格納するかどうかは`__set()`に委ねられていますが,文法エラーの有無には無関係です.
100
+
101
+
102
+
103
+ 結論は, 「`{'プロパティ名'}` のようにすればどんな値でもプロパティ名として記述できる」,です.
104
+
105
+
106
+
107
+

1

訂正

2016/06/03 11:41

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
 
33
- とすれば実現できます.しかし,これでは少し取り扱いにくいので,**送信のために`send()`が呼ばれたタイミングで`_`を`-`に変換してメール送信する**,という処理を行ってくれています.**`$this->headers`に格納するタイミングで変換はされていません.**
33
+ とすれば実現できます.しかし,これでは少し取り扱いにくいので,**送信のために`send()`が呼ばれたタイミングで`_`を`-`に変換してメール送信する**,という処理を行ってくれています.**マジックメソッド経由で`$this->headers`に格納するタイミングで変換はされていません.**(もちろんこのタイミングで行うようにも書けますが)
34
34
 
35
35
 
36
36