トップページ⇒php
1002コメント311KB

PHP質問・雑談スレ 2【初心者お断り(ROM歓迎)】©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん 転載ダメ©2ch.net2016/10/17(月) 21:44:12.59ID:???
PHP関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。

PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
http://echo.2ch.net/tech/ (【PHP】で板内を検索)

前スレ
http://tamae.2ch.net/test/read.cgi/php/1461283091/

その他リンク
・PHPマニュアル
 https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
 http://ideone.com/
・プログラミングのお題スレ Part8 (求PHPer参戦)
 http://echo.2ch.net/test/read.cgi/tech/1444216746/

このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
 (FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼

このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
 (HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造
0367nobodyさん2016/11/14(月) 04:03:26.34ID:???
定数を変更したい場合に予め定数を定義することで、
そのコード自体ををいじらなくても外側から上書きできるようになるってことだね。
0368nobodyさん2016/11/14(月) 04:39:52.56ID:???
>>362
動作結果は同じだけど意味合いが違うから使い分けが大事。

【ドットが適切な場合】
$message = 'My name is ' . $name;
echo $message;
↓省略
echo 'My name is ' . $name;

【カンマが適切な場合】
echo $errorCode;
echo $errorMessage;
↓省略
echo $errorCode , $errorMessage;

ただ、カンマの例の場合
$output = $errorCode . $errorMessage;
という考え方も出来るからカンマを使う場面ってのはそんなに無いと思う。
ってか自分は使ったこと一度もない。
0369nobodyさん2016/11/14(月) 16:47:25.54ID:???
>>365
他ファイルとの競合もあるが、自分自身も二重にrequireされると自分自身と競合する
0370nobodyさん2016/11/14(月) 16:59:18.70ID:???
その場合でもエラー出したほうがいいのでは?
require_onceってのもあるし、二重にrequireすること自体が問題。
0371nobodyさん2016/11/14(月) 17:14:51.81ID:???
>>370
requireするのが自分だけとは限らないし
することが可能ならそうされても大丈夫なようにしとけばいいじゃん
インクルードガードも否定派なの?
0372nobodyさん2016/11/14(月) 19:07:26.76ID:???
コードを書く順序で質問です
データベースからデータを引っ張って来て、<li>要素に入れて表示したいとします。
この場合、どういう風に組み立てたら良いでしょうか
functionかclassを作ったほうが良いのでしょうか?

以下のようなコードがどこかに入ると思いますが、どこに入れるとよいのでしょう
$li = "";
foreach($result as $key){
$li .= '<li>'.$key.'</li>';
}

phpはhtmlの前にまとめるのは何となく分かりました。
<?php
$pdo = new PDO(...);
$st = $pdo->prepare(...);
$st->execute();
$result = $st->fetchall(); //$result に結果が入る
$st->closeCursor();
?>
<html><body>
<ul>
//
<li>データをここに表示させたい</li>
<li>データをここに表示させたい</li>
<li>データをここに表示させたい</li>
</ul>
0373nobodyさん2016/11/14(月) 19:29:21.64ID:???
>>static なプロパティはインスタンス化されたクラスオブジェクトから アクセスすることはできません
>> (static なメソッドにはアクセスできます)。

こう書いてあるけど、staticメソッドにインスタンス化したオブジェクトからアクセスするのってバッドプラクティスになる?
将来非推奨になっちゃったりとか
0374nobodyさん2016/11/14(月) 19:51:29.20ID:???
>>372
その程度の規模でも分離しよう

~~~~index.php
<?php
$pdo = new PDO(...);
$st = $pdo->prepare(...);
$st->execute();
$result = $st->fetchall(); //$result に結果が入る
$st->closeCursor();
include('templates/index.tpl');

~~~~templates/index.tpl
<html><body>
<ul>
<?php foreach ($result as $value): ?>
<li><?= $value ?></li>
<?php endforeach; ?>
</ul>

>>372
スタティックであることを明示出来ない点はデメリットだがそれが問題にならなければよい
あとC++とかでも同様に書けるからdeprecatedにはならないんじゃないかと
0375nobodyさん2016/11/14(月) 20:10:13.08ID:???
>>374
す、すごい・・・
めちゃくちゃ見やすいですね、ありがとうございます。
0376nobodyさん2016/11/15(火) 00:44:40.64ID:???
アクセス権で質問です

publicはメソッドのみ。プロパティには使わない
プロパティは基本privateにして、クラス内メソッドからアクセスする
継承させるつもりならメソッドでもメンバでもprodectedにする

という認識であってますか?
0377nobodyさん2016/11/15(火) 01:06:52.72ID:???
>>376
初心者お断りなんだがね・・・・

それは覚えるもんじゃなくて理屈で設定するもんだ
プロパティ間に関連がある(文字列とその長さとか)なら外部からそれぞれ勝手に変えられたら不味い, ならprivateにせねばならん
プロパティ単独で他と関係がなく, 書き換えられても問題ないならpublicなりprotectedなり好きにすれば良い
メソッドは基本的にそのクラスのオブジェクトに対する可能な操作なわけだから, 外部に公開する部分についてはpublicにする他ない
内部だけで利用するようなユーティリティメソッドであればpublicにする必要はない
protectedは「外部には公開しないが継承先クラスからは見えてよい」場合に設定するもの, インスタンス側のスコープからは見えない(publicを包含しない)

カプセル化の原則は「外部から見えるものは最小限に」。
見せても良いけど見せなくても良いなら見せない, privateにすべし。
どうしても必要な場合にprotected, publicと順にアクセス権を広げていく。
0378nobodyさん2016/11/15(火) 03:25:11.75ID:???
初心者に対する回答としておよそ不適切な上に質問者の方が理解してるなこりゃ
0379nobodyさん2016/11/15(火) 10:05:33.84ID:???
メンバーにpublic設定するとOOPの主要概念の1つのカプセル化の意味がなくなるからな
0380nobodyさん2016/11/15(火) 10:38:50.40ID:???
>>379
そうでもないよ
POJO的なものはプロパティがpublicの方が、どう見ても便利だし
0381nobodyさん2016/11/15(火) 11:52:22.08ID:???
あのさ、そんなのケースバイケースだよ。

特定のクラスからしか操作したくないならprivateかprotectedにするけどさ、
OOPだと、DTOっつうものがあって、こいつはいろんなクラスをたらい回しされる。

そうすっと、仮にセッター作ってもどのみちいろんなところからいじられちゃうわけで、
もはや、privateやprotectedにする意味は殆ど無いし、むしろ、邪魔。

だから、用途に合った設定をすべきで

>publicはメソッドのみ。プロパティには使わない

みたいなステレオタイプな認識しかできないやつは、
そもそもグラマには向いてないのさ。
0382nobodyさん2016/11/15(火) 12:16:50.98ID:???
>>380
便利便利じゃないじゃなくてOOPの概念から離れちゃうってことね
とりあえず初心者は量産プログラマー目指して忠実にやったほうがいいと思うよ
実力伸ばすのは基本抑えてからでいい
0383nobodyさん2016/11/15(火) 13:15:07.23ID:???
単純getter/setterが必須とかいう頭の固い奴は、いつになったら撲滅されるのだろうか
0384nobodyさん2016/11/15(火) 13:18:22.00ID:???
結局は開発効率の問題なので、開発チームで納得の上、方針が共有されていればどっちでも問題ないんだよ・・・
理由は分からないけど周りに合わせる、なら別にいいある意味方針のカプセル化だ
みんなが好き勝手にコードを書くのが最悪
0385nobodyさん2016/11/15(火) 13:21:22.86ID:???
$stmt = $db->query('SELECT * FROM users');
$users = $stmt->fetchAll(PDO::FETCH_CLASS, 'User');
のUserクラスにも、setter, getterを定義するの?
0386nobodyさん2016/11/15(火) 13:28:22.94ID:???
外部からデータを隠蔽してgetter/setterをつけときゃカプセル化でしょ的な理解レベルの奴多そう
0387nobodyさん2016/11/15(火) 13:35:20.10ID:???
>>383
誰もそんなこと一言もいってないからな
0388nobodyさん2016/11/15(火) 13:55:25.19ID:???
>>387
お前の考えた最強OOPの話は、お前のブログでやってくれよ
0389nobodyさん2016/11/15(火) 14:32:40.91ID:???
会話出来ない人はツイッターへどうぞ
0390nobodyさん2016/11/15(火) 14:33:21.93ID:???
カプセル化については、ここの説明がわかりやすい
https://www.ogis-ri.co.jp/otc/hiroba/technical/concept.html
0391nobodyさん2016/11/15(火) 14:55:04.23ID:???
>>387=388
>>383はアホだからほっとけ

>>385
定義すれば型矯正ができるが、PHP様にはマジックメソッドというものがあるので
明示的にgetter/setterは作らない
0392nobodyさん2016/11/15(火) 14:56:00.40ID:???
>>387
>>383=388 はアホだからほっとけ

の間違い
0393nobodyさん2016/11/15(火) 15:07:35.55ID:???
>>391
マジックメソッド?
0394nobodyさん2016/11/15(火) 15:09:20.45ID:???
__get()
__set()
0395nobodyさん2016/11/15(火) 15:16:57.08ID:???
>>394
それを使ったらpublicプロパティを使うのと同じだから、カプセル化に反するのでは?
0396nobodyさん2016/11/15(火) 15:24:09.65ID:???
これが正解だと思うんだがどうだろう

https://twitter.com/s_osa_/status/515312406084345856?ref_src=twsrc%5Etfw
「外部に公開するインターフェイスを決定して、そのために必要な変数をプライベートで保持する」っていう感じ。
インターフェイスが先に来ることがわかっていれば>>395のように混乱することはない
0397nobodyさん2016/11/15(火) 15:33:38.65ID:???
>>396
別に混乱してないと思うが。

>>394は、
class User {}
と定義して
$users = $stmt->fetchAll(PDO::FETCH_CLASS, 'User');
を実行するという意味だと思うが、それだと
class User {
  public $user_id;
  public $name;
  public ...
}
と同じ事になり、カプセル化に反するのでは?という疑問。
0398nobodyさん2016/11/15(火) 15:56:55.53ID:???
つか、__get()/__set()をどう使うんだ?
0399nobodyさん2016/11/15(火) 16:08:24.97ID:???
public と public じゃないもの
については多弁なんだな
0400nobodyさん2016/11/15(火) 16:24:04.42ID:???
>>395
だから、カプセル化とかいう幻想は捨てろ。
ニーズに合った設計しろ。
0401nobodyさん2016/11/15(火) 16:24:24.30ID:???
>>391
カプセル化とかどうでもいい
>>391がどう__get/__setを使ってるのかだけ知りたい
0402nobodyさん2016/11/15(火) 16:24:46.42ID:???
>>398
冗談抜きで聞いてるの?
0403nobodyさん2016/11/15(火) 16:25:40.72ID:???
>>400
と、何かを主張したかのようなコメントを垂れ流すのに何か意味はあるのか?
0404nobodyさん2016/11/15(火) 16:26:42.62ID:???
>>402
マジですが・・・
0405nobodyさん2016/11/15(火) 16:27:01.81ID:???
>>403
何にも主張していない、お前がアホだと呆れているだけだ。
それ以上、何を望む?
0406nobodyさん2016/11/15(火) 16:28:38.53ID:???
いや、さすがにこの流れで「カプセル化とかいう幻想は捨てろ」はない
0407nobodyさん2016/11/15(火) 16:37:12.33ID:???
カプセル化って幻想だったんだ
0408nobodyさん2016/11/15(火) 16:42:27.27ID:???
>>406
なんでねーんだよ、なんでもかんでも隠蔽するべきじゃないって流れだろ?
0409nobodyさん2016/11/15(火) 16:43:40.25ID:???
>>379がアホ
>>381が正しい
0410nobodyさん2016/11/15(火) 16:45:53.53ID:???
>>404
しょうがねぇな、では、真面目に答える。
なんかうまく書き込みできねーから2回に分けてみるが、うまくいくかどうか。


> 385 : nobodyさん2016/11/15(火) 13:21:22.86 ID:???
> $stmt = $db->query('SELECT * FROM users');
> $users = $stmt->fetchAll(PDO::FETCH_CLASS, 'User');
> のUserクラスにも、setter, getterを定義するの?

>>385の流れの質問だったよな。

例えば users テーブルのカラムは

id:int
name:varchar(32)
gender:int
register_date:datetime

とする
0411nobodyさん2016/11/15(火) 16:47:40.26ID:???
>>404
この場合の User クラスは
class User
{
private $id = null; private $name = null; private $gender = null; private $register_date = null; public function __get($key){
if(!isset($key)){
throw new Exception("The key you specified is invalid.");
}
return $this->$key;
}
public function __set($key, $val){
switch($key){
case "id":
$this->$key = (int)$val; break;
case "name":
$this->$key = (string)$val; break;
case "gender":
$this->$key = (int)$val; break;
case "register_date":
$this->$key = new DateTime($val); break;
default:
throw new Exception("Invalid parameter has been given.");
}
}
}
こうすれば、fetchした時点で型付けされる。
俺はなんて優しいんだよ。ほかのバカどもは一生俺にひれ伏せ。
0412nobodyさん2016/11/15(火) 16:48:50.77ID:???
なんか、改行が多すぎるとか文句言われるから見にくいコードになったけど
__get/__setの使い方はこれでわかんだろ。
0413nobodyさん2016/11/15(火) 16:49:21.89ID:???
ゼロ年代前半からこの手の話題が続いてる
興味がある人はそっち探して読むといいよ

例:
「Oh No! DTO!」??オブジェクトとデータ構造Add Star (2004年)
http://kakutani.com/20040227.html#p01

もうそろそろ馬鹿の一つ覚えのように「カプセル化」を連呼するのはやめようぜ (2007年)
http://blogs.wankuma.com/kacchan6/archive/2007/10/12/101603.aspx
0414nobodyさん2016/11/15(火) 16:53:20.07ID:???
>>411
なんだ、ただのシンタックスシュガー的な使い方か
個別のgetter/setterとなんらかわらんわ
0415nobodyさん2016/11/15(火) 16:58:57.20ID:???
PDO::FETCH_ASSOC使った方がよっぽどまし。
0416nobodyさん2016/11/15(火) 17:02:48.07ID:???
>>411
intのデータ取得してintで戻ってこないのか?
データベース何?
0417nobodyさん2016/11/15(火) 17:03:29.21ID:???
>>414
>個別のgetter/setterとなんらかわらんわ

うわぁ、サル全開!

getterやsetterで同じこと実装してみろよ。
どうなるか予想つかないのかよゴミクズは。
0418nobodyさん2016/11/15(火) 17:04:21.54ID:???
>>416
MySQLは戻らんだろ。おまえのMySQLは戻るのか?
0419nobodyさん2016/11/15(火) 17:05:02.99ID:???
>>417
横からですいません。全く思いつきません…
よければ頂きたいです。
0420nobodyさん2016/11/15(火) 17:05:21.80ID:???
てか、ドライバ次第だけどな。
>>416はどんな環境でやってんのよ?
0421nobodyさん2016/11/15(火) 17:06:03.34ID:???
>>419
書いてみろよ、サル。
横から来たら努力しなくていいなんて法はねぇよ
0422nobodyさん2016/11/15(火) 17:11:23.40ID:???
>>411
そのマジックメソッドがないとどうなるか知ってるの?
0423nobodyさん2016/11/15(火) 17:19:14.05ID:???
case "id":
$this->$key = (int)$val; break;
これが動作することってあるの?
0424nobodyさん2016/11/15(火) 17:21:04.52ID:???
>>422
質問を質問で返すな、バカ
0425nobodyさん2016/11/15(火) 17:21:34.43ID:???
>>423
なんか間違えたか?
具体的に指摘しろ、腰抜け
0426nobodyさん2016/11/15(火) 17:22:56.61ID:???
相変わらずPHPスレはノータリンばっかりだな
0427nobodyさん2016/11/15(火) 17:23:55.21ID:???
試せばわかることを。
0428nobodyさん2016/11/15(火) 17:25:12.49ID:???
今日は FETCH_CLASS を知ったから得意満面でコードを書いたんだろうけど、なぁ
0429nobodyさん2016/11/15(火) 17:25:33.74ID:???
PDO::FETCH_LATEする前提なんだろうけど
0430nobodyさん2016/11/15(火) 17:26:26.11ID:???
>>429
それを知らなかったんでしょう。
>>410 では言及してない
0431nobodyさん2016/11/15(火) 17:32:07.76ID:???
プログラムが生まれて数十年
未だにカプセル化で論争が起こっています
0432nobodyさん2016/11/15(火) 17:34:26.74ID:???
>>427-428 みたいなアホはほおって置く

>>429-230 PHPマニュアルに記載されていない事なんてしりまっしぇーん
載ってからかたってくださぁい
0433nobodyさん2016/11/15(火) 17:35:31.85ID:???
今日もあいかわらずPHPerはバカばっかりだねぇ
0434nobodyさん2016/11/15(火) 17:37:21.98ID:???
>>432
http://php.net/manual/ja/pdostatement.fetch.php

PDO::FETCH_CLASSはプロパティセット後にコンストラクタ
逆にするにはPDO::FETCH_LATEを追加指定
0435nobodyさん2016/11/15(火) 17:38:13.86ID:???
FETCH_PROPS_LATEか
0436nobodyさん2016/11/15(火) 17:40:13.19ID:???
FETCH_PROPS_LATE ね。
使ったことがあれば FETCH_LATE が誤記だと気づくし、意図もわかる。
分からないってことは FETCH_PROPS_LATE を知らないし、もちろんそれを前提としてはいなかったってことだ。
0437nobodyさん2016/11/15(火) 17:40:55.66ID:???
>>434-435
対象がすり替わってる話なんか聞く耳もちまっせーん
今までの話に何の関係があるのかもわかりまっしぇーん
論旨をのべてくださーい

ばーか
0438nobodyさん2016/11/15(火) 17:41:54.06ID:???
> そもそもグラマには向いてないのさ。
これかっこいいよね。
0439nobodyさん2016/11/15(火) 17:42:01.37ID:???
>>436
>使ったことがあれば意図もわかる。

意図を述べて下しゃーい

ばーか
0440nobodyさん2016/11/15(火) 17:42:42.05ID:???
>>438
うん、お前はかっこ悪いけどね
0441nobodyさん2016/11/15(火) 17:42:42.33ID:???
>>437
すり替わってもないしドンピシャの話ですよ。聞く耳持たなくていいの?
0442nobodyさん2016/11/15(火) 17:43:14.81ID:???
>>441
だから「述べて下さい」って聞く耳持ってるのに言わないのは お ま え
0443nobodyさん2016/11/15(火) 17:43:50.71ID:???
>>437
つまりコンストラクタ呼び出し前にプロパティがセットされるから, 定義したマジックメソッドの__setter/__getterは呼ばれない
フェッチ時に型固定は実現されない
0444nobodyさん2016/11/15(火) 17:45:30.85ID:???
>>443
あほなの?

じゃあ、その後でプロパティ再セットすればいいだけじゃん。それで型強制される。
それがお前の答えだったの? 本当のノータリンだったの?
0445nobodyさん2016/11/15(火) 17:45:53.35ID:???
>>444
もっかいいうけど、試したら分かる
0446nobodyさん2016/11/15(火) 17:47:38.73ID:???
全部stringで帰ってきちゃうMySQLからとってきたデータを型矯正するのに
なんかいい方法無い?ってことで話した話なのに、

FETCH_PROPS_LATE したら 「__set 呼ばれないだろ!」 って、バカ?

呼べばいいいじゃん。てかPDO::FETCH_PROPS_LATE しなきゃいいじゃん
0447nobodyさん2016/11/15(火) 17:48:10.30ID:???
>>445

おまえは試さないと出来ることがわからないのか? サル
0448nobodyさん2016/11/15(火) 17:49:00.86ID:???
>>446
そも__setterいらないじゃん
コンストラクタで型固定再代入して終わり
0449nobodyさん2016/11/15(火) 17:50:19.60ID:???
>>448
おまえは別のタイプのサルだから黙ってろ、レベル低すぎて話にならない。
何でマジックメソッドがあるのかもわかってない。
0450nobodyさん2016/11/15(火) 17:51:14.12ID:???
おい、で、どうしたんだよ、 FETCH_PROPS_LATEバカ、
なんか答えろよ
0451nobodyさん2016/11/15(火) 17:52:23.57ID:???
かなりまえのシングルクオートエスケープバカと似た臭がするな…  FETCH_PROPS_LATE
0452nobodyさん2016/11/15(火) 17:52:24.21ID:???
かなりまえのシングルクオートエスケープバカと似た臭がするな…  FETCH_PROPS_LATE
0453nobodyさん2016/11/15(火) 17:52:25.75ID:???
__setが呼ばれるかどうかはFETCH_PROPS_LATE の有無に左右されない。
0454nobodyさん2016/11/15(火) 17:54:07.07ID:???
なにこれ? いらねーよ、そんなもん

429 : nobodyさん2016/11/15(火) 17:25:33.74 ID:???
PDO::FETCH_LATEする前提なんだろうけど
430 : nobodyさん2016/11/15(火) 17:26:26.11 ID:???
>>429
それを知らなかったんでしょう。
>>410 では言及してない
0455nobodyさん2016/11/15(火) 17:55:08.79ID:???
> 453 : nobodyさん2016/11/15(火) 17:52:25.75 ID:???
> __setが呼ばれるかどうかはFETCH_PROPS_LATE の有無に左右されない。

呼ばれなきゃ、自前でよべばいいだろ。
呼ばれないこと、自分でわかってんだろ?

わかってねーのか? ノータリン
0456nobodyさん2016/11/15(火) 17:56:37.64ID:???
でさ、

> $users = $stmt->fetchAll(PDO::FETCH_CLASS, 'User');

してさ、

> __setが呼ばれるかどうかはFETCH_PROPS_LATE の有無に左右されない。

__set()呼ばれないケースって、どんなの?

ちょっとこの無知な俺に教えてくれよ、サル
0457nobodyさん2016/11/15(火) 17:57:37.90ID:???
>>456
>>411 の時
0458nobodyさん2016/11/15(火) 17:59:15.36ID:???
>>457

へぇ、呼ばれないんだ。

何でそう思うの? ちょっとメカニズムを教えてくれる?
0459nobodyさん2016/11/15(火) 18:02:27.86ID:???
>>458
コンストラクタコール前は無名クラス(stdClassか)オブジェクトなんだから__setは未定義だろう
0460nobodyさん2016/11/15(火) 18:03:10.48ID:???
>>458
可視なプロパティだから
0461nobodyさん2016/11/15(火) 18:07:34.17ID:???
>>459
__construct()が無いことを言ってるのかな?

はいはい、それは正しいね。
掲示板の書き込みで端折った部分だが、君の指摘は正しい。

で、それだけのために、こんなにレス消費したの?
なんか、お前の最初の主張はそうところじゃなかったんじゃなかったっけ?

それとも、お前の趣旨は別のところ?
ちょっと具体的に説明してみなよ。おまえがチキンじゃなければさ。
0462nobodyさん2016/11/15(火) 18:08:17.44ID:???
>>460
おまえ、だれ? 別のやつ?
0463nobodyさん2016/11/15(火) 18:09:33.54ID:???
w
0464nobodyさん2016/11/15(火) 18:09:54.09ID:???
>>461
コンストラクタ未定義だろうが定義済みだろうが指定クラスのインスタンス構築のタイミングより先にプロパティへの代入が行われてる
0465nobodyさん2016/11/15(火) 18:14:33.34ID:???
そろそろ今日のレスの中からあらさがしをする頃合い。
それが3時間ぐらい続くよ。
0466nobodyさん2016/11/15(火) 18:20:06.54ID:???
なんか、「やってみればわかる」とかいう奴いるからてきとーにやってみたけど
__constructとか関係ねーじゃん ふつーにできるじゃん

>>459 こいつ、なんなの? 本当にアホなの
■ このスレッドは過去ログ倉庫に格納されています