トップページ⇒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の改造
0320nobodyさん2016/11/01(火) 18:42:49.19ID:???
せやで。要するに俺様にお前の情報を教えろって流れや。いつものアレ。
0321nobodyさん2016/11/01(火) 18:46:40.76ID:???
有償でもいいってことだから、鉄板のPDFlib試してみたら。
ライセンスキー入れなくてもウォーターマークが入るだけで、普通に使えたような記憶があるよ。
0322nobodyさん2016/11/01(火) 18:47:57.44ID:???
どういうライブラリを試して駄目だったのか聞いてみないとわからないじゃん。
FPDI以外試したのか?
ググったのか?(ぐぐりゃすぐに候補はでてくる)

直接PDFを操作する系のライブラリ以外は候補に出来るのか?
調べたか?
使ってみたか?

まず、これこれは駄目でしたって何で言えないんだよ。
0323nobodyさん2016/11/01(火) 18:49:23.70ID:???
>>322
なんで知ってるライブラリをすぐに書くことができないんだよ
また山ほどあるパターンか?
0324nobodyさん2016/11/01(火) 18:50:23.33ID:???
ググったらzend_pdfとかいうのがでてきたが
これは試したか?
0325nobodyさん2016/11/01(火) 18:51:30.53ID:hf4qXWjd
本格的にWEBプログラマーになりたいと思うのですが、よく使う機能や関数はありますか?
現在はある会社のHP担当としてアルバイトで働いています。
主にwordpressのループ処理+アクセス解析ばかりで、あまりPHPを覚えたとはいえない状態です。
何か覚えたほうがいいものがあれば、片っ端から教えてください。
現在は以下のことを学習済みです
・型の違い
・if・for・switch構文
・文字列の操作
・日付の操作
・class作成。継承とかはほとんどしたことありません。
・gitは自分でリポジトリを作ってpush、pull、ブランチを作成したり、バージョンを戻したりと基本的な事ができるようになったレベルです
・SQLはコピーペーストでSELECTやINSERTを使えるレベルです

何から覚えるとよいでしょうか?
それともwordpressを極めたほうがいいのでしょうか?
0326nobodyさん2016/11/01(火) 18:51:39.21ID:???
>>323
なんで俺が知ってるライブラリを列挙しないといけないんだよw
0327nobodyさん2016/11/01(火) 18:53:30.64ID:???
>>326
要求仕様を満たしてるライブラリをいくつか挙げるだけじゃん。
0328nobodyさん2016/11/01(火) 19:09:47.89ID:???
>>325
目指すところにもよると思うけど、見てくれの成果を急ぐならフレームワーク使ってなんか作ってみれば?
くれぐれもインクルードガードを理解できないような大人にならないように気を付けて。
0329nobodyさん2016/11/01(火) 19:25:24.08ID:???
>>325
ログイン機能
セッション周りは知っておいたほうがいい。全然知らないと死ぬぞ
0330sage2016/11/01(火) 19:45:20.09ID:p6F2bD12
https://www.youtube.com/watch?v=tY-xyCbzdqY

https://www.youtube.com/watch?v=NJYs5GTmdcg
0331nobodyさん2016/11/01(火) 19:46:50.59ID:???
>>330
アンチかファンかわからない書き込みって混乱するからやめてくれ〜
0332nobodyさん2016/11/01(火) 20:34:29.15ID:???
>>325
WEB屋でいつづけるならPHPなんか覚えたって役に立たない。
Wordpressという名の言語を覚えたほうがいい。

プログラマーになりたいならWordpressみたなゴミクズにはできるだけ関わらない方がいい。

>何から覚えるとよいでしょうか?

なにはなくともforeach。
0333nobodyさん2016/11/01(火) 22:18:22.00ID:???
むしろphp覚えておけば確実にあと十年はご飯食えると思うがな。
0334nobodyさん2016/11/02(水) 00:11:25.05ID:SZFpptjM
334


なんでや!阪神関係ないやろ!
0335nobodyさん2016/11/03(木) 00:14:03.81ID:???
>>328,329,332,333
webデザイナーとwebプログラマーを混同していました。混同していることがわかっただけでも大きな前進でした。
もう少し自分が何やりたいかを考えてみます。ありがとうございました。
0336nobodyさん2016/11/03(木) 19:15:34.27ID:2AD8+1eb
私は元創価の会員でした。
すぐ隣に防衛省の背広組の官舎があるのですが、
自分の家の窓にUSB接続のwebカメラを貼り付けて、そこの動画を撮影し続け、
学会本部に送っていました。

別に大したものは写っていません。ごみ出しとか奥さんが子供を遊ばせている所とか。
官舎が老朽化して使われなくなってから、
今まで法人税(うちは自営業です)をほぼ払わなくても済んでいたのが、
もう守ってやれないのでこれからは満額申告するように言われました。
納得がいかないと言うと、君は自業自得で餓鬼地獄に落ちる、
朝夕南無妙法蓮華経と三千回ずつ唱えて心をきれいにしなさいと言われ
馬鹿らしくなって脱会しました。

それ以来、どこへ行くにもぞろ目ナンバーの車につけまわされたり大変な日々です。
全部自分の出来心から起きたことで、どこに訴えるわけにもいかないのですが、
なんとかあの人たちと縁を切って新しい始まりを迎える方法はないんだろうか。
0337�@2016/11/05(土) 01:03:25.46ID:/n6BEXdW
/home/{user_name}/www
.htaccess に以下のコードを書いています。

SetEnvIf Host "^www\.patapata\.net$" hos_ok
SetEnvIf Host "^patapata\.net$" hos_ok
order deny,allow
deny from all
allow from env=hos_ok
0338�A2016/11/05(土) 01:04:26.00ID:/n6BEXdW
さくらインターネットで
www配下に patapata.net へアクセスさせる為のディレクトリしか
作成していなかったので、これまではこれでよかったのですが

テストコードを直書きしてブラウザからさくらインターネットのサブドメインからもアクセス
できる様にしようと思っていますが。
0339�B2016/11/05(土) 01:06:34.05ID:/n6BEXdW
aaa/test-code/index.php
↓ ブラウザからはこんな感じでアクセスしたいです。
0340nobodyさん2016/11/05(土) 12:44:54.07ID:???
もうちょっと分かりやすく書いてくれる?
0341nobodyさん2016/11/05(土) 13:00:22.58ID:???
テストだったら自分のIPならOKにしちゃう
0342nobodyさん2016/11/07(月) 11:55:19.06ID:???
古いコードを見ていて知ったのですが
foo;
のように未定義の変数を$なしで記述する方法に名前はありますか?
0343nobodyさん2016/11/11(金) 00:31:34.65ID:NJy7MIUs
PHP って人気ないの?
0344nobodyさん2016/11/11(金) 06:21:08.35ID:???
昔ほど人気はないけど
まだまだシェアは高いほう
0345nobodyさん2016/11/11(金) 22:06:51.01ID:???
$searchFilterClassName = SearchFilters::class.'\\'.$classNames[$key].'SearchFilter';
$searchFilter = new $searchFilterClassName();
$searchFilter->filterAll($query, $requests);

こんな感じで呼び出すクラスを動的に変更してるけど、もしかしてバッドプラクティスになる?
0346nobodyさん2016/11/11(金) 22:10:27.95ID:???
全然普通の処理だけど、
命名が気持ち悪い
0347nobodyさん2016/11/12(土) 08:19:25.44ID:???
>>346
どこが気持ち悪いのですか?
0348nobodyさん2016/11/12(土) 08:29:00.73ID:???
例えば休日のお昼にレストランに行って「名前を書いてお待ち下さい」と言われたら
「直江山城守従五位下藤原朝臣兼続」と律儀に書きそうな所
0349nobodyさん2016/11/12(土) 08:40:20.36ID:???
>>348
やっぱり冗長的すぎますか
具体的にどう略しますか?
0350nobodyさん2016/11/12(土) 09:10:45.07ID:UTGbJvCc
案件はJAVAが一番多くて次にPHP
PHPも進化しててそう簡単には廃れないと思うよ
フレームワークなんてクラスと継承使いまくるし昔とは全然違う
JAVAっぽい感じすらある

もし他のやるってならrubyかパイソンかJAVAかな
PHPは簡単に始められるということで人によってレベルに差がありすぎる
フレームワークでクラス使えてDBやApacheまで理解して使えるならJAVAプログラマーと変わらないレベル
0351nobodyさん2016/11/12(土) 09:31:50.95ID:???
phpってechoするだけの言語と思ってたらいつのまにか抽象クラスとか実装されてて驚いた
0352nobodyさん2016/11/12(土) 10:24:09.54ID:???
>>349
命名は、スコープを意識した方が良い。
例えば、$searchFilterClassName は目的のクラスをnewする時にしか使わないんじゃない?

