トップページ⇒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の改造
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 こいつ、なんなの? 本当にアホなの
0467nobodyさん2016/11/15(火) 18:22:02.56ID:???
本当に FETCH_PROPS_LATEバカ は何だったの?
何が主張したかったの?
PHPerって、本当にアホだらけなの?
0468nobodyさん2016/11/15(火) 18:24:20.84ID:???
めでたしめでたし
0469nobodyさん2016/11/15(火) 18:24:29.09ID:???
>>467
敷居が低いならそりゃ平均は下がる
どういうコード書いても表示されればいいしな
諦めよう
0470nobodyさん2016/11/15(火) 18:26:43.68ID:???
>>469
別に、敷居が低いことはなんとも思わねーよ

問題なのは、さもわかってる風な体で「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:???
ま さ し く ご み く ず PDO::FETCH_LATE
0474nobodyさん2016/11/15(火) 18:43:08.25ID:???
流れはええよ。
>>411 のコードで __set が呼ばれたってことなの?
0475nobodyさん2016/11/15(火) 18:47:08.10ID:???
伸びてると思ったら馬鹿が一人いるな>>470
0476nobodyさん2016/11/15(火) 19:13:37.91ID:???
>>474
やってみれば良いじゃん、サル

問題点があるならそれを言えば良いじゃん、サル

なんでこう、エテしかいないの?
0477nobodyさん2016/11/15(火) 19:14:58.41ID:???
>>475
論拠を言えよ、ノータリン
0478nobodyさん2016/11/15(火) 19:22:56.40ID:???
ま さ し く ご み く ず PDO::FETCH_LATE
0479nobodyさん2016/11/15(火) 19:52:19.79ID:???
>>466
呼ばれないじゃん, 嘘まで書くのかよ

実行コード
ttp://ideone.com/79O9un
0480nobodyさん2016/11/15(火) 19:56:08.76ID:???
実行環境は PHP7.0.10 + MariaDB10.1
0481nobodyさん2016/11/15(火) 20:27:32.63ID:???
流れ的に彼の環境では呼ばれてるはずなんだよなぁ
0482nobodyさん2016/11/15(火) 21:19:11.95ID:???
>>472
PHPで見てればその通りだけどPDOはC言語で実装されてるんだからどうとでも出来る
0483nobodyさん2016/11/15(火) 22:44:45.13ID:???
php的にはstdclassかなんか構造体的なものを作った後にクラスにキャストするとかだろうから、別にインスタンス無くても初期化(何の?)は動くんじゃね。
0484nobodyさん2016/11/16(水) 21:25:01.78ID:???
>>479

嘘は書いてないが、間違いはあったので訂正する。

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は呼ばれない
フェッチ時に型固定は実現されない
0487nobodyさん2016/11/16(水) 21:48:29.26ID:???
>>484
そらそうだろ
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.");
  }
 }
}
0489nobodyさん2016/11/16(水) 22:04:23.58ID:???
>>484
はぁーPDOからはprivateでも可視扱いになってんのか
確かに>>443とかは間違ってたわ
0490nobodyさん2016/11/16(水) 23:41:54.81ID:???
>>488
メンバを作成したうえでマジックメソッドを空で実装するのがいい
理由はもういいよな
0491nobodyさん2016/11/17(木) 00:28:35.02ID:???
PHPでjson_encodeしたデータをjavascriptの変数にセットし、オブジェクトに変換して扱う場合、
オブジェクトに変換した時点でユニコードエスケープが解除されて
スクリプトが実行されてしまうのですが、
ただの文字列として扱うためにはどうすればいいでしょうか。

-- 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:???
>>491
・変なエスケープはしない
・Javascriptとしてのコードを表す文字列でも、そのままやりとりする
・ブラウザに表示する必要があるなら、そのときエスケープして表示する
0493nobodyさん2016/11/18(金) 16:06:40.72ID:KhlvsXrE
PHP7で

class 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:???
普通に5でもエラー出るだろ
0495nobodyさん2016/11/18(金) 17:05:55.04ID:???
>>493
ググったらこういう解決法が見つかったけど、
> 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:???
> if (PHP_MAJOR_VERSION >= 7) {
この条件は
defined("E_STRICT")のほうがいいんじゃね
0497nobodyさん2016/11/18(金) 21:22:41.60ID:???
>>493
Liskovの置換原則に反するから解決は出来てもバッドプラクティスよ
0498nobodyさん2016/11/18(金) 22:03:39.69ID:???
>>496
賛成
0499nobodyさん2016/11/19(土) 00:10:03.79ID:???
493です。みなさん色んな意見ありがとうございます。

やっぱり継承先と同名のメソッドを使うなら引数も同じにした方が良いですね
それが正しい書き方という事でしたらそういう書き方を定着させます
0500nobodyさん2016/11/19(土) 10:10:40.07ID:WWO/xMNV
PDOがどうとか言ってるけどフレームワーク使ってたらPDO自体使わないだろ
時代は変わったな
0501nobodyさん2016/11/19(土) 10:50:25.36ID:???
フレームワークがないと何も出来ない無能は黙ってなさい。
0502nobodyさん2016/11/19(土) 11:26:28.38ID:WWO/xMNV
>>501
自分で0から作れるけど仕事だともはやほとんどフレームワーク使うでしょ
フルスクラッチは人によって仕組みに差が出来すぎるから敬遠される
0503nobodyさん2016/11/19(土) 11:57:33.13ID:???
そりゃ業務用アプリケーションならFW使うでしょうね
お前らみんな業務でPHP使ってるの?
0504nobodyさん2016/11/19(土) 12:11:37.67ID:WWO/xMNV
俺は使ってるよ
webだし
そして圧倒的人手不足笑
0505nobodyさん2016/11/19(土) 20:21:47.92ID:???
お前らはフレームワーク使うべきデカイのしかつくらないのか。
ちょっとしたバッチ処理とか書かないのか。

PHPの良さは、そういう小さいのも手軽に作れることなのに。
0506nobodyさん2016/11/19(土) 20:38:53.12ID:???
>>505
すごいっすね先輩w
0507nobodyさん2016/11/19(土) 22:40:23.45ID:WWO/xMNV
個人的には小さいのも作ってるよ
しかし小さいのならVBとかでも良いけどな
windows上で動くし
0508nobodyさん2016/11/20(日) 01:13:38.10ID:???
「小さいの」が具体的に何かによるだろうが、本当に小さいのならHTMLの中にscriptタグでJavaScript書いてブラウザにドラッグするわ
0509nobodyさん2016/11/20(日) 01:16:50.12ID:???
オレオレフレームワークでもPDOは使ってません
0510nobodyさん2016/11/20(日) 07:04:30.67ID:???
ログインして家のカメラにアクセスしたりサーバ内のディレクトリ監視するやつこの前書いたけど
300行程度だったしいちいちFWなんて使わんよ
0511nobodyさん2016/11/20(日) 11:44:14.05ID:???
それってPHPでかけるの?socketとか?
0512nobodyさん2016/11/20(日) 12:07:26.20ID:???
寧ろ何でPHPじゃ書けないと思った?
0513nobodyさん2016/11/20(日) 12:09:28.71ID:???
何故PHPで書こうと思った
0514nobodyさん2016/11/20(日) 13:41:10.44ID:???
pythonで書けばコード量は1/3ぐらいに減るかもしれんが
そしたらますますFWいらないな
まああっちはPHPのように書くためにFW導入することになるだろうけど
0515nobodyさん2016/11/20(日) 13:53:01.44ID:uNQTWMm/
ApacheあればPHPは動くからな
ここは週末プログラマーが多いのか
そりゃPHPのフレームワークはwebサイト向けのが大半だからそれ以外のプログラムなら使わないわな
0516nobodyさん2016/11/20(日) 14:52:56.69ID:???
普段PHPメインに使ってるやつが、必要もないのに別の言語でコード書くわけねーじゃん
0517nobodyさん2016/11/20(日) 23:37:09.97ID:???
ほんとそれ。
てか、PHPとMySQLとJavascript以外でプログラム関係は覚える気はない。
アプリ開発とか必要になったら素直に専門家に依頼する
0518nobodyさん2016/11/20(日) 23:45:57.16ID:???
>516だが、それもどうかと思う。
俺が言ったのはそういうことじゃない。
0519nobodyさん2016/11/21(月) 02:25:45.35ID:???
どの言語がメインとか、そういう感覚もなくなっちゃったなぁ
0520nobodyさん2016/11/21(月) 22:35:29.33ID:???
ゲーム作るにはPHPじゃ無理だな
スペースインベーダーも作れないんじゃないか
0521nobodyさん2016/11/21(月) 22:53:33.78ID:???
ウィンドウシステムのAPI叩ければ可能だから原理的にはどうとでもなる
勿論態々PHPでそんなことをするぐらいならJavaやC#で書く
0522nobodyさん2016/11/21(月) 22:54:27.95ID:???
>>520
それはレベルが低いとしか言いようがないわ。余裕で作れるだろう
phpで作る理由がないから作らんけど
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:???
別に争っているようにはみえないが
■ このスレッドは過去ログ倉庫に格納されています