PHP質問・雑談スレ 2【初心者お断り(ROM歓迎)】©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん 転載ダメ©2ch.net
2016/10/17(月) 21:44:12.59ID:???初心者お断り(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の改造
0429nobodyさん
2016/11/15(火) 17:25:33.74ID:???0431nobodyさん
2016/11/15(火) 17:32:07.76ID:???未だにカプセル化で論争が起こっています
0432nobodyさん
2016/11/15(火) 17:34:26.74ID:???>>429-230 PHPマニュアルに記載されていない事なんてしりまっしぇーん
載ってからかたってくださぁい
0433nobodyさん
2016/11/15(火) 17:35:31.85ID:???0434nobodyさん
2016/11/15(火) 17:37:21.98ID:???http://php.net/manual/ja/pdostatement.fetch.php
PDO::FETCH_CLASSはプロパティセット後にコンストラクタ
逆にするにはPDO::FETCH_LATEを追加指定
0435nobodyさん
2016/11/15(火) 17:38:13.86ID:???0436nobodyさん
2016/11/15(火) 17:40:13.19ID:???使ったことがあれば FETCH_LATE が誤記だと気づくし、意図もわかる。
分からないってことは FETCH_PROPS_LATE を知らないし、もちろんそれを前提としてはいなかったってことだ。
0437nobodyさん
2016/11/15(火) 17:40:55.66ID:???対象がすり替わってる話なんか聞く耳もちまっせーん
今までの話に何の関係があるのかもわかりまっしぇーん
論旨をのべてくださーい
ばーか
0438nobodyさん
2016/11/15(火) 17:41:54.06ID:???これかっこいいよね。
0443nobodyさん
2016/11/15(火) 17:43:50.71ID:???つまりコンストラクタ呼び出し前にプロパティがセットされるから, 定義したマジックメソッドの__setter/__getterは呼ばれない
フェッチ時に型固定は実現されない
0444nobodyさん
2016/11/15(火) 17:45:30.85ID:???あほなの?
じゃあ、その後でプロパティ再セットすればいいだけじゃん。それで型強制される。
それがお前の答えだったの? 本当のノータリンだったの?
0446nobodyさん
2016/11/15(火) 17:47:38.73ID:???なんかいい方法無い?ってことで話した話なのに、
FETCH_PROPS_LATE したら 「__set 呼ばれないだろ!」 って、バカ?
呼べばいいいじゃん。てかPDO::FETCH_PROPS_LATE しなきゃいいじゃん
0449nobodyさん
2016/11/15(火) 17:50:19.60ID:???おまえは別のタイプのサルだから黙ってろ、レベル低すぎて話にならない。
何でマジックメソッドがあるのかもわかってない。
0450nobodyさん
2016/11/15(火) 17:51:14.12ID:???なんか答えろよ
0451nobodyさん
2016/11/15(火) 17:52:23.57ID:???0452nobodyさん
2016/11/15(火) 17:52:24.21ID:???0453nobodyさん
2016/11/15(火) 17:52:25.75ID:???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:???> __setが呼ばれるかどうかはFETCH_PROPS_LATE の有無に左右されない。
呼ばれなきゃ、自前でよべばいいだろ。
呼ばれないこと、自分でわかってんだろ?
わかってねーのか? ノータリン
0456nobodyさん
2016/11/15(火) 17:56:37.64ID:???> $users = $stmt->fetchAll(PDO::FETCH_CLASS, 'User');
してさ、
> __setが呼ばれるかどうかはFETCH_PROPS_LATE の有無に左右されない。
__set()呼ばれないケースって、どんなの?
ちょっとこの無知な俺に教えてくれよ、サル
0459nobodyさん
2016/11/15(火) 18:02:27.86ID:???コンストラクタコール前は無名クラス(stdClassか)オブジェクトなんだから__setは未定義だろう
0461nobodyさん
2016/11/15(火) 18:07:34.17ID:???__construct()が無いことを言ってるのかな?
はいはい、それは正しいね。
掲示板の書き込みで端折った部分だが、君の指摘は正しい。
で、それだけのために、こんなにレス消費したの?
なんか、お前の最初の主張はそうところじゃなかったんじゃなかったっけ?
それとも、お前の趣旨は別のところ?
ちょっと具体的に説明してみなよ。おまえがチキンじゃなければさ。
0463nobodyさん
2016/11/15(火) 18:09:33.54ID:???0464nobodyさん
2016/11/15(火) 18:09:54.09ID:???コンストラクタ未定義だろうが定義済みだろうが指定クラスのインスタンス構築のタイミングより先にプロパティへの代入が行われてる
0465nobodyさん
2016/11/15(火) 18:14:33.34ID:???それが3時間ぐらい続くよ。
0466nobodyさん
2016/11/15(火) 18:20:06.54ID:???__constructとか関係ねーじゃん ふつーにできるじゃん
>>459 こいつ、なんなの? 本当にアホなの
0467nobodyさん
2016/11/15(火) 18:22:02.56ID:???何が主張したかったの?
PHPerって、本当にアホだらけなの?
0468nobodyさん
2016/11/15(火) 18:24:20.84ID:???0470nobodyさん
2016/11/15(火) 18:26:43.68ID:???別に、敷居が低いことはなんとも思わねーよ
問題なのは、さもわかってる風な体で「PDO::FETCH_LATEする前提なんだろうけど」「それを知らなかったんでしょう。」とか
恥ずかしげもなく書く馬鹿だ。
おまえがなんにも分かってねーじゃん。
こいつ、本当にシングルクオートエスケープバカ臭するよ
0471nobodyさん
2016/11/15(火) 18:28:35.38ID:???> 464 : nobodyさん2016/11/15(火) 18:09:54.09 ID:???
> >>461
> コンストラクタ未定義だろうが定義済みだろうが指定クラスのインスタンス構築のタイミングより先にプロパティへの代入が行われてる
やってみればわかるよ、サル
0472nobodyさん
2016/11/15(火) 18:32:50.96ID:???インスタンス出来てないのに、どうやってそのプロパティにアクセスするんだよw
ちょっとそのメカニズムを説明してくれよw
0473nobodyさん
2016/11/15(火) 18:38:16.81ID:???0476nobodyさん
2016/11/15(火) 19:13:37.91ID:???やってみれば良いじゃん、サル
問題点があるならそれを言えば良いじゃん、サル
なんでこう、エテしかいないの?
0478nobodyさん
2016/11/15(火) 19:22:56.40ID:???0480nobodyさん
2016/11/15(火) 19:56:08.76ID:???0481nobodyさん
2016/11/15(火) 20:27:32.63ID:???0483nobodyさん
2016/11/15(火) 22:44:45.13ID:???0484nobodyさん
2016/11/16(水) 21:25:01.78ID:???嘘は書いてないが、間違いはあったので訂正する。
private $id = null;
private $name = null;
private $gender = null;
private $register_date = null;
これを削除して実行してみろ。
ちゃんと呼ばれるから。
0485nobodyさん
2016/11/16(水) 21:32:09.93ID:???全く自分の頭を使わずに「呼ばれないじゃん」と騒ぐバカのためにこんなに優しく教えてやるとは…
>>479は、毎晩俺に感謝の意を表してから寝ろよ。
0486nobodyさん
2016/11/16(水) 21:45:52.76ID:???-------------------------------------------------------
434 : nobodyさん2016/11/15(火) 17:37:21.98 ID:???
>>432
http://php.net/manual/ja/pdostatement.fetch.php
PDO::FETCH_CLASSはプロパティセット後にコンストラクタ
逆にするにはPDO::FETCH_LATEを追加指定
443 : nobodyさん2016/11/15(火) 17:43:50.71 ID:???
>>437
つまりコンストラクタ呼び出し前にプロパティがセットされるから, 定義したマジックメソッドの__setter/__getterは呼ばれない
フェッチ時に型固定は実現されない
0488nobodyさん
2016/11/16(水) 21:56:55.12ID:???class Hoge
{
private $p_id = null;
private $p_name = null;
private $p_gender = null;
private $p_register_date = null;
(略)
public function __set($key, $val){
echo('__set called'.PHP_EOL);
switch($key){
case "id":
$key = "p_{$key}";
$this->$key = (int)$val; break;
case "name":
$key = "p_{$key}";
$this->$key = (string)$val; break;
case "gender":
$key = "p_{$key}";
$this->$key = (int)$val; break;
case "register_date":
$key = "p_{$key}";
$this->$key = new DateTime($val); break;
default:
throw new Exception("Invalid parameter has been given.");
}
}
}
0491nobodyさん
2016/11/17(木) 00:28:35.02ID:???オブジェクトに変換した時点でユニコードエスケープが解除されて
スクリプトが実行されてしまうのですが、
ただの文字列として扱うためにはどうすればいいでしょうか。
-- php
$params = [
'hoge' => '<script>alert(1);</script>'
];
$data = json_encode($response, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
-- javasciript
var params = <?php echo $data;?>
0492nobodyさん
2016/11/17(木) 11:13:34.00ID:???・変なエスケープはしない
・Javascriptとしてのコードを表す文字列でも、そのままやりとりする
・ブラウザに表示する必要があるなら、そのときエスケープして表示する
0493nobodyさん
2016/11/18(金) 16:06:40.72ID:KhlvsXrEclass Foo {
public function method($options) {
}
}
class Bar extends Foo {
public function method() {
parent::method();
}
}
$obj = new Bar;
$obj->method();
としたらDeclaration関係のエラーになるのですが、
・継承先の親クラスに同名のメソッドがあるから
・そのメソッドで$options指定しているのに、子クラスではしていないから
だと思っているのですが、PHP5系では問題がありませんでした。
これは7から変わったということでしょうか?
そして、エラーを表示しない以外で対策はないのでしょうか?
0494nobodyさん
2016/11/18(金) 16:33:26.03ID:???0495nobodyさん
2016/11/18(金) 17:05:55.04ID:???ググったらこういう解決法が見つかったけど、
> if (PHP_MAJOR_VERSION >= 7) {
> set_error_handler(function ($errno, $errstr) {
> return strpos($errstr, 'Declaration of') === 0;
> }, E_WARNING);
> }
class Barを変更できるならそうした方がいいと思う。
0496nobodyさん
2016/11/18(金) 20:24:06.28ID:???この条件は
defined("E_STRICT")のほうがいいんじゃね
0499nobodyさん
2016/11/19(土) 00:10:03.79ID:???やっぱり継承先と同名のメソッドを使うなら引数も同じにした方が良いですね
それが正しい書き方という事でしたらそういう書き方を定着させます
0500nobodyさん
2016/11/19(土) 10:10:40.07ID:WWO/xMNV時代は変わったな
0501nobodyさん
2016/11/19(土) 10:50:25.36ID:???0502nobodyさん
2016/11/19(土) 11:26:28.38ID:WWO/xMNV自分で0から作れるけど仕事だともはやほとんどフレームワーク使うでしょ
フルスクラッチは人によって仕組みに差が出来すぎるから敬遠される
0503nobodyさん
2016/11/19(土) 11:57:33.13ID:???お前らみんな業務でPHP使ってるの?
0504nobodyさん
2016/11/19(土) 12:11:37.67ID:WWO/xMNVwebだし
そして圧倒的人手不足笑
0505nobodyさん
2016/11/19(土) 20:21:47.92ID:???ちょっとしたバッチ処理とか書かないのか。
PHPの良さは、そういう小さいのも手軽に作れることなのに。
0507nobodyさん
2016/11/19(土) 22:40:23.45ID:WWO/xMNVしかし小さいのならVBとかでも良いけどな
windows上で動くし
0508nobodyさん
2016/11/20(日) 01:13:38.10ID:???0509nobodyさん
2016/11/20(日) 01:16:50.12ID:???0510nobodyさん
2016/11/20(日) 07:04:30.67ID:???300行程度だったしいちいちFWなんて使わんよ
0511nobodyさん
2016/11/20(日) 11:44:14.05ID:???0512nobodyさん
2016/11/20(日) 12:07:26.20ID:???0513nobodyさん
2016/11/20(日) 12:09:28.71ID:???0514nobodyさん
2016/11/20(日) 13:41:10.44ID:???そしたらますますFWいらないな
まああっちはPHPのように書くためにFW導入することになるだろうけど
0515nobodyさん
2016/11/20(日) 13:53:01.44ID:uNQTWMm/ここは週末プログラマーが多いのか
そりゃPHPのフレームワークはwebサイト向けのが大半だからそれ以外のプログラムなら使わないわな
0516nobodyさん
2016/11/20(日) 14:52:56.69ID:???0517nobodyさん
2016/11/20(日) 23:37:09.97ID:???てか、PHPとMySQLとJavascript以外でプログラム関係は覚える気はない。
アプリ開発とか必要になったら素直に専門家に依頼する
0518nobodyさん
2016/11/20(日) 23:45:57.16ID:???俺が言ったのはそういうことじゃない。
0519nobodyさん
2016/11/21(月) 02:25:45.35ID:???0520nobodyさん
2016/11/21(月) 22:35:29.33ID:???スペースインベーダーも作れないんじゃないか
0521nobodyさん
2016/11/21(月) 22:53:33.78ID:???勿論態々PHPでそんなことをするぐらいならJavaやC#で書く
0523nobodyさん
2016/11/21(月) 23:19:13.81ID:???0524nobodyさん
2016/11/22(火) 09:19:14.77ID:???0525nobodyさん
2016/11/22(火) 13:36:40.53ID:???0526nobodyさん
2016/11/22(火) 13:52:38.84ID:???0527nobodyさん
2016/11/22(火) 14:39:31.31ID:???0528nobodyさん
2016/11/22(火) 14:57:57.19ID:???■ このスレッドは過去ログ倉庫に格納されています