そうすると、その変数の必要有効範囲は2行しかない。
もし、他の場所でクラス名を知りたければ
$searchFilter内で定義済み定数 __CLASS__ を使って参照できるから。

そんな、その場限りの変数に仰々しい名前をつけるのは無駄な上に
全く別の人がコードを読む時には
いかにも意味がありそうな命名なので追いかけてみたら、その場所でしか使っていなかったとかで
大して意味が無い余計な情報になってかえってコードが読みにくい。

そんなのは$classNameで十分。
俺は「使い捨てだ」ということを強調するために場合によっては1,2文字変数を使うこともある。
0353nobodyさん2016/11/12(土) 11:43:15.72ID:???
>>352
なるほどありがとうございます
0354nobodyさん2016/11/12(土) 11:53:15.24ID:???
>>353
長い開発経験の中で出した、あくまでも俺の答えだから、そうは思っていないやつも居る。
だから「絶対」ではない。個人的意見だと思ってもらって構わない。

ただ、クソコードだなぁと思うコードの半分は
使い捨ての変数に$youAreFuckNSonOfABichみたいな命名をしている特徴がある。
Javaでプログラムを学んだJava脳の奴に多い。

もう半分のクソは本当にただのクソで、いかにもPHPerといったコード。
0355nobodyさん2016/11/12(土) 12:03:17.81ID:UTGbJvCc
>>352
うちのリーダーか?笑
使い捨て関数使ってるけど開発効率考えたらそれが良いと思う
使い回して深く追う可能性のあるものだけちゃんと名前付けておいた方が良いね
0356nobodyさん2016/11/12(土) 12:07:06.42ID:UTGbJvCc
他人や後の人が見る可能性が高いものはちゃんと名前つけて
自分やその時の現場のメンバーだけ使うものは一文字で良いだろうね
何かしらのツールで共有しておけば良い
0357nobodyさん2016/11/12(土) 12:43:16.19ID:???
お前のリーダーじゃないが、普通の頭の人はそういう結論出すよ。

他人が書いたコードリーディンングする時、重要なのは「その変数が何であるか」

「何が入っているかが分かる」事のみに着目して長ったらしい名前をつけられると、
ほんの数行先で出てきた変数が、
前に出てきたそれと同じなのか違うのかが把握できない。

大体、1つの処理単位で利用する変数はにた名前になりやすいから
名前が長いと余計わかりづらい。

人間が一目で判別できる文字数は5,6文字が限度だろう。

「その変数が何であるか分かる」ってことと「その変数に何が入っているか分かる」ってことはイコールではなく、
必要なのは「何が入っているかわかる」ことではない。
0358nobodyさん2016/11/13(日) 01:59:25.88ID:???
本読みなさいってことだな
0359nobodyさん2016/11/13(日) 09:57:04.08ID:???
変数追うってのも関数がファットな証拠なんだけどね
0360nobodyさん2016/11/13(日) 13:08:17.48ID:???
>>359
PHPはそんなコードばっかなのよ。
0361nobodyさん2016/11/13(日) 14:33:14.76ID:???
変数を追うどころか、ヒアドキュメントで書かれたSQLが500行以上になってるクソコードを引き継いだことがあるぜw
0362nobodyさん2016/11/13(日) 15:27:12.88ID:???
echoで文字列を出力する時、カンマとピリオドどちらでつなげればよいでしょうか?
0363nobodyさん2016/11/13(日) 16:12:35.87ID:???
echo $fire.'unko'
echo "{$fire}unko"
0364nobodyさん2016/11/13(日) 19:55:24.39ID:???
イメージ的にドットは
$c = $a. $b;
echo $c;

カンマは
echo $a;
echo $b;
0365nobodyさん2016/11/13(日) 21:06:29.54ID:???
条件でdefinedしてからdefineするコードって、二重定義のエラーを防止するためにやってるんでしょうけど、
これって意味あるんですか?
定数がすでにあった場合定義されませんが、期待している値じゃなかったらバグの原因になるだけなので、
逆にエラー出したほうがいいと思うんですが。
0366nobodyさん2016/11/14(月) 01:32:44.29ID:???
だれかほかの人が上書きしてもいいですよというサイン
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
横からですいません。全く思いつきません…
よければ頂きたいです。
■ このスレッドは過去ログ倉庫に格納されています