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

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

レス数が1000を超えています。これ以上書き込みはできません。
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の改造
0002nobodyさん2016/10/17(月) 21:48:16.11ID:???
NG推奨Word
猿
蟹
サル
カニ
ガニ
ゴミクズ
0003nobodyさん2016/10/17(月) 22:01:54.11ID:???
>>2
ピテカントロプス乙
0004nobodyさん2016/10/17(月) 22:49:19.07ID:???
前スレのエセ関西弁 >>997 へ

俺が書いたO/Rマッパーの場合、IN句に対応するコードは14行だな。

14行で渡される値がIN句に適切かどうか、SQLインジェクション対策から各種データベースへの汎用対応まで全部やってる。
勿論、ifやforeachみたいなのはちゃんと一行としてカウントしてるよ。

お前が書くコード、どんなことになってるの?
ちょっと説明してくれないか?

なぁ、そろそろ聞いていいか?
お前、越前ガニ君じゃないのか?
これほどのアホが、二人も三人もいる事自体が理解できん。
0005nobodyさん2016/10/17(月) 22:51:35.98ID:???
ちなみに、俺のO/Rマッパーは再帰可能だから
IN句で渡された値がWhere句に相当する条件でもその通りにクエリビルドする。

それでも14行だ。

エセ関西弁は、一体、どんなクソコードを書いてるんだよ?
0006nobodyさん2016/10/17(月) 23:03:10.93ID:???
>>5
暇ならパズルSQL問題出すけど解いてみる?
おまいさんのいうo/rマッパーを使って解けるかためしてみるとええで。

世の中にはo/rマッパーでは到達できないSQLがあるんやで。
0007nobodyさん2016/10/17(月) 23:04:47.75ID:???
ここは隔離スレにして本スレを別に立てたいが、そうしたら隔離対象がそっちに行くんだろうな…
0008nobodyさん2016/10/17(月) 23:10:45.93ID:???
>>6
>世の中にはo/rマッパーでは到達できないSQLがある

ということと、お前がO/Rマッパーを作れる/使いこなせるという事は全く別の事だとなぜ理解できない?

都合が悪くなったらあっちのスレは無視するお前が、まともにSQLが使いこなせていると
どうして他の人間に説得出来ると思うんだ?

それに、O/Rマッパーは只のクエリビルダーではないから、
通常、ナマのSQLも受け付ける。渡された配列をbindする形でな。

おまえのごたくは聞き飽きたとなんか言わせれば済む?
お前は頭が悪すぎるんだよ、致命的に。まだ気づかないのか?
0009nobodyさん2016/10/17(月) 23:13:26.48ID:???
もう一回聞くぞ?

>>6

おまえ、カニ味噌くんだろ?
0010nobodyさん2016/10/17(月) 23:15:47.33ID:???
>>8
おまいさんが作ったo/rマッパーの仕様なんか知らんで。
ついでに言うならo/rマッパーを作れる能力があるとして、それが今どこかで役に立つかっちゅーと全く役に立たんで。
クエリビルダーなんぞ今はどのフレームワークにもあるけんの。
しかし、SQLパズルを解ける能力は完全に業務遂行能力と1対1で紐付くで。SQLパズルを自動的に解いてくれるo/rマッパーなんか存在せえへんからな。
やってみる? 意外と楽しいぞ。
0011nobodyさん2016/10/17(月) 23:24:43.54ID:???
>クエリビルダーなんぞ今はどのフレームワークにもあるけんの。

どのフレームワークにもあることが、どうして、今の話題に何か関係があると思った?

>しかし、SQLパズルを解ける能力は完全に業務遂行能力と1対1で紐付くで。

そんなゲームが実務とどれほど密接に結びつくと、どうして思った?

O/Rマッパーに必要なのは、
「出来るだけ簡単にクエリビルドできること」
「場合によってはクエリの生成をプログラマに委ねるる事が出来る事」
の二つだ。

お前みたいなゴミクズの出番はねーんだよ、ひきこもってろ、野猿。

>やってみる? 意外と楽しいぞ。

おめーの快楽なんてどーでもいいんだよ。一生一人でオナニーしてろ、サル
0012nobodyさん2016/10/17(月) 23:26:14.09ID:???
>>10
こいつは別の意味でカニ味噌だな。
二匹も三匹もいるとは想像してなかったよ。
0013nobodyさん2016/10/17(月) 23:31:50.36ID:???
SQLパズルは遊びじゃねえんだよ……商品テーブルから特定の組み合わせを見つけたら合計価格から何円引く
(マクドナルドのセットメニューなんかがそう)とか、特定の商品には異なる税率が掛かってお会計が変わったり、
あるいは特定の商品を三つ買ったら千円となったりするようなリアル金勘定と絡んでくるんだよ……!
一度そういう業務をやってみればわかるぜ。マジカルSQLこそが正義であるということに……!
(ここはPHPスレなので全く関係のない話なのだが)
0014nobodyさん2016/10/18(火) 00:09:10.50ID:???
>>13

まだ、そえれがO/Rマッパーと関係あると思ってるのか。

おまえ、本当に一回死んだほうがいいよ。向いてない、この業界に。
0015nobodyさん2016/10/18(火) 00:38:18.88ID:???
QueryについてはPHPと関係なくね?
ORMならまぁわかるが
0016nobodyさん2016/10/18(火) 01:14:21.67ID:???
Linux(rehahat)で、PHPを使う場合、どこのを使うのが良いですか?
特に、最新環境にはこだわりませんので、5.x系でも、7系でも良いです
簡単に構築・維持が出来る方が良いです
0017nobodyさん2016/10/18(火) 02:44:37.68ID:???
>>16
phpenv
もしくはお好きなバージョン落としてインストール
0018nobodyさん2016/10/18(火) 03:11:02.71ID:???
うひょお。今日は元気だったんだな。
結局末端までの依存関係を気にしながらrequireすべし派の解説はないままっぽいかな?
0019nobodyさん2016/10/18(火) 08:20:01.66ID:???
向こうの話題は向こうでやれよ
0020nobodyさん2016/10/18(火) 10:13:16.66ID:???
>>16
場所?
なら、ここ
PostgreSQL RPM Building Project - Repository Packages
https://yum.postgresql.org/repopackages.php
0021nobodyさん2016/10/18(火) 10:14:39.83ID:???
>>16
remiかIUSお勧め
0022nobodyさん2016/10/18(火) 10:24:38.74ID:???
RemiってPHP用のリポジトリじゃ
0023nobodyさん2016/10/18(火) 10:25:30.59ID:???
あ、ごめん、PostgreSQLスレだと勘違いしてた
>>20はとりけし、PHPなら>>21
0024nobodyさん2016/10/18(火) 10:32:22.73ID:???
>>11
> そんなゲームが実務とどれほど密接に結びつくと、どうして思った?
お前それこれ見ても言えんの?
http://www.geocities.jp/oraclesqlpuzzle/
0025nobodyさん2016/10/18(火) 10:34:26.77ID:???
ORM不要論
0026nobodyさん2016/10/18(火) 11:20:41.64ID:???
今度はORMの定義で荒れるのか?
0027nobodyさん2016/10/18(火) 13:23:36.08ID:???
オレオレORM定義、オレオレORM実装の話はブログでやってくれ
0028nobodyさん2016/10/18(火) 14:01:02.93ID:???
PHP7で本格稼働しているのってどれくらいだろうね?
統計によると、ほとんどが5.3か5.4らしいけど
0029nobodyさん2016/10/18(火) 14:18:03.74ID:???
>>28
この統計だと、5.3と5.4あわせても10%未満だな
https://seld.be/notes/php-versions-stats-2016-1-edition
0030nobodyさん2016/10/18(火) 14:28:02.50ID:???
>>29
おお、なるほど
5.5がほとんどなんだね
0031nobodyさん2016/10/18(火) 14:46:47.67ID:???
>>30
いや、5.6だが・・・
0032nobodyさん2016/10/18(火) 14:51:43.98ID:???
>>31
あ、昨年と今年の合計でみてたわ
0033nobodyさん2016/10/18(火) 14:57:38.88ID:???
俺は多分カニ味噌?と言われた人間だが別の人とやり合ってたようだなw
もうそうやって議論内容ではなく人と戦ってる時点で
純粋な議論ではなく人を批判したいとかマウンティングしたいって精神が現れてるんだよ
0034nobodyさん2016/10/18(火) 15:03:43.35ID:???
ちなみに自分がPDOでIN句がそのまま使えないと言ったのはO/Rマッパーなしでそのまま使えないという意味で
そういうことしても使えないという意味で言ったわけではないからな
相手の意図をいつまでも理解できない奴のようだが
0035nobodyさん2016/10/18(火) 15:05:06.45ID:???
若い奴がカニ味噌なんて表現は使わないだろうから中年以上のオッサンだろうね
0036nobodyさん2016/10/18(火) 15:25:16.76ID:???
どうでもいいわ
0037nobodyさん2016/10/18(火) 16:02:52.15ID:???
読み返す気もないが、PDOでIN句は使えるだろ。
何言ってるんだ。
0038nobodyさん2016/10/18(火) 16:26:27.44ID:???
>>37
O/Rマッパーなしで使えるのか?
0039nobodyさん2016/10/18(火) 16:41:36.66ID:???
>>38
お前PDOが何なのかわかってないんじゃないのか?
O/Rマッパーなんか関係ないだろ。
IN句は普通に使える。
0040nobodyさん2016/10/18(火) 16:42:03.97ID:???
読み返さないのも失礼だから読み返してみた。

>>前スレ764
> しかし現実にPDOはIN句が使えなかったりして
いや、使える。

> そういうことを考えると入れる時にエスケープしておくのが安全かと自分は考えている
SQLインジェクションの可能性があるなら、プリペアードクエリを使えば良い。IN句でも使える。

>>前スレ788
> IN句のやつをorでやればできるけど
この文章で、本当に使えないんだと思い込んでいることがわかるな。

なお、PostgreSQLの場合、プリペアードクエリを使った場合のデータベースサーバプロセスとPHPプロセスの通信回数は、パラメータの個数によらない。
複数のパラメータが1回で送信される。なので、プロセス間通信のパフーマンスにはパラメータの個数はほぼ影響しない。
0041nobodyさん2016/10/18(火) 16:50:15.88ID:???
> O/Rマッパーに必要なのは、
> 「出来るだけ簡単にクエリビルドできること」
> 「場合によってはクエリの生成をプログラマに委ねるる事が出来る事」
> の二つだ。

O/RM = クエリビルダ であるかのような認識をしているのかねぇ。
0042nobodyさん2016/10/18(火) 17:44:07.55ID:???
PDOってのはデータベース抽象化レイヤーだろ
クラス群だ
そのクラス内のメソッドなりの標準装備されている機能のみでIN句は使用できないよね?という意図ね
前スレとかのことは今は話していないので忘れて良いよ

そんなのスクリプトで色々やったらPHPで大抵のことはできるだろ
拡大解釈だよ
0043nobodyさん2016/10/18(火) 17:49:54.10ID:???
>>42
いや、普通に使えるのだが。
$stmt = $pdo->prepare('select * from user where user_id in (?, ?, ?)');
$stmt->execute(['user1', 'user2', 'user3']);
$rows = $stmt->fetchAll();
どこが使用できないのだ?
0044nobodyさん2016/10/18(火) 17:55:17.63ID:???
?のプレースホルダ―は今あまり使用しないからね
それにINを使用するケースって数が膨大だったり使用するプレースホルダの数が未確定だったりすることが多いでしょ
そういう場合に標準のメソッドでは使用できない
0045nobodyさん2016/10/18(火) 17:58:48.08ID:???
>>44
> ?のプレースホルダ―は今あまり使用しないからね
それ、IN句が使えるかどうかと関係ないな。

> それにINを使用するケースって数が膨大だったり
膨大になることなんてめったにないが、なったとしてもIN句はつかえるし。

> 使用するプレースホルダの数が未確定だったりすることが多いでしょ
未確定なことなんてありえない。未確定だったらexecute()にパラメータ渡せないし。

> そういう場合に標準のメソッドでは使用できない
いや、できてるでしょ。
0046nobodyさん2016/10/18(火) 18:03:06.13ID:???
・・・っていうか、JOIN知らないんじゃないか?
select id from foo => 1000行くらいデータ取得
select * from bar where foo_id in (1000個くらいの値リスト)
とかやってるんじゃないだろうな。
0047nobodyさん2016/10/18(火) 18:18:28.19ID:???
>>46
JOINってINNER JOINやOUTER JOIN、サブクエリとかの結合のことか?
それなら使いまくってるが
0048nobodyさん2016/10/18(火) 18:23:24.68ID:???
なんでPDOでIN句が使えないということにしたいんだか、意図不明
0049nobodyさん2016/10/18(火) 18:30:49.42ID:???
PDOのprepareでIN句が使えないっていう主張をIN句のプリペアドステートメントにarrayがバインド出来ないということだと解釈するなら, それは単なるDBALであるPDOの役目ではない。
PDOのプリペアドステートメントはデータベースのプリペアドステートメントに1対1で対応しているべきもので, IN句内のプレースホルダ数の異なるSQLは同一のプリペアドステートメントにならない以上はarrayのバインド可能なプリペアドステートメントはPDOとしてはあり得ない。

だからarrayをバインドしたいと主張するならそれはクエリビルダの役割であって, SQLを抽象化しないPDOが行えてはおかしいことだ。
0050nobodyさん2016/10/18(火) 18:32:57.00ID:???
A: 俺はクエリ実行するときに、SQLインジェクションが怖いからエスケープする
↓
他: プリペアードクエリ使えよ
↓
A: PDOだとIN句が使えないじゃん
↓
他: いや使えるでしょ

という流れ。

あと、
> PDOでプレースホルダも使ってるけど
> 念には念を入れて
エスケープもするとか発言してる。
O''reillyになっちゃうじゃん。
0051nobodyさん2016/10/18(火) 18:46:23.30ID:???
>>46
全然関係ない話持ち出しててワロタ。
あの人にめっちゃ怒られるんじゃないか。

>>49
んだ。
0052nobodyさん2016/10/18(火) 18:53:15.51ID:???
噛み砕くと IN (?) に array(1, 2, 3) をバインドしたら IN (1, 2, 3) になってほしいというのは無理筋だということ。
そしてそれを IN が使えないという話にしてはいけないということ。

それ以外の話で IN が使えないというのなら、使えないって人からの追加説明が必要かなと。
0053nobodyさん2016/10/18(火) 18:54:24.93ID:???
$stmt = $pdo->prepare(':query');
$stmt->bindValue(':query', 'select * from foo where bar="baz"', PDO::PARAM_STR);
これがバインド出来ねーって言ってるようなもんだろ
0054nobodyさん2016/10/18(火) 19:01:30.46ID:???
>>52
本職が数学屋だもんで言い回しが固くて回りくどくてすまんな
0055nobodyさん2016/10/18(火) 22:51:36.87ID:???
testfunc(a, b)
{
foreach($b as $value).... // bを配列として変換済み
}

上の関数を呼び出す時に、下記のようにbをarrayでもintでも可能にしたいです。

testfunc(a, [1,2,3]);
testfunc(a, 1);

どういう風に関数実装すればよいでしょうか
0056nobodyさん2016/10/18(火) 23:48:00.25ID:???
>>55
bを配列として何らかの変換を行っているのであれば
条件分けでもいけるのでは?
もしくは引数を配列にするとか
0057nobodyさん2016/10/18(火) 23:51:33.04ID:???
>>55
is_array
0058nobodyさん2016/10/19(水) 00:05:25.02ID:???
>>52
無理筋じゃーねーよ。他の言語のデータベース接続インターフェースとかじゃ割と出来るし、PDOを拡張するだけで一応は実装可能なんだから。
PDOが名前付きプレースホルダ自体に配列が使えないっつーワンサイドハンドドロップダウン仕様なのが問題なんじゃ。
0059nobodyさん2016/10/19(水) 00:18:28.66ID:???
>>58
>>49を読んで, その上でそう思うということなのか?
あと, SQLを抽象化しないDBALで"出来る"例を挙げてくれ
0060nobodyさん2016/10/19(水) 00:28:41.03ID:???
>>59
知らんけど、同じくDBALを謳う「PDOを拡張したクラス」が山のようにある(そしてそいつらは配列をバインドできる)のはどういうことや?

PDOはRDBMSの種類毎の違いを抽象化してくれてるまではええんやが、プリペアードステートメントのパラメータのバインド部分が貧弱なんだよ。だからみんな拡張するんだ。
ドキュメントにも書いてある通り、「端的に言えば文字列置換してるだけやで」って位だからな。気が利かない。
0061nobodyさん2016/10/19(水) 00:29:17.31ID:???
そこら辺にあるんだから自分で探せカスって流れにならないことを祈るしかない
0062nobodyさん2016/10/19(水) 00:29:57.71ID:???
あっ…
0063nobodyさん2016/10/19(水) 00:31:09.84ID:???
単純に名前付きの配列渡したら:p_0,:p_1みたいに展開するだけでええのにな。クッソ不親切やで。
0064nobodyさん2016/10/19(水) 00:33:33.91ID:???
>>61
つうかみんなそこら辺に不満言いながら拡張PDO書くのがphpおじさんたちの仕事だよ。
もっと言うならexecuteした後にfetchさせるのとかもクッソ面倒いから大体そこも拡張っつーかラップするよ。
0065nobodyさん2016/10/19(水) 00:40:40.11ID:???
>>60
プリペアドステートメントのバインドが文字列置換だけなわけがない
通常のいわゆる静的プレースホルダではDB側が用意した(PREPARE文で発行した)ステートメントにUSING句でバインドして実行している
DB側でこの機構に対応していない場合(や利用しようとして失敗した場合(今はどうか知らない))にはエミュレーション(いわゆる動的プレースホルダ)としてPHP側が処理を代替する

静的プレースホルダの機能はDB側機能で制約を受ける
PDOは"SQLを抽象化しない""DBへの接続とクエリのみを抽象化する"DBALである以上, SQLを弄らねばならない機能はより上位のレイヤで実装されなければならない
0066652016/10/19(水) 00:43:28.22ID:???
何でUSING句だ, EXECUTE文だわ
0067nobodyさん2016/10/19(水) 00:56:34.77ID:???
>>65
つうても静的プレースホルダに配列を突っ込めるRDBMSは多分存在するよな?
なんで、in句にプレースホルダを入れてそこに配列バインド出来ないのはやっぱりPDO側の怠慢やと思うんや。
エミュモード有効なら結局SQL組み直すやん。
なら配列入れて無効なら展開するような仕様でええ思うんだけどな。(まあ、その仕様入れるとSQL自体がバグる可能性もあるので一長一短だが)
0068652016/10/19(水) 01:07:02.59ID:???
>>67
> つうても静的プレースホルダに配列を突っ込めるRDBMSは多分存在するよな?
知る限りないが, ご存知なら挙げてくれ

> エミュモード有効なら結局SQL組み直すやん
プリペアドステートメントが利用可能かどうか結果が変わる仕様はまともではない
少なくともプリペアドステートメントという以上はDBのそれと1対1であるように実装されるべきだし, そうなっている
何度も言うようだけどもその枠から外れるならそれはPDOが目指すものではない
0069nobodyさん2016/10/19(水) 01:15:52.87ID:???
>>68
ワイも詳しくないけど、なんかオラクル辺りは配列バインド出来るらしいよ。ODP.netにはそういう機能があるらしい。
それがSQLを破壊してるかどうかまでは分からんけど。
0070652016/10/19(水) 01:19:10.84ID:???
>>69
その「配列をバインド出来る」の意味は :array というプレースホルダにARRAY型の値をそのまま置き換えるということだろう
決して :array にバインドするARRAY型変数の中身が展開されて並ぶわけではない

ましてやIN句には括弧が必須なのだから IN :array みたいな書き方をすればコンパイルエラーだ
0071nobodyさん2016/10/19(水) 01:25:15.44ID:???
>>70
何言ってるか微妙に分からんが、SQL上で
in(1,2,3,4,5)みたいになっているのは、php上で[1,2,3,4,5]になってるのとは等価だろ。
データの内部形式に違いはあれど配列を扱っていること自体に違いはない。
その配列形式のデータをDB側が受け取れるかどうかじゃねえか。
もっと具体的に言うとmysqlにはSET型もenum型もあるんやから、コレをPDO側で吸収する事は本来は出来るハズやで。postgresにはpolygonとかもあるやん。
ここら辺のデータを受け渡すインターフェースがあってもおかしかないとは思うんやがのう。
0072652016/10/19(水) 01:29:01.40ID:???
>>71
DB側のプリペアドステートメント構文として対応していない
故にPDOで実装すべきものではない
0073nobodyさん2016/10/19(水) 01:30:23.68ID:???
対応してるだろ? enumとかは普通に入れられたように記憶してるけど。
0074652016/10/19(水) 01:38:25.76ID:???
>>73
SQL文中の (a, b, c) のようなものはSQLに於ける配列型とは異なるものだ
0075nobodyさん2016/10/19(水) 02:23:17.81ID:???
>>74
IN文の中身に関してはそうだけど、values()の中身とかは実質配列型だろ。
だから配列をぶっこむプリペアードステートメントが存在しても全然おかしくないしmysqlはSET型ぶち込めるし。
やっぱPDOが手を抜いてる説がワイの中で根強いなあ。
0076nobodyさん2016/10/19(水) 02:27:05.66ID:???
なんかPDOで勘違い議論続いて笑える
0077nobodyさん2016/10/19(水) 02:28:37.37ID:???
もっともっというなら文字列型なんて文字の配列じゃん(って言い方は雑すぎるが)
プリペアードステートメントだから配列は使えないなんてのはすげえ雑な扱いに思うけどね。
いくらPDOがネイティブ寄りの思想だからって出来ないこと多すぎなんやが。
0078nobodyさん2016/10/19(水) 02:32:17.19ID:???
>>75
実質配列型というが, SQLのARRAY型の要素は全て同じ型だ
「だから配列をぶっこむプリペアードステートメントが存在しても全然おかしくない」というのもSQL文との整合性が保たれない(IN句で IN :array は認められない)以上はプリペアドステートメント「のようなもの」ではあってもそのものではない
まるでPDOに特有の問題かのように言うが, 理想的, 或いはPDOよりマシだという実装の具体例を(別の言語でも結構だが)挙げてくれないと比較のしようもない
0079nobodyさん2016/10/19(水) 02:32:28.64ID:???
でもよう見たらPDO::PARAM_STMTとかあるから、IN(:in)とかやって
$st->bind(":in","SELECT 1,2,3")とかやればいいような気がしてきたな。
それもそれで面倒な気もするが。
0080nobodyさん2016/10/19(水) 02:49:33.98ID:???
bugs.php.netにも2013年に要望が上がってるな
回答はやはりPDOより上のレイヤーでやるべきだと

https://bugs.php.net/bug.php?id=64852
0081nobodyさん2016/10/19(水) 02:53:25.31ID:???
>>78
INは実行前に数がわからない。だから「何なら入れていいか」がわからない。
が、values()とかは数も型もわかる。
数と型が分かるなら、それこそ文字列と同じ扱いにできるやな。
実際にJavaのPreparedStatementクラスにはSetArray()ってメソッドがあるらしいぞ。
使ったことないからどれくらい使えるかわからんが。
0082nobodyさん2016/10/19(水) 03:02:36.73ID:???
>>81
> 数と型が分かるなら、それこそ文字列と同じ扱いにできるやな。
VALUES(?, ?, ?)などとしてPHP配列を要素を適切に並べてバインドすればよいとういことか?
最早元の話題から大きく外れているが, どういうAPIで実装すべきと考えているのか

JavaのSetArrayは正しくSQL文中のプレースホルダをARRAY型の値で置き換える
相当するものはPDOにはないからあってもよいとは思うが, IN句やVALUESで指摘された問題の解決にはなっていない(その目的には使えない)
0083nobodyさん2016/10/19(水) 03:09:34.66ID:???
タプル型とかそういう発想はないのかよ! そろそろそういう発想ができてきてもいい頃だろ! 2016年やぞ!
0084nobodyさん2016/10/19(水) 03:21:09.25ID:???
>postgresにはpolygonとかもあるやん。
>ここら辺のデータを受け渡すインターフェースがあってもおかしかないとは思うんやがのう。
PDOにしろADO.NETにしろJDBC、ODBC、ADO,OLEDBにしろ、基本はデータベースをベンダによらず
抽象的に扱えるインタフェースを提供するのが目的なんだから、特定のデータベースの特定の
型向けのインターフェースなんて用意しないだろ。
0085nobodyさん2016/10/19(水) 03:27:06.04ID:???
>>84
TEXTだったりvarcharだったりをSTRINGに抽象化する程度には纏められるやろ。SET型もpolygon型も実態は固定長の配列やし。それこそarrayで一纏めに出来るはずやで。
0086nobodyさん2016/10/19(水) 03:27:34.58ID:???
>無理筋じゃーねーよ。他の言語のデータベース接続インターフェースとかじゃ割と出来るし
具体的に例あげろよ。
0087nobodyさん2016/10/19(水) 03:29:00.07ID:???
>>85
そういうのはもう設計してる人に言おうぜ。俺らに
何度言ったって無駄だろ??
それともただのかまってちゃんなの?
0088nobodyさん2016/10/19(水) 03:30:26.87ID:???
当初の目的はどこへやら。ただダダをこねる子供のようになってしまっているがそれでいいのかな。
0089nobodyさん2016/10/19(水) 03:30:40.03ID:???
おまえはもう議論してるとかじゃねぇよ。
ただのかまってちゃんレベルになってきてるぞ。
0090nobodyさん2016/10/19(水) 03:36:13.64ID:???
>>86
他の言語じゃないけど、laravelのクエリービルダーでは普通にwhereinとかで配列渡せる。
0091nobodyさん2016/10/19(水) 03:39:03.27ID:???
>>90
まーたクエリビルダに話を広げるの?
0092nobodyさん2016/10/19(水) 03:48:00.91ID:???
>他の言語のデータベース接続インターフェース
クエリビルダじゃなくてデータベース接続インターフェースって自分で言ってないか?
話が変わってねぇ?
0093nobodyさん2016/10/19(水) 04:51:13.91ID:???
いつまでやんだよ
0094nobodyさん2016/10/19(水) 06:22:40.53ID:???
クソおっそいだけのINなんか使わんでOR使え
foreachで楽に組み立てられるだろ
0095nobodyさん2016/10/19(水) 10:30:30.21ID:???
>>55
誰かワイよりキレイに書ける奴おるか?w

is_array($b) ?: $b = [$b];
0096nobodyさん2016/10/19(水) 10:30:47.12ID:???
>>94
PostgreSQLだと、INの方が速いけどね。

10万件の中から10件を検索(indexが使われる検索)

INを使った場合:
https://explain.depesz.com/s/PpNF
Planning time: 0.141 ms
Execution time: 0.177 ms

ORを使った場合:
https://explain.depesz.com/s/iORg
Planning time: 0.281 ms
Execution time: 0.469 ms
0097nobodyさん2016/10/19(水) 10:31:49.79ID:???
無知でプライドだけ高くてこじらせた典型が、議論するとこうなる事例
0098nobodyさん2016/10/19(水) 10:43:30.73ID:???
夜中になにやってんだよ
日本在住じゃないのか?
0099nobodyさん2016/10/19(水) 10:49:38.61ID:???
>>95
!?
0100nobodyさん2016/10/19(水) 12:05:42.71ID:???
>>95はarrayの中身は全部intでなきゃならないなら
もっとちゃんとしたコードじゃないとな
0101nobodyさん2016/10/19(水) 13:26:48.94ID:???
>>95
$b = (array)$b
0102nobodyさん2016/10/19(水) 14:06:53.65ID:???
俺はSQLインジェクション対策でエスケープするよ
安全のためにね
↓
プリペアードクエリ使え
↓
IN句じゃつかえないだろ
↓
いや使えるし
↓
でもコードを少し書かないと使えないだろ
その意味で使えないと言ったんだよ
そもそもIN句遅いし、OR使えよ
↓
いやIN句の方が速いし
↓
今ココ
0103nobodyさん2016/10/19(水) 14:14:37.64ID:???
>>90
PDOはDBへの接続を抽象化するためのものでSQLを抽象化するためのものではない
なぜ全てをPDOに要求するのか?
0104nobodyさん2016/10/19(水) 14:18:54.42ID:???
function sample($variable)
{
$array = [];
foreach ($variable as $value) {
$array[$value] => [1,2,3];
}
return $array;
}

こういうのって最初に
$array = [];
で初期化する必要ないのかな?

削除するかで迷ってる
0105nobodyさん2016/10/19(水) 14:19:11.56ID:???
ORがINより早くなる可能性があるのって賢いオラクルぐらいだろ
0106nobodyさん2016/10/19(水) 14:20:19.93ID:???
>>104
スコープ的な意味合いで考えれば不要だが
コード的に読みやすいならそうすればいい
0107nobodyさん2016/10/19(水) 14:22:04.45ID:???
>>106
ありがとう

範囲はこの関数みたいに収まっているので、明示的に初期化宣言しておこうかと思います
0108nobodyさん2016/10/19(水) 14:37:40.79ID:???
>>33
> 俺は多分カニ味噌?と言われた人間だが別の人とやり合ってたようだなw
かに味噌がどうこうという流れは無視してたが、最近の流れを追うとそう言われるのも妥当かなと思ったりw
0109nobodyさん2016/10/19(水) 14:49:56.83ID:???
>>33
> 純粋な議論ではなく人を批判したいとかマウンティングしたいって精神が現れてるんだよ
お前がそうだろ
0110nobodyさん2016/10/19(水) 15:52:44.73ID:???
皆さんは職業プログラマーなんですか?
PHPを主体にしてやってるんでしょうか?
0111nobodyさん2016/10/19(水) 17:11:58.32ID:???
趣味だけど何か?
0112nobodyさん2016/10/19(水) 17:12:37.66ID:???
VR元年だってのに未だに0コンマの速度求めてシコシコバックエンドについて討議しなきゃならんなんてな
0113nobodyさん2016/10/19(水) 17:17:09.08ID:???
関西弁のPHPおじさんは経験豊富なおじさんじゃなくて、おじさんがPHPを始めたって感じかなぁ。
柔軟にいろいろ吸収できれば何とかなると思うけど。
0114nobodyさん2016/10/19(水) 17:21:54.06ID:???
>>112
そういう話じゃないんだが
0115nobodyさん2016/10/19(水) 17:25:51.43ID:???
VRの方でもL1キャッシュがーとかbus速度がーとかやってるみたいだけど
0116nobodyさん2016/10/19(水) 17:34:13.99ID:???
>>75
> だから配列をぶっこむプリペアードステートメントが存在しても全然おかしくないし
これには同意

$stmt = $pdo->prepare('select * from user where created between ? and ? and status in (?)');
$stmt->execute([$from, $to, ['hoge', 'fuga']]);
って書かしてくれてもばちはあたらんと思うぞ
0117nobodyさん2016/10/19(水) 18:01:25.91ID:???
>>116
配列型に対応するときの弊害にしかならないからやめて
0118nobodyさん2016/10/19(水) 18:07:48.96ID:???
別のメソッドならいいよ
arrayBind
arrayExecute
とかね
0119nobodyさん2016/10/19(水) 18:18:24.40ID:???
>>117
問題ない。
$sql = 'insert into books (tilte, authors) values (?, array[?])';
$stmt->execute(['php is sucks', ['matz', 'larry']);
$array = ['matz', 'larry'];
$stmt->execute(['rtfm', $array]);
01201192016/10/19(水) 18:20:48.34ID:???
冗談なので、話を広げないように。
0121nobodyさん2016/10/19(水) 18:51:55.67ID:???
>>112
phpはあくまでサーバサイドのコードやからコンマ何秒を求められる事はこれから先も無いよ。
マキシマム数秒は大前提だけど、マキシマム何秒に抑えるのはphpとかの言語を駆使する話ではない。
システム構成とそのアプリケーションの仕様との相談だね。
0122nobodyさん2016/10/19(水) 18:52:03.03ID:???
間違いだらけだから広げられても困るもんね
0123nobodyさん2016/10/19(水) 18:55:43.49ID:???
>>103
PDOより上の機能をphp標準が用意してくれないからだろ……
だから名前も分からぬ機能もインターフェースも雑多なr/oマッパーが蔓延るんやないかい。
ワイらはORMなんか別に使う気はなく、クエリを安全にエスケープできればええゆうのに。
0124nobodyさん2016/10/19(水) 18:56:11.91ID:???
雑談を詰めると速度やら仕様がおかしいやら
そんなもんしかないからな
0125nobodyさん2016/10/19(水) 19:10:10.13ID:???
>>123
一つのレスで r/oマッパー と ORM を使い分けたのはなんで?普段使い慣れてない言葉だから?
0126nobodyさん2016/10/19(水) 19:14:49.35ID:???
>>125
答え:ワイのiPhoneだとどうやらORMの方が速く打てる
0127nobodyさん2016/10/19(水) 19:18:34.73ID:???
ないからPDOでやるべきって発想がもうダメ
0128nobodyさん2016/10/19(水) 19:45:08.74ID:???
SQLを生でそのまま書いてあるフレームワークの大半がカオスだった
いくつものjoinによっては可読性を落とし
MySQLのバージョンを理由に、謎のselect連発

だから、PDOなり、ORMなり、クエリービルダーなり、きちんと設計されて
使用されているところのほうが珍しい
0129nobodyさん2016/10/19(水) 19:46:10.18ID:???
>>127
実際にPDOを継承したり内包してるDBライブラリが数数え切れない程度にあるこの状況を見てどう思うね。
もうちょい統一してほしい思うやろ。
0130nobodyさん2016/10/19(水) 19:47:44.56ID:???
>>129
だからといってPDOに持たせるべきとは決してならない
0131nobodyさん2016/10/19(水) 19:50:13.31ID:???
>>130
PDOに持たせなくてもいいから、PDOより上でORMより下くらいの扱いやすいDB操作インターフェース作れや。
今のopenGL直に叩いてるような状況が正しい訳ねえやろ。
0132nobodyさん2016/10/19(水) 19:50:14.37ID:???
上の方みてたらいろいろ語られてるから、今更どういっても考えが変わることはないんだろうけども。
0133nobodyさん2016/10/19(水) 20:15:41.19ID:???
>>123
一体どんな言語が, 言語の規格に存在しないにも拘らずDB接続の抽象化を超えるような機能をその言語ベンダ自身で提供しているんだ?
その機能を提供するための標準的なAPIの規格でも存在しているのか?
クエリをどうこうしたいなら単にクエリビルダだけを使えばよい(illuminate/databaseのQueryBuilderだけでも使える)

大体ORMレベルまで行ってしまったらActiveRecordとDataModelみたいな設計方針の違いもあるんだから多様性はあって当然
言語ベンダとしては最低限, DBへの接続を抽象化する, その目的はPDOで適切に達成されている
0134nobodyさん2016/10/19(水) 20:21:05.62ID:???
>>133
APIは提供したからあとは描画するだけだよ、頑張ってね的なほっぽり投げ具合だから嫌だっつってんだろ。
openGLやってバージョン上がるごとにどんどん抽象化レベル高くなってんねんで。
PDOがそこやってもええやろ。
そもそもプリペアードクエリの?文字も:文字もDBの仕様じゃないのをPDOが拡大解釈しとる話やん。
もっと制御文字増やして拡大解釈しまくるくらいは出来るやろ?
0135nobodyさん2016/10/19(水) 20:26:01.53ID:???
舌の根も乾かぬうちにPDOに持たせろと言いますか。
0136nobodyさん2016/10/19(水) 20:27:43.01ID:???
>>134
残念ながら?文字も:文字もDB側の仕様だ
故にPDOはSQLを拡大解釈しない
0137nobodyさん2016/10/19(水) 20:27:48.58ID:???
議論みてると、結局は何を求めているのかわからなくなってきたw
0138nobodyさん2016/10/19(水) 20:28:15.02ID:???
PDO2.0でもなんでもええがな。底の部分をもっと上に持って来いや。
0139nobodyさん2016/10/19(水) 20:30:38.82ID:???
本人が何を求めているのか分かってないから、話がぶれてまとまる気配がないんだろうね
ああ言えばこう言う、でもでもだって
0140nobodyさん2016/10/19(水) 20:31:18.78ID:???
もうお前ら話さっさとまとめてなんかライブラリ作れよ
0141nobodyさん2016/10/19(水) 20:31:29.20ID:???
>>138
そういうご要望はPHPの公式メーリングリストにでも投げられたら如何か
EloquentもDoctrineもある現状, どの程度合意を得られるかは分からんが, 納得させるのが上手いプレゼンターだ
0142nobodyさん2016/10/19(水) 20:33:09.84ID:???
>>136
と思うじゃん? sqliteとか普通にプリペアードステートメントの機能が無いDBもあるじゃん?
そういうRDBMSからすればクエリを破壊してる事にはなってるわけじゃん?
0143nobodyさん2016/10/19(水) 20:35:36.79ID:???
>>142
機能がない場合はある場合と極力同じ動作をするようにエミュレーションする
それを目的とする抽象化だ
0144nobodyさん2016/10/19(水) 20:36:24.67ID:???
無知が意地になって議論破壊してる
0145nobodyさん2016/10/19(水) 20:38:30.76ID:???
>>143
それってつまりはPDOがDBの仕様(というかインターフェース)を決めている事に他ならん訳でな。
「他のDBには無いけどPDOがエミュレートしてくれる」なら周りを気にせずどんどん抽象化できるやん?
0146nobodyさん2016/10/19(水) 20:42:51.81ID:???
今日はそっちの方向で質問することにしたんだ
0147nobodyさん2016/10/19(水) 20:43:30.59ID:???
>>145
"DBに委任出来ることは委任する"のが前提
まぁ, 納得してもらわなくていいけど, 「俺の欲しい機能が公式で実装されてない」という主張, そしてそれを実装しろという要望は, ここよりPHPの公式でぶちまけるべきだ
そしてうまいこと公式の開発者たちを説得してくれ, PDOより上のレイヤは実装されている分には構わんからな
0148nobodyさん2016/10/19(水) 20:47:59.42ID:???
>>147
sqliteで思い出したけど、PDOってエミュレートどころか使えない機能を使っても使えたフリだけするパターン(トランザクションとか)がかなりあるで。
ミニマムスペックで汎用なように作ってるつもりでも実態は全然目標とは乖離してるがな!
やっぱPDOは勝手に拡張されていくべきだわ。PDOこそがDB操作の標準になるくらいがええ。
0149nobodyさん2016/10/19(水) 20:53:09.97ID:???
じゃあ勝手に拡張しなよ
0150nobodyさん2016/10/19(水) 20:57:21.52ID:???
ベンダ固有の機能を使いたいならそういうライブラリを使えばいいんでない
なにも汎用性重視のPDOにそんな要求しなくても
0151nobodyさん2016/10/19(水) 21:00:08.08ID:???
>>150
ベンダもそれぞれバージョンアップとかで新機能導入していくんやから、様子見てPDOがメインストリームになりそうなのを抽象化して実装するのが筋やろなあ。
0152nobodyさん2016/10/19(水) 21:03:14.15ID:???
多分到達点はGQLみたいな独自SQL記述仕様なんやろな。
ORMではなく。
phpがそれやってくれると普及すると思うんやけどなあ。
0153nobodyさん2016/10/19(水) 21:06:08.35ID:???
>>151
そうだねぇ。だからこそ、IN (?) に array をバインドなんてあさってのことやるよりも前にしないといけないことが多いよね。
メインストリームになりそうとかそんな段階の話は遠いよ。そもそも標準への準拠がまちまちなんだから。
0154nobodyさん2016/10/19(水) 21:08:03.10ID:???
つうか今さっくりSQL99の仕様見てみたら、array型が仕様になっとるやん!
in句にarrayを入れられない(いや、入るのかもしれないけど)のは寧ろアンダー仕様なんやないのか?
0155nobodyさん2016/10/19(水) 21:09:18.82ID:???
>>154
ずっとそこを混同したままだよね
0156nobodyさん2016/10/19(水) 21:11:43.49ID:???
>>155
混同してねえよ。array型を扱えるRDBMSなら、in句にarrayを入れた場合の仕様くらいはちゃんと決めてるはず。
arrayとarrayを比較するのか、それともarrayの中身を展開して比較するのかとか。
そこをPDOでエミュレートするのは難しいはなしでは無いだろ。仕様があるんやから。
0157nobodyさん2016/10/19(水) 21:11:58.81ID:???
もっかいイチから勉強しなおせば、今自分がどれほどおかしなことを強気でレスしているのか気づけると思うよ
0158nobodyさん2016/10/19(水) 21:13:04.61ID:???
>>156
>>70あたりで言及してるんだけどな
0159nobodyさん2016/10/19(水) 21:13:17.90ID:???
議論破壊と議論抽象化
0160nobodyさん2016/10/19(水) 21:13:35.82ID:???
というか、array型があるならPDO::param_array無いと寧ろダメやん。ベンダー独自実装ちゃうねんから。
0161nobodyさん2016/10/19(水) 21:15:20.87ID:???
> 何言ってるか微妙に分からんが、SQL上で
> in(1,2,3,4,5)みたいになっているのは、php上で[1,2,3,4,5]になってるのとは等価だろ。

「微妙に分からんが」の言葉の重さよ
0162nobodyさん2016/10/19(水) 21:16:11.81ID:???
>>158
どういう結果になるかは分からんけど、in(
:array)が動かないのは寧ろ不自然やろ。PDOであたい入れてもクエリ壊さへんやん。
0163nobodyさん2016/10/19(水) 21:16:22.86ID:???
>>160
それに関してはあってもよいが結果としては>>82
0164nobodyさん2016/10/19(水) 21:19:10.14ID:???
>>162
IN (:array)
に対して $phpArray = (a, b, c) をバインドして得られる結果は IN (ARRAY[][a, b, c]) であって, INの左側式の値がARRAY[][a, b, c]に一致するという意味になるが?
0165nobodyさん2016/10/19(水) 21:20:34.72ID:???
おまえらの開発環境と主に使っているツールとか教えて
OS
エディタ
ターミナル
0166nobodyさん2016/10/19(水) 21:21:10.42ID:???
>>164
分からんけど、そういう動きするならそこから進んでin(
value_explode(:array))
みたいな書き方で大方の目的が達成できたりするんちゃう?
0167nobodyさん2016/10/19(水) 21:21:52.19ID:???
centos vim putty が多い
0168nobodyさん2016/10/19(水) 21:22:10.46ID:???
いやそういう関数があるかどうかは分からないけど。
0169nobodyさん2016/10/19(水) 21:23:05.25ID:???
>>167
定番にして王道だね
0170nobodyさん2016/10/19(水) 21:25:45.33ID:???
最近使い始めたんやけど git bashがシンプルで使いやすくてええで。
何より即インストールできるし。
0171nobodyさん2016/10/19(水) 21:29:36.93ID:???
>>166
>>80 読んだ?
0172nobodyさん2016/10/19(水) 21:31:28.82ID:???
各レイヤーの役割を理解してないと、そんな理由で却下せんでくれと思うかもしんないけど、至極まっとうな理由で却下されてるんよ。
0173nobodyさん2016/10/19(水) 21:35:50.98ID:???
>>171
よく分からんけどバインドしたタイミングと実際の読み出すタイミングで値変わることがよくあるからアカンみたいな話?
なら値が変わること覚悟でストリーム渡させるとか色々あるやろ。
なんやあんまり明確とは言いづらい気がするのう。
0174nobodyさん2016/10/19(水) 21:40:01.64ID:???
ちゃうわ。phpの配列は型がバラバラやけどええんか? っちゅー話や。
そんなん自動判別しよるのがPDOさん仕様やん。一意じゃないと困るならbindarray(名前、配列、型)メソッド用意したればいいだろ。甘えんなや!
0175nobodyさん2016/10/19(水) 21:41:47.75ID:???
> よく分からんけど
途方に暮れかけた

> ちゃうわ。
期待したけど、期待するだけ無駄だった。

なぜそのような強気でいられるのか
0176nobodyさん2016/10/19(水) 21:45:35.82ID:???
理解すべきことを理解せずに話をスライドさせていってるから、
俺の他にも有益なレスをしてくれてる人もいるのに、全部ひっくるめて無駄にしてる
0177nobodyさん2016/10/19(水) 21:48:57.36ID:???
その内勝手に答えにたどり着くからええやん。
無駄ちゃうで。考えたプロセスがこうして出力されてることは結構有益やよ。他の人間も辿れるからな。
0178nobodyさん2016/10/19(水) 21:48:58.52ID:???
昨日からずっと喋ってるけど, 「いけるんちゃう」とか「ええんちゃう」とか「あるんちゃう」とか, 思い込みで喋っているところが多過ぎる
0179nobodyさん2016/10/19(水) 21:50:43.03ID:???
>>178
せやかて言われたままに事実を受け止めてもーたら、それは検証という作業を省くオカルトっちゅー奴になってまうやで。
先ずは仮説から。コレは基本やで。
0180nobodyさん2016/10/19(水) 21:52:07.18ID:???
とりあえず俺の主張の要点。

* PDOの目的に従えば現状のバインド機構は適切
* PDOの目的を変更する必要を感じない
* PDOより上のレイヤのライブラリを公式で作成してくれるなら有り難い
* 但し実用上DoctrineやEloquentで十分なので積極的に後押しはしない
0181nobodyさん2016/10/19(水) 21:55:51.79ID:???
>>179
それは検証した人が言うべきかな
あと、仮説を立てるためにはある程度の基礎知識が必要
0182nobodyさん2016/10/19(水) 21:56:01.17ID:???
>>180
PDOがDB標準を目標としているならarrayはバインド出来て然るべしやから、ワイはPDOの目的はまだ未達と見るで。
0183nobodyさん2016/10/19(水) 21:57:59.21ID:???
>>181
地球の端っこに行ってなお「地面は平らでござるよ」って仮説が出てくるかよ。
仮説は勘とイマジネーションから出ちゃっていいんだよ。
0184nobodyさん2016/10/19(水) 21:58:14.71ID:???
>>182
そこは認めるよ, Arrayはバインド出来ても良い
しかしそれはIN句やVALUES句の問題を解決しない
0185nobodyさん2016/10/19(水) 21:58:26.68ID:???
>>182
その話と IN (?) に [1, 2, 3] をバインドしたら IN (1, 2, 3) になる(なってほしい)という話は別だということは理解できたの?
0186nobodyさん2016/10/19(水) 22:08:36.54ID:???
>>185
多分arrayがバインド出来るならarrayを展開する関数も実装されると思うから、そこがPDO標準で存在しないとしても目的達成には充分。
inの中のarrayがどういう動きになるかは仕様の話やしな。
0187nobodyさん2016/10/19(水) 22:10:41.91ID:???
>>186
> arrayを展開する関数
ARRAY型をどういう型に展開するのか?
そもそもIN (a, b, c)の (a, b, c) という組が何かの型だとお考えか?
0188nobodyさん2016/10/19(水) 22:13:19.36ID:???
> と思うから
配列型について調べてるのかと思ったらまた思い込みで話をしちゃってる
0189nobodyさん2016/10/19(水) 22:14:37.10ID:???
>>187
RDBMSによってはarray_to_string()やその逆のgroup_concat()がある。(いや同じか?)postgresでは集合を返すgenerate_group()関数もあるよな。
だからそっから先はDBごとの仕様に依存することにはなるだろうけど、システム開発的な用途であればそれで十分使える。
0190nobodyさん2016/10/19(水) 22:15:49.80ID:???
>>189
文字列に展開したらIN句の構文とマッチしないんだけども
0191nobodyさん2016/10/19(水) 22:16:34.69ID:???
>>188
ワイの行動パターンは仮説→検証(ぐぐる)だってゆうとるやろ。いちいちそこに突っ込まんでもええが。
0192nobodyさん2016/10/19(水) 22:17:36.93ID:???
>>191
じゃあ検証が終わってからで頼むよ
まだでしょ?
0193nobodyさん2016/10/19(水) 22:18:52.60ID:???
>>190
仮に配列を複数の文字列にするなら、それはそれで検索条件としては使えるで。比較する方を文字列にしちまえばええんやから。
0194nobodyさん2016/10/19(水) 22:19:25.23ID:???
>>193
IN を LIKE にリプレースしろって言ってる?
0195nobodyさん2016/10/19(水) 22:20:08.38ID:???
>>193
配列を一つの文字列に変換するのがarray_to_stringなんだけれども
0196nobodyさん2016/10/19(水) 22:22:26.11ID:???
>>194
いや、in(:array)に[1,2,3]を渡して内部的にin('1','2','3')になるなら左の値をキャストすりゃええねんってこった。
0197nobodyさん2016/10/19(水) 22:26:04.75ID:???
あのさ、
>IN (?) に [1, 2, 3] をバインドしたら IN (1, 2, 3) になる(なってほしい)
みたいなのさ、

プリペアドステートメント使った問い合わせが、どうやってRDBに渡されるか分かって「そうなって欲しい」って言ってるの?
(否、分かっているはずがなかろう)

一応、PDOのエミュレーション使うならそうすることは可能だろうが、
SQLiteみたいなRDB側でプリペアドに対応していないDBでもなければ
エミュレーションなんか使わないほうが良い事はわかりきってるだろ。

エミュレーションしないでプリペアド使った問い合わせして、
>IN (?) に [1, 2, 3] をバインドしたら IN (1, 2, 3) になる(なってほしい)
そんな都合のいいbindが出来るわけねーだろ。

つまりそれはPDOのすべき仕事じゃねーって事だろーが。
プリペアードステートメントって何だかわかってんのかよ? 本当に脳みそあんのかよ?


>PDOがDB標準を目標としているならarrayはバインド出来て然るべしやから、ワイはPDOの目的はまだ未達と見るで。

>>180を100回読んでから本当にくたばれ、クソエセ関西弁。
0198nobodyさん2016/10/19(水) 22:27:47.53ID:???
>>194
多分listagg関数を使って左右入れ替えてlike文にすれば一応イケるはず。
パズルSQLの領域だけどなw
0199nobodyさん2016/10/19(水) 22:30:01.78ID:???
>>197
調べて分かったけど、oracleは普通にその構文通るらしいぞ。その目的通りのinになるくさい。
オプションとかもあって標準ではないのかもしれんが。
0200nobodyさん2016/10/19(水) 22:31:58.54ID:???
Oracleを例に出されても触れるOracle環境がないから検証出来ない
0201nobodyさん2016/10/19(水) 22:34:25.19ID:???
補足。group_concatみたいな集合を文字列に直す関数でinの代わりをやるには、
group_concat(:array,デリミタ) like 左カラム
ってすればいい。下手したら普通にinするより速くなるかもな。
0202nobodyさん2016/10/19(水) 22:35:38.11ID:???
>>200
だから、仮説の状態で置いておけばその内環境持ってる奴が真偽を確かめてくれるだろ?
そーいうこっちゃで。
0203nobodyさん2016/10/19(水) 22:39:33.16ID:???
>>202
クソ
0204nobodyさん2016/10/19(水) 22:42:11.21ID:???
>>199
おめーは上でもarrayの誤読してる前科あるんだから
「くさい」とかほざいてねーでソース出せ。

普通に考えて、そんなことしたらプリペアドの意味がなくなるか、オプティマイザが複雑怪奇になる。
0205nobodyさん2016/10/19(水) 22:42:36.95ID:???
>>198
いや、パズルにもなってないよ。
読んでくれないなら理由は書かなくてもいいよね。
0206nobodyさん2016/10/19(水) 22:50:19.24ID:???
サルカニの人も自分は例を出さずに他人に説明してみろって高圧的な態度で情報を得ようとする人だけど、その点はなんか似てるね。
0207nobodyさん2016/10/19(水) 22:56:53.79ID:???
>>205
多分目的がすれ違ってるから自分の意見を言っておくけど、「値の数がが不定なものをバインドすることはよくあるからそれが出来ればいい。inで使えると便利」であって、inの構文になるかどうかは割とどうでも良い。SQLの中に配列入れて判定文書けるならそれで正義や。
0208nobodyさん2016/10/19(水) 22:59:06.03ID:???
>>186
配列型がbindできるならそれこそ IN でどうにかなんて発想には決してならないので、一旦マニュアル見直してみて。
その上で>>153をもっかい読み直してみて。
0209nobodyさん2016/10/19(水) 23:03:15.97ID:???
>>208
よく分からんけど、他に優先度が高そうな致命的なアンダー仕様が存在するんけ?
パッと思いつくようなのは直ぐには出てこないけど、なんかあったっけ。
0210nobodyさん2016/10/19(水) 23:06:24.15ID:???
>>207
illuminate/databaseのQueryBuilderでやればいいのではないか
0211nobodyさん2016/10/19(水) 23:07:02.24ID:???
> よく分からんけど
> 直ぐには出てこない
0212nobodyさん2016/10/19(水) 23:07:03.80ID:???
>>208
真面目に、抽象的過ぎるのか、ワイが知らんDBの基礎仕様的なものがあるのか、それともタダのハッタリなのかの区別が付かない。
ヒントをくれとは言わないが、区別出来るようには出来るやろか?
0213nobodyさん2016/10/19(水) 23:07:56.14ID:???
ヒントならこのスレに唸るほどある
0214nobodyさん2016/10/19(水) 23:08:28.74ID:???
>>210
やってるよ。
でも色々調べたら「PDOでも出来ておかしくない」って方向に自分の考えが固まりつつあるんや。
0215nobodyさん2016/10/19(水) 23:09:09.38ID:???
>>213
このスレの大半はワイの書き込みやで。ヒントになるか?
0216nobodyさん2016/10/19(水) 23:09:34.16ID:???
>>212
IN (a, b, c) の(a, b, c)は一般に「配列型」の値ではない, というかそもそも型を持った値ではない
SQLの構文要素 () にaとbとcが並べて書かれているだけ
0217nobodyさん2016/10/19(水) 23:11:51.23ID:???
>>216
ワイはさっきから「配列を値のリストに変換出来ればええ」ゆうとるが。そしてそれはちょい変なやり方やが出来るやろ。
0218nobodyさん2016/10/19(水) 23:12:09.59ID:???
>>215
そりゃあなたのレスはヒントになるわけないよ
0219nobodyさん2016/10/19(水) 23:12:44.93ID:???
>>217
出来ないと言っている。
出来ると主張するならコード例
0220nobodyさん2016/10/19(水) 23:13:55.84ID:???
>>219
マジで言ってる?group_concatの例出したやん。
0221nobodyさん2016/10/19(水) 23:15:13.62ID:???
ミスマッチも起こすよって話なら、バインドする値のお尻と頭にカッコでもつけてregexで比較すりゃいいのよ。そんなムズイ話じゃねーぞ。
0222nobodyさん2016/10/19(水) 23:16:28.59ID:???
>>220
一つの文字列に連結して返すのがどうして解決策になるのか。
0223nobodyさん2016/10/19(水) 23:27:07.20ID:???
>>222
仮想コードだがこういうこと。
データ[1,2,3]が:arrayに渡されるとする。
実行したいSQL文は
SELECT * FROM T WHERE ID IN (:array);
これをGROUP_CONCAT()で代わりにやるには、
SELECT * FROM T WHERE GROUP_CONCAT(:array,'-') REGEX ID;
ってする。そうすると、仮にTテーブルに「1,3,5,7,9」って順にデータが入ってたとしたら
比較対象 検索ID 比較結果
1-2-3 1 true
1-2-3 3 true
1-2-3 5 false
みたいになって、ID1と3のレコードだけ取り出せる訳だが。
0224nobodyさん2016/10/19(水) 23:29:37.60ID:???
実際には単純にこの式だと:arrayに11が入ってると1ともマッチしちまうから、:arrayに入れる前に全部の配列に対して
<値1>,<値2> みたいにエスケープをかけて、REGEXの方にも <>を足してやればいい。
何事も工夫です。
0225nobodyさん2016/10/19(水) 23:36:58.74ID:???
ちなみにこのやり方を覚えておくと、ポーカーなんかの役判定文がSQL(しかも一発)だけで完結できるようになるぞ。
0226nobodyさん2016/10/19(水) 23:39:13.00ID:???
>>223
SELECT * FROM T WHERE ID IN (:array)
の形のプリペアドステートメントの発行を求めているのに違う形のステートメントを発行するのがまともな実装か?
それが適切な例だと考えているなら話は最初にループするぞ

* PDOはSQLを極力書き換えない
* PDOはDBに委任出来る処理はそのまま委任する

上の前提は当然だと思っていたが, 明記する必要がある?
0227nobodyさん2016/10/19(水) 23:40:45.74ID:???
>>223
arrayがarrayとしてbindされる前提だよね?
そしてそれならそんな小細工する必要なんてなくなる。
0228nobodyさん2016/10/19(水) 23:41:34.54ID:???
>>227
コード零
0229nobodyさん2016/10/19(水) 23:42:13.63ID:???
>>228
もう次は言わないよ。
マニュアル読んで。
0230nobodyさん2016/10/19(水) 23:43:22.51ID:???
マニュアルじゃなくて >>96 でもいいや。
0231nobodyさん2016/10/19(水) 23:43:55.34ID:???
>>229
IN (:array) の :array に $array = [1, 2, 3] をARRAY型としてバインド出来ても動かないでしょ
IN :array ならバインド以前にコンパイル出来ないでしょ
0232nobodyさん2016/10/19(水) 23:44:44.61ID:???
>>226
SQLを書くのは人間だよ。「不定の値をバインドしたい」だけが達成できれば要件満たすコードがすげー書きやすくなるって話さね。
PDOがarrayをバインドできるようになればこういったブレイクスルーが起こせるんや。
0233nobodyさん2016/10/19(水) 23:46:44.22ID:???
>>231
もちろんそれは動かない、ので、それをどうにかしましょうというのが >>153 で書いた「あさってのこと」で
配列型に対応するのは「前にしないといけないこと」。
で、それ(配列型に対応)がされた前提であるならそもそも IN 使う必要なんてなくなるよという話ですよ。
0234nobodyさん2016/10/19(水) 23:46:55.79ID:???
>>232
それならPDOじゃなくてilluminate/databaseのQueryBuilderでも使えば宜しい
0235nobodyさん2016/10/19(水) 23:47:56.61ID:???
>>227
arrayがバインドできてもin(:array)だとArray型を比較しようとする仕様だった場合の話をしている。
その場合は今ある関数でなんとかするならこういう小細工になるし、
配列をxargsみたいに解釈してくれる関数が出てくるのならそれを使えばいい。
いづれにしても「できる」ってことやな。
0236nobodyさん2016/10/19(水) 23:48:22.88ID:???
>>232
あぁそうか, これを聞くべきなのか。
何故, それをするのにPDOでなければならないのか?
0237nobodyさん2016/10/19(水) 23:49:15.54ID:???
>>234
それをPDOがやれや! って話やろ! ループすんな!
0238nobodyさん2016/10/19(水) 23:49:41.60ID:???
>>237
あんたが散々ループさせてんだよ
0239nobodyさん2016/10/19(水) 23:56:24.40ID:???
>>236
「PDOはSQLを書き換えない」んだろ?
ORMやらクエリビルダやらのPHPと一体となっているSQLではなく、
クエリ文とパラメータだけで編成された、割とピュアなデータ入出力設計ができるようになる訳だ。
結構メリットっちゃメリットだよ。システムがPHPに引きずられなくなる訳だし。
0240nobodyさん2016/10/20(木) 00:00:08.32ID:???
>>239
一旦まとめさせてほしいんだけどさ、配列型がbindできるようになったらさ、スッキリするよね。

で、
>IN (?) に [1, 2, 3] をバインドしたら IN (1, 2, 3) になる(なってほしい)
なんて願望はもうなくなるよね。
0241nobodyさん2016/10/20(木) 00:02:27.96ID:???
arrayを型として考えちゃうペチパー脳なのがいけない
0242nobodyさん2016/10/20(木) 00:03:04.90ID:???
連投ごめん。

> SELECT * FROM T WHERE GROUP_CONCAT(:array,'-') REGEX ID;
(とてもスマートではないけれど)こう書けばいいわけだから、 IN (1, 2, 3) になってほしいって願望はもうないよね。
0243nobodyさん2016/10/20(木) 00:05:45.33ID:???
>>240
それもよう分からん。配列型が使えるとIN()文が他のものでだいたいできるような話にはならんと思うのやが。
少なからず配列型を使えるようになったらIN(配列)の出番はかなり増すと思うんだが。
>>241
SQL99ではARRAYは型なんだってよ!
0244nobodyさん2016/10/20(木) 00:08:41.04ID:???
>>242
ARRAYは型らしいから、通常のロジックで言えばIN(:array)は配列型と配列型比較することになる。
それを回避するためのコードがGROUP_CONCAT()で、SQLパズル的なコードだから「なるべく使いたくない」。
INで動くならINで書くよ。IN(XARGS(:array))でいいならそうするよ。
0245nobodyさん2016/10/20(木) 00:09:22.89ID:???
>>244
それに関してはマニュアルを読めと言っている。 >>96 でもいいと。
0246nobodyさん2016/10/20(木) 00:11:02.88ID:???
>>244
DB側でSQLパズルしなければならない(例のXARGSのようなものは存在しない)から>>240,242何だと思うけど
0247nobodyさん2016/10/20(木) 00:15:43.84ID:???
>>246
もしSQLパズルでしか動かないとしても、クエリビルダを使用しないという選択肢を取れることは結構メリットではある。
基幹系とかデータの寿命が半世紀以上になるような部門だと割とマジで福音になるんじゃないだろうか。
(まあ、そういうところこそもっとスマートではない泥臭いやり方してるもんだけど)
0248nobodyさん2016/10/20(木) 00:17:54.15ID:???
>>247
つまり

>>240
> >IN (?) に [1, 2, 3] をバインドしたら IN (1, 2, 3) になる(なってほしい)
> なんて願望はもうなくなるよね。

ということでよろしいか?
arrayがバインド出来てよいことには同意しておくから。
0249nobodyさん2016/10/20(木) 00:20:46.38ID:???
>>248
ワイ個人には無くならへんよ。SQLは短い方がええもん。
0250nobodyさん2016/10/20(木) 00:31:18.04ID:???
バインド出来るとして、想定しているDBってどれなの?
0251nobodyさん2016/10/20(木) 00:41:13.04ID:???
>>250
mySQLでできたらワイ的に満足。
0252nobodyさん2016/10/20(木) 00:45:45.25ID:???
つうても今のMySQLはJSON入れて検索なんつー割とモダンすぎてよく分からないパラダイムを取り入れてたりするんやな。
これだと多分文字列のふりしてJsonデータ入れれば配列を入れたことと同じになるくさいから、
もうほとんど目的達成されてるのかも。PDOに頼らずとも。
0253nobodyさん2016/10/20(木) 00:54:56.87ID:???
>>251
想定するデータ型は set ?
0254nobodyさん2016/10/20(木) 01:04:00.18ID:???
MySQLにARRAYが実装されてからPDOに文句つけろって話ではないのか
0255nobodyさん2016/10/20(木) 01:05:15.03ID:???
>>254
一応 set で配列まがいのことはできそうなので、代替するならこれなのかなーと。使ったことないけど
0256nobodyさん2016/10/20(木) 01:12:49.83ID:???
>>255
SET型は64個までしか値持てへんねん。つうことは必然と種類フラグ的な用途でしか使えへんねん。
特定のユーザIDの配列とか渡せないから実質使えへんで。
まあでもJSON実装したんならArrayもそのうち実装されるやろ。
0257nobodyさん2016/10/20(木) 03:08:40.95ID:???
>>256
Arrayも、代わりになるデータ型も無いことを知っている上で >>251 を書いたの?
それならPDOよりも先にMySQLに…って>>254が正解だったか。
0258nobodyさん2016/10/20(木) 07:08:33.92ID:???
>>257
pdo+mysqlのデフォルト動作ってエミュモードなんねや。
そもそもパフォーマンスを必要とされるmysqlでいちいち複数ステートメントになるネイティヴプリペアードステートメント打つ必要は無いねん。
だから、別にmysqlにarrayが実装されてるかどうかはあんま関係ないねん。
PDOで内部的に書き換えてくれりゃええんやから。
0259nobodyさん2016/10/20(木) 12:00:43.13ID:???
>>258
そうだね
0260nobodyさん2016/10/20(木) 14:17:15.32ID:???
ただのエミュレートバカだったのか。

なんでエミュレート切った方がいいのかもわかってないし、
プリペアする理由はSQLインジェクション対策くらいにしか思ってないし、
もう、この関西弁、どうしようもねーよ。
0261nobodyさん2016/10/20(木) 15:52:42.51ID:???
> sqliteで思い出したけど、PDOってエミュレートどころか使えない機能を使っても使えたフリだけするパターン(トランザクションとか)がかなりあるで。

普通じゃない。サルカニの人と同じく、他人と仕事をしないで自分の世界に閉じこもっていてほしい。
0262nobodyさん2016/10/20(木) 16:36:20.83ID:???
>>260
ワイの知る限りではmySQLでエミュレーションモードを切る利点もデメリットも無い。
なんか具体的に問題となることあんのか?
「PDOはクエリを改変しない」原理主義的なアレか?
0263nobodyさん2016/10/20(木) 17:14:39.56ID:???
>>262
この辺じゃないの?
http://unskilled.site/%E3%81%AA%E3%82%93%E3%81%A7php%E3%81%AFmysql%E3%81%8B%E3%82%89%E3%81%AE%E3%83%AA%E3%82%B6%E3%83%AB%E3%83%88%E3%81%8Cint%E5%9E%8B%E3%81%AE%E3%81%AF%E3%81%9A%E3%81%AA%E3%81%AE%E3%81%ABstring%E5%9E%8B/
0264nobodyさん2016/10/21(金) 14:50:33.94ID:???
飽きたか
0265nobodyさん2016/10/21(金) 16:56:20.63ID:???
>>262
>ワイの知る限りではmySQLでエミュレーションモードを切る利点もデメリットも無い。

複文。

くたばれ、クソ関西弁。
0266nobodyさん2016/10/21(金) 18:13:21.18ID:???
>>263
数値項目も文字列が戻る前提でコーディングし、なおかつPHPでもJavaScriptでも律儀に"==="を使っていて、ある日数値項目は数値で戻るようになると死ぬ
0267nobodyさん2016/10/21(金) 18:35:28.79ID:???
>>266
そんなんで死なないようにO/Rマッパーを作ってラップし、
エンティティの定義で型強制をするわけだが、

>>141の言ってるEloquentもDoctrineって、その辺やってくれるのかね?

俺は昔Doctrineの導入のクソめんどくささに辟易して自分で[クエリビルダ:O/Rマッパー]を作るに至った。
composerとか、まだ普及してなかった時代の話だ。
今はもっとマシかもしれん。
0268nobodyさん2016/10/21(金) 18:37:53.01ID:???
PDOがなんでstdClassだけじゃなくて、ユーザー定義のオブジェクトにresultをマッピングできるようになってるのか、
よく考えてみるべきだよ。
0269nobodyさん2016/10/21(金) 22:03:34.73ID:???
composerって最近きくけどなんなん?
pearみたいなもんじゃないの?
0270nobodyさん2016/10/21(金) 23:23:47.03ID:???
>>269
とりあえず使ってみれば分かるけど, 依存関係の管理をしてくれる
そしてオートローダ―も自動生成してくれるからプログラマの手間が大幅に減る

Rubyのgem/bundler, Pythonのpip, Node.jsのnpmみたいな。最早必須
0271nobodyさん2016/10/22(土) 01:21:32.24ID:???
home.phpがあります。
ボタンを押したとき、非同期でdata.phpからデータを取得しています。
ページの初期化時もdata.phpからデータを取得するにはどうすればよいでしょうか。
0272nobodyさん2016/10/22(土) 05:48:24.63ID:???
ページの初期化時にボタンを押した時の処理をすればいいじゃない
ていうかそれPHPの質問じゃないで
0273nobodyさん2016/10/22(土) 05:51:24.65ID:???
>>270
とりあえず使ってみるけど何を入れたらええの
おすすめのパッケージおせえて
02742722016/10/22(土) 06:29:08.38ID:???
>>271
あ・・初期化ってonload時のことかと思ってそう答えたけど
phpだけですませたいってことか?

home.phpで
・data.phpをrequireして関数を呼ぶ
・ボタン押した時と同じ内容のリクエストをdata.phpに送って結果を取得する
 (curlあるいはstream_context作成してfile_get_contentsなど)

とかそのあたり?中身わからんのでなんとも
0275nobodyさん2016/10/22(土) 23:51:36.53ID:???
>>273
PHPUnitとかphpspecでTDDやBDDでも始めよう
0276nobodyさん2016/10/24(月) 14:35:20.77ID:???
>>273
carbon
underscore-php
json-schema
0277nobodyさん2016/10/24(月) 14:38:12.28ID:???
>>271
方法その1: ページロード時にボタンクリックで実行される関数を呼び出す

方法その2: 初期データをページに埋め込んで戻す
var initial_data = <?php echo json_encode($data); ?>;

方法その3:
方法その2に加えて、それを使ったレンダリングをサーバサイドで実行し戻す。
0278nobodyさん2016/10/25(火) 14:31:47.75ID:9sW4yNav
スレ違いだったらすいません
xamppでローカルサーバーを立て、テストしています
テストのローカルコンピュータと、本番のネットワークサーバーで処理を分岐させたいのですが、どういう風に分岐させるのが良いでしょうか?

具体的には、sakuraサーバーでデータベースのアドレスが"localhost"で取得できないために分岐させたいとおもっています。
0279nobodyさん2016/10/25(火) 15:00:29.28ID:???
>>278
> 具体的には、sakuraサーバーでデータベースのアドレスが"localhost"で取得できないため
意味がわかりません。
localhostで接続する設定がされてないだけでは?
0280nobodyさん2016/10/25(火) 15:04:09.42ID:???
>>278
言ってることがいまいちよくわからんが
>"localhost"で取得できないために分岐させたいとおもっています
てことは別にsakuraとlocalhost(xampp入ってるPC)のDBは同期する必要がないってことでしょ?
なら別に分岐させる必要なんてないのでは
0281nobodyさん2016/10/25(火) 15:25:08.75ID:9sW4yNav
>>279-280
わかりづらくてすいません。
もう少し勉強し直してきます
0282nobodyさん2016/10/25(火) 16:01:15.50ID:???
>>281
普通なら、接続先をlocalhostにしてローカルな環境で開発したものを、そのまま本番環境に持って行けばいいだけ。
下手にhostnameで繋ごうとすると、pg_hba.confで接続設定を追加しないといけない。
それとも、ローカルな環境から本番環境のデータベースに接続したいって話?
0283nobodyさん2016/10/25(火) 16:05:42.39ID:???
sakuraのdbはlocalhostじゃない場所にあるから、xamppのをアップロードするとlocalhostを見てしまう→見つからない
ってことだと思う
それを防ぐために分岐させたいと言うことだろう
やったことないけどそんな方法あるんかね
0284nobodyさん2016/10/25(火) 16:57:02.97ID:???
$local_mode = true;
$dns = $local_mode ? local : sakura;
$pdo = new PDO($dns);
0285nobodyさん2016/10/25(火) 17:07:49.84ID:???
>>284
そのコード、ローカルで実行してもsakuraで実行してもlocal_mode = trueになるよね、、、
レベルで詰まってるのだろうか
0286nobodyさん2016/10/25(火) 17:28:09.31ID:lqPEVp/h
WordPressの検索結果表示PHPプログラムについての質問です。

標準では
get_template_part( 'template-parts/content', 'search' );
のコードで検索結果を表示している様なのですが、
この関数で表示されるコードをa href="のhtmlタグのまま表示したいと思っています。

htmlspecialchars()やpreを使っても出来ないので、どうしたら解決出来ますか?
0287nobodyさん2016/10/25(火) 17:32:14.92ID:???
>>285
284だけど、俺は質問者じゃないのだが
例えばそういうふうにするって示しただけで
当然本番じゃfalseにしてから使うのを想定してる
0288nobodyさん2016/10/25(火) 17:43:17.66ID:???
>>283
ipアドレス取得してそれで判断させれば良いんじゃない
0289nobodyさん2016/10/25(火) 17:46:53.99ID:???
>>287
> 284だけど、俺は質問者じゃないのだが
いや、わかってるし

> 当然本番じゃfalseにしてから使うのを想定してる
編集するならそんなめんどいことしなくて
$pdo = new PDO(sakura);
ってやればいいし
一つのコードで何かを振り分けたいんじゃないの?
0290nobodyさん2016/10/25(火) 18:05:16.41ID:???
・hostname()で切り分ける
・環境変数DB_HOSTを設定しそれを使う(なければlocalhostとか)
・アプリのエントリポイントを分ける(index.phpとindex_dev.phpとか)
0291nobodyさん2016/10/25(火) 19:48:51.12ID:???
接続先ホスト名(必要ならポート番号なども)を設定ファイルに追い出すのが無難な方法じゃないかな。
開発環境と運用環境で処理を分けるってのはDBに限った話じゃないだろうし。
0292nobodyさん2016/10/25(火) 21:52:30.71ID:???
>安全な接続ではありません

>www.php.net の所有者による Web サイトの設定が不適切です。
>あなたの情報が盗まれることを防ぐため、この Web サイトへの接続は確立されません。

>www.php.net は不正なセキュリティ証明書を使用しています。
> 自己署名をしているためこの証明書は信頼されません。
> エラーコード: SEC_ERROR_UNKNOWN_ISSUER

だれかwgetで取ってくるから最新のソースのアドレス頼む
0293nobodyさん2016/10/25(火) 22:03:53.46ID:???
sakura調べてみたらDBサーバのアドレスは
https://help.sakura.ad.jp/hc/ja/articles/206053952--%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90-%E8%BF%BD%E5%8A%A0-%E5%89%8A%E9%99%A4
(禁止ワードで張れないからリンク先参照)
のようだからlocalhost指定が出来ないってだけの話だろ
本番に移行するときにDBの接続情報変えればいいってだけの話
0294nobodyさん2016/10/26(水) 00:17:59.48ID:???
>>292
…
https://secure.php.net/downloads.php
0295nobodyさん2016/10/26(水) 02:38:04.78ID:???
>>294
oh...Googleからトンだらそうなったんだけどそれが正しいアドレスか
thx
0296nobodyさん2016/10/26(水) 10:43:18.97ID:???
>>293
> 本番に移行するときにDBの接続情報変えればいいってだけの話
それはどうやって実現できますかって話なんだけどね
0297nobodyさん2016/10/26(水) 13:22:24.63ID:???
>>296
まず2つの接続情報を書いとかないと実現はできない。
あとは環境変数見て振り分ければ完成。

サーバを移行させたり 使う環境が変わることはあるわけだし、
普通は接続情報は都度直接編集するもんでしょう。
同じlocalhostで通るにしても ユーザ名やパスワードまで普通合わせたりしないし。

そのへん考えなくていいSQLite使えばいいと思うよ。
0298nobodyさん2016/10/26(水) 13:41:58.54ID:???
>>297
> 普通は接続情報は都度直接編集するもんでしょう。
しないよ。
ワンクリックデプロイですがな。
0299nobodyさん2016/10/26(水) 14:00:48.25ID:???
設定に関する情報がないといけないわけで、
ワンクリックデプロイといってもやってることは同じでしょ。
0300nobodyさん2016/10/26(水) 14:28:42.50ID:???
>>299
> 設定に関する情報がないといけないわけで、
> ワンクリックデプロイといってもやってることは同じでしょ。
書き方が悪かった。

しないのは、「サーバを移行させたり 使う環境が変わること」があっても、「接続情報は都度直接編集」すること。
サーバ毎にユーザ名やパスワードを変更することもしない。
どこでも、localhost接続で同じユーザ名、同じパスワード。

「サーバを移行させたり 使う環境が変わること」やデプロイ先が増えたりしたら、デプロイスクリプトのデプロイ先を変更するだけ。
0301nobodyさん2016/10/26(水) 14:35:17.91ID:???
>>299
データベースのマイグレーションツールは使ってる?
そのツールのデータベース接続情報がファイルに記述されてるとして、それはどうやって管理してる?
ユーザ名・パスワード直書き?
0302nobodyさん2016/10/26(水) 14:48:36.51ID:???
都度「直接」編集
これがいけなかったんだな
0303nobodyさん2016/10/29(土) 17:19:30.19ID:???
自分で適宜httpdやらDNSやら
その他WEBサービス系で必要であろうサーバは整えられるんだけど、
開発できる言語がphpとJavascript、SQLしか使えないんだけど、
その程度の者でもWEB系の開発企業で即戦力になったりしますか?
ちなみに実務は7年で、入社してからずっと時間給で働いてます。
そろそろ先々が心配なので転職or時間単価向上を考えたいと検討してます。
雑談スレと書いてあったので、こういう話は書いても大丈夫でしょうか。
スレ違いだったらROMに戻ります。。。
0304nobodyさん2016/10/29(土) 17:37:39.55ID:???
>>303
プログラマ板があるからそっちの方が良いかも?
サーバー管理者は大企業で重宝されるイメージ。一度大きい企業回ってみて、自分の価値を確認するというのはどうだろう
NTTデータとかyahooなどの超大手に、当たって砕けるというより自分の価値を確認するつもりで受けてみてはどうかな
0305nobodyさん2016/10/29(土) 20:44:28.72ID:???
>303
PHP+JavaScript+SQLは、案件が最も多いと同時に、金額が最も安い組み合わせです。
次の仕事を見つけることはできても、それで収入アップが実現できるかは厳しいんじゃないでしょうか。
03063032016/10/29(土) 21:55:10.97ID:???
レスありがとうございました。
多々ご指導くださり、大変勉強になりました、ありがとうございます。
単価にすると時間当たり900円にも届いてない状態で、
流石にフリータと変わらないと最近焦りを隠せなくなっておりました。
せめて実務経験があればと思っていたのですが、
間もなくいわゆる”35歳”を迎えるので実績が仮にあっても
切られてしまうのではないかと気が気ではなくなりつい投稿してしまいました。
スレ汚し失礼しました、ご教示いただきました内容を念頭に置いて新しい言語にチャレンジするなり、
体当たりするなりしてみたいと思います。
ありがとうございました。
0307nobodyさん2016/10/29(土) 23:18:37.38ID:???
2chでそこまでかしこまらなくても平気だよ…w
がんばってください。
0308nobodyさん2016/10/29(土) 23:28:07.72ID:???
>>305
安いといってもその組み合わせ月50万もらえるからね
0309nobodyさん2016/10/30(日) 09:51:33.15ID:???
おちんぽお断り
0310nobodyさん2016/11/01(火) 16:27:31.79ID:???
mysqlのtime型カラムに格納されている時間の変更方法を教えてください

例えば「18:00:00」を「18:00」に変換するとき、どうすればよいでしょう?
ただしPHP側の操作のみで、文字の切り取り以外でお願いします
0311nobodyさん2016/11/01(火) 17:03:56.16ID:???
date_format()?
http://php.net/manual/ja/datetime.format.php
0312nobodyさん2016/11/01(火) 17:06:19.32ID:???
DateTime::__constructかDateTime::createFromFormatでDateTimeに変換すれば
0313nobodyさん2016/11/01(火) 17:39:20.52ID:???
文字の切り取りがなぜ嫌なのか
0314nobodyさん2016/11/01(火) 17:43:30.85ID:???
スレがたくさんあってどこに書き込んで良いかわからなかったんだけど、、、

「入力フォームを多用+保護されているけどReaderで保存可なPDF」をテンプレートとして、
ストレスなく扱えるPHPライブラリってあるかしら?

FPDIだと、入力フォームは消えてしまうし、PDFが保護されていたりすると、エラーが出て
読み込めないようで…。

有償、無償は問いません。
どなたかご教示いただけないでしょうか。
0315nobodyさん2016/11/01(火) 17:57:04.38ID:???
>>314
まずは、ストレスがあるが要求仕様を満たしているライブラリの例を挙げてもらおうか。
0316nobodyさん2016/11/01(火) 18:27:16.91ID:???
>>315

ごめんなさい、要は、

> FPDIだと、入力フォームは消えてしまうし、PDFが保護されていたりすると、エラーが出て
> 読み込めないようで…。

これがストレス。
で、書き方を間違えてた。保護は関係ないみたい。圧縮されてるとエラーでした。
0317nobodyさん2016/11/01(火) 18:36:48.61ID:???
>>319
とりあえず試してだったライブラリを列挙して。
そこにないライブラリ知ってたら教えるから。
0318nobodyさん2016/11/01(火) 18:38:05.37ID:???
>>317
あとで出そうと思っている候補はいくつあるの?
0319nobodyさん2016/11/01(火) 18:41:47.03ID:???
(これはさっさと自分で試した方が早いパターンやね・・・)
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
横からですいません。全く思いつきません…
よければ頂きたいです。
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 こいつ、なんなの? 本当にアホなの
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:???
別に争っているようにはみえないが
0529nobodyさん2016/11/22(火) 15:11:06.45ID:???
争ってるって具体的にどれだ?
もし>>520-522のことならこれは争ってるとは言えんぞ
>>520の知識が足りないだけだ
0530nobodyさん2016/11/22(火) 15:37:33.79ID:???
仲良くしようぜ俺たちは
Piece
Hart
People
だろ!
0531nobodyさん2016/11/22(火) 15:56:49.59ID:???
Hurtじゃなくてか
0532nobodyさん2016/11/22(火) 16:10:56.20ID:???
Poorで
Harmな
PHPer
0533nobodyさん2016/11/22(火) 19:59:40.27ID:???
どうでもいいこと書き込んでんじゃねーよ、アホども
0534nobodyさん2016/11/25(金) 14:03:40.98ID:2qZ3IwqW
さくらインターネットのDBサーバに
WindowsクライアントのCSEからデータ抽出する事はできますか?
0535nobodyさん2016/11/25(金) 14:12:30.84ID:???
>>534
できない
0536nobodyさん2016/11/25(金) 14:39:46.47ID:???
>>534
DBサーバってレンタルサーバ?
もしそうなら、マネージドじゃなければ繋げない。
0537nobodyさん2016/11/25(金) 15:27:33.11ID:???
それPHPと何の関係があるのん
0538nobodyさん2016/11/25(金) 15:55:35.41ID:???
>>537
PHPで接続しようとしてんじゃないの?
0539nobodyさん2016/11/25(金) 15:59:14.98ID:???
>>538
それがPHPと関係のある事案だとおもってるのん
0540nobodyさん2016/11/25(金) 16:00:51.35ID:???
別にここで質問してもいいんじゃね
dbで上手く行ってもphpの制限で使えない事もあるわけだし
0541nobodyさん2016/11/25(金) 16:04:42.70ID:???
文句しか言わない奴
0542nobodyさん2016/11/25(金) 16:06:23.76ID:???
> 事案
> 主に法的や政治的な問題として着目する出来事。
まぁ、事案じゃないわな
0543nobodyさん2016/11/25(金) 16:10:55.01ID:???
事案わろた
0544nobodyさん2016/11/25(金) 16:18:57.21ID:???
一生ワロてればいいやん、バカ面して
0545nobodyさん2016/11/25(金) 16:22:28.00ID:???
540 : nobodyさん2016/11/25(金) 16:00:51.35 ID:???
別にここで質問してもいいんじゃね
dbで上手く行ってもphpの制限で使えない事もあるわけだし


そいういうもんだいじゃねーーーーーーーーーーーーーーーーーーはげ
0546nobodyさん2016/11/25(金) 16:29:41.53ID:???
>>545
どういう問題なんだ?
質問は好きにしていいと思うぞ
0547nobodyさん2016/11/25(金) 16:51:53.45ID:???
> どういう問題なんだ?

534 : nobodyさん2016/11/25(金) 14:03:40.98 ID:2qZ3IwqW
さくらインターネットのDBサーバに
WindowsクライアントのCSEからデータ抽出する事はできますか?

こういう問題だばーーーーか



>質問は好きにしていいと思うぞ


お前の家の鍵が開いてないのでおまえの家の冷蔵庫のハーゲンダッツ食えねーけどどうしたいいの?

って、質問しても良いのか、ばーーーーーーーーーーーーーーーーか

脳みそ腐ってんのかよ、お前
0548nobodyさん2016/11/25(金) 16:55:57.76ID:???
怖いよ、マジで
0549nobodyさん2016/11/25(金) 16:57:41.35ID:???
おめーがどう感じるかなんて知るか
0550nobodyさん2016/11/25(金) 17:04:48.32ID:???
うざ
0551nobodyさん2016/11/25(金) 17:08:44.21ID:???
うざ しか書けない能無しが一番いらない。
自己主張してみようよ、能無しくん。
0552nobodyさん2016/11/25(金) 17:21:22.92ID:???
ばーーーーーーーーーーーーーーーーか

脳みそ腐ってんのかよ、お前
0553nobodyさん2016/11/25(金) 18:20:18.96ID:???
>>551
間違い無く、このスレではお前が一番いらない。
0554nobodyさん2016/11/25(金) 18:54:58.00ID:???
順番付け始めるなよw
0555nobodyさん2016/11/25(金) 23:39:03.50ID:2qZ3IwqW
>>534
だが出来た。
0556nobodyさん2016/11/25(金) 23:45:45.21ID:2qZ3IwqW
お前らレベル低いなw

クライアントソフトから余裕でレンタルサーバのDBに直結できるよw
0557nobodyさん2016/11/26(土) 01:42:30.52ID:???
そこでphpは関わったのかっていう話なんだけども
0558nobodyさん2016/11/26(土) 02:30:33.51ID:gALCdYf6
レンタルサーバのPHPにクライアントのDB操作ツールから余裕で接続できる^^b

やっぱり俺天才www


お前ら低スキルだな。
0559nobodyさん2016/11/26(土) 02:31:18.53ID:gALCdYf6
>>536
お前あほすぎwwwwwwwwwwできるわwwwwwwww
0560nobodyさん2016/11/26(土) 07:40:12.32ID:???
初心者お断りですからさっさと解散して下さい
0561nobodyさん2016/11/26(土) 12:11:39.29ID:???
str_rot13()ってどんな時に使うの?
0562nobodyさん2016/11/26(土) 12:29:40.05ID:???
ROT13で検索してみればいいじゃん。
0563nobodyさん2016/11/26(土) 12:42:24.59ID:???
>>562
ありがとうございます
本格的な暗号化にどう使うのかと思ってましたが、使わないんですね。当たり前ですよね。

wikipediaより
雑誌などでクイズの正解を上下逆さまに印刷するが、それと似たようなものである。
0564nobodyさん2016/11/26(土) 13:39:47.51ID:???
ROT13とかbase64とかは、クソプログラムに嫌味を書いておく場合に使う。
どうしようもないくらいクソなプログラムというのは存在する。
0565nobodyさん2016/11/26(土) 20:31:12.19ID:???
もう見てないと思うけど、見つけたんで一応

>>314
http://php.net/manual/ja/faq.using.php
フリーではない商用ライブラリである PDFLibを使わずに PDFファイルを生成するにはどうしたらよいでしょうか? フリーのもので、外部のPDFライブラリを必要としない ものがいいのです。
PHPで書かれている代替手段がいくつかあります。 ≫ FPDF や ≫ TCPDF などです。

また、Haru 拡張モジュールもあります。 これは、フリーな外部ライブラリ libHaru を使用しています。
0566nobodyさん2016/11/26(土) 21:38:25.63ID:???
Ethnaってどうなったの?
0567nobodyさん2016/11/26(土) 21:42:15.73ID:???
どうなったかというと、忘れられた
0568nobodyさん2016/11/26(土) 21:59:27.40ID:???
記憶の底の底にあった
http://ethna.jp/doc/
最新のニュース
2012/3/31 Smarty 3.1.8, simpletest 1.1.0 (stable) のパッケージ配布
Ethna 2.6.0 beta4 のリリースに先駆けて、Ethna の PEAR チャネルに Smarty 3.1.8、simpletest 1.

もうやる気ないなら打ち切り!って言ってしまえばいいのにね
0569nobodyさん2016/11/26(土) 22:10:01.67ID:???
色々とセンスなさすぎるからな。
dir構造とかオレオレ感溢れすぎだろ
0570nobodyさん2016/11/26(土) 22:50:53.09ID:???
HTMLヘルパーとか考える奴アホだろ。
HTML理解できねー奴がプログラム組めるわけねーじゃん。
0571nobodyさん2016/11/26(土) 23:05:17.29ID:???
プログラムっぽい書き方をするために必要なんだろ
UIなぞに手間取ってる暇はないってな
0572nobodyさん2016/11/27(日) 14:08:29.40ID:???
んな、ヘルパーの実装次第で書き方変わるバカ知識覚える意味ねーじゃん。
0573nobodyさん2016/11/27(日) 14:47:54.60ID:???
ヘルパー側をアップデートするだけで
コードをいじることなく最新のHTMLに更新される
0574nobodyさん2016/11/27(日) 16:05:01.56ID:???
それ、ヘルパー側もアップデートされるからあんまり意味ないというオチでは
0575nobodyさん2016/11/27(日) 17:38:43.47ID:???
>>573の言いたいことはさ、「ぼく、1つのフレームワークしか使いません」ってことなわけさ。
んなわけねーじゃん。

状況に合わせていろんなフレームワーク使わなきゃいけないのに
特定フレームワークのヘルパーの使い方なんか、いちいち覚えてられるかよ。
0576nobodyさん2016/11/27(日) 21:05:09.59ID:???
>>575
突っ込みどころが満載すぎる
0577nobodyさん2016/11/27(日) 21:52:12.13ID:???
>>576
満載なら1個くらいしてすればいいじゃん、サル
0578nobodyさん2016/11/27(日) 21:55:32.63ID:???
HTMLヘルパーもethnaも使いたい人が使えば良いんじゃないか
そんな突っかかるほどのものでもなかろうに
0579nobodyさん2016/11/28(月) 00:25:10.38ID:???
突っ込む力がもうなくなってしまったよ
0580nobodyさん2016/11/28(月) 02:46:37.95ID:Jo2/Mp4P
俺のPHPのメモ書きブログが結構アクセスあるんだけど
素人のメモ書き参考にしてどうすんの?
0581nobodyさん2016/11/28(月) 03:34:03.02ID:???
検索に引っかかったから開いただけだよ
0582nobodyさん2016/11/28(月) 11:31:56.39ID:???
>状況に合わせていろんなフレームワーク使わなきゃいけないのに
そういうオナニーは一人でやってろ
0583nobodyさん2016/11/28(月) 11:49:10.27ID:???
>>577
HTMLヘルパーを使う=1つのFWしか使いません=謎
いろんなFWに学習コストは割けるのに
その一部でしかないHTMLヘルパーに割けれないって矛盾してる
状況にあわせてといいつつ状況にあわせられていない
使うことが必須なわけでもないし覚えたくないなら覚えなくていい
0584nobodyさん2016/11/28(月) 13:17:07.33ID:???
他人をdisらないt死んじゃう病
0585nobodyさん2016/11/28(月) 18:11:00.66ID:???
>いろんなFWに学習コストは割けるのに
>その一部でしかないHTMLヘルパーに割けれないって矛盾してる

何言ってんだこいつ?
割く必要もない労力を何故割きたがるんだ?

ノータリンの考えかたはわからんな。

>使うことが必須なわけでもないし覚えたくないなら覚えなくていい

使ってあったら必要もないのに調べなきゃならなくなんだろ

迷惑なんだよ、お前みたいなゴミクズ
0586nobodyさん2016/11/28(月) 18:18:47.54ID:???
>>585
お前が一番迷惑
0587nobodyさん2016/11/28(月) 18:24:40.63ID:???
htmlヘルパーって使ったこと無いけど、phpで記述すればいいんじゃないかこれ
0588nobodyさん2016/11/28(月) 18:42:52.73ID:???
>>586
ホザイてろ、ゴミ

>>587
お前が何言ってるかわからんが、HTMLを記述すればいいだけだ。
ヘルパーとか考えるやつも便利だと思うやつも、センスない。
0589nobodyさん2016/11/28(月) 18:48:15.28ID:???
単なるかまってちゃんだな
完全無視推奨
0590nobodyさん2016/11/28(月) 19:15:15.69ID:???
笑った

htmlヘルパー
echo $this->Html->image("recipes/6.jpg", array(
"alt" => "ブラウニー",
'url' => array('controller' => 'recipes', 'action' => 'view', 6)
));

出力結果:
<a href="/recipes/view/6">
<img src="/img/recipes/6.jpg" alt="ブラウニー" />
</a>
0591nobodyさん2016/11/28(月) 19:28:39.69ID:???
>>589
おまえの脳みその出来が悪いことを俺貶める理由にするなよ。
まだヘルパー()とか便利だと思ってるのかよ、おサルさん。
0592nobodyさん2016/11/28(月) 22:36:37.48ID:Jo2/Mp4P
>>581
サイトにも書いてるけど俺のメモ書きなので
真似してバグってもしらねーよ。

よく使うコードだけどメモっておくとほんと便利だわ。
コピペでスイスイ開発がすすむ。
0593nobodyさん2016/11/28(月) 22:39:19.39ID:???
PHPerの皆さんに質問ですが、
小規模(フォームとか掲示板とか)のプログラム作るときって
フレームワーク使いますか?それとも使わずに書きますか?
0594nobodyさん2016/11/28(月) 22:56:17.16ID:???
>>592
PHP使いはもう正規表現をblogに書くな事件の再来を狙ってるんですか
0595nobodyさん2016/11/28(月) 23:08:04.03ID:???
>>591
唐突にPHPと無関係なHTMLヘルパーがとか言いだすカニミソはとっとと消えろ
ゴミカス野郎
0596nobodyさん2016/11/28(月) 23:11:21.71ID:Jo2/Mp4P
>>594
知らん。
ただ、メモっておくとほんと便利。

コード忘れても基本自分のノート代わりにしてるので
検索してすぐ欲しい情報が見つかるからね。

他人が書いたくそメモサイトと違って
自分の言葉で自分が分かる事に特化した記載をしてるのでほんと快適♪
0597nobodyさん2016/11/28(月) 23:17:13.31ID:???
正規表現なんて必要ない
そもそも正規表現で弾くような必要が本当にあるのか問い詰めたい
0598nobodyさん2016/11/28(月) 23:45:26.94ID:???
>>592
開いただけで使うかどうかはまた別の話。
タイトルや引っかかった文で目的のものか開いてみるけど、開いたら全然見当違いだったってことは多い。
0599nobodyさん2016/11/28(月) 23:47:06.69ID:???
>>596
あなたが書いてるコードがどういうものか分からないけど、そのくそメモサイトの同類になってないなら別にいいと思うよ。
ただ、自分用のメモなら全世界に公開する必要なんてないだろとも思う。
0600nobodyさん2016/11/29(火) 00:47:40.09ID:QC5ddTRE
>>598
>>599
ガタガタうるさい。いやなら見るな人のメモブログ。
0601nobodyさん2016/11/29(火) 01:00:04.73ID:???
>>600
別に>>592が悪いと言ってるわけじゃないよ。
嫌だとも思ってないし。ただ調べものしてるとサイトを開いた回数と、その内容が参考になる回数は大幅に違うってだけ。
0602nobodyさん2016/11/29(火) 09:08:17.97ID:???
>>593
規模による
本当にペラ一枚のキャンペーン専用ならhtmlを直接書く
0603nobodyさん2016/11/29(火) 09:25:35.65ID:???
メモサイトは分かる
公開すると適度な緊張が生まれて微妙に洗練されるんだよな
まぁそれで助かる人もいるだろうしいいんじゃね?
俺は一応エラーと解決方法を積極敵に載せるようにしてるよ。ハマったときが一番きついからな
0604nobodyさん2016/11/29(火) 10:45:32.56ID:???
どうでもいいけど、Qiitaにsnippetレベルのゴミ投稿するのマジ勘弁
新着に近い場合は評価も付かないから、リンク開かないと内容がわからん
で、開いてがっかりする
0605nobodyさん2016/11/29(火) 10:52:03.75ID:???
名前が売れるとともに有象無象が入ってくるのは仕方ない
永遠なんて、ないんだよ
0606nobodyさん2016/11/29(火) 11:07:31.92ID:QC5ddTRE
>>603
>俺は一応エラーと解決方法を積極敵に載せるようにしてるよ。ハマったときが一番きついからな
うん、これで何度か救われた

>>604
見るなバカ
0607nobodyさん2016/11/29(火) 15:29:54.33ID:???
素人って自己紹介するようなやつはム板に行ってね
0608nobodyさん2016/11/29(火) 16:03:32.57ID:/xcsBLK+
このスレ、ほぼ素人じゃん
0609nobodyさん2016/11/29(火) 16:52:08.04ID:???
>>606
公開すんなバカ
0610nobodyさん2016/11/29(火) 17:05:20.73ID:???
見せるアホウに見るアホウ
同じアホなら見せなきゃ損損
0611nobodyさん2016/11/29(火) 19:58:25.40ID:QC5ddTRE
>>609
のぞいてんじゃねーよ。変態!
0612nobodyさん2016/11/29(火) 21:45:24.60ID:???
何で喧嘩してんだよ、アホども
0613nobodyさん2016/11/29(火) 23:53:26.53ID:???
そもそもスレタイの初心者お断りっていうのは隔離スレだよって意味だから
0614nobodyさん2016/11/30(水) 00:02:30.80ID:J1ZKp0ZY
↑
うっせーばか。仕切るな
0615nobodyさん2016/11/30(水) 03:51:04.75ID:???
回答者が答え飽きたしょうもない質問をふるいにかけるためじゃね
0616nobodyさん2016/11/30(水) 14:44:44.96ID:???
>>614
自分が仕切っていることに気づかないバカ
0617nobodyさん2016/11/30(水) 18:20:49.91ID:???
フォトに三種類のサイズがある場合、それぞれのサイズ別URLを取得するのは

・関数を3つに分ける
例)photoSmallUrl, photoMediumUrl, photoLargeUrl

・関数の引数で指定させる
例)photoUrl(int $id, str $type = 'small')

どちらがベストプラクティスですか?
0618nobodyさん2016/11/30(水) 19:37:49.32ID:J1ZKp0ZY
↑
お前の脳みそでは無理

がベストチョイス
0619nobodyさん2016/11/30(水) 20:15:36.96ID:???
>>617
1案のコードを書いてみると、おそらく3つの関数でほとんど同じコードが出てくる結果になるだろう。

その場合、当然2案にリファクタリングすることになる。
0620nobodyさん2016/11/30(水) 20:16:49.27ID:???
>>617
後者

まぁ前者は可変関数なんてのもあるけどな
http://php.net/manual/ja/functions.variable-functions.php
0621nobodyさん2016/11/30(水) 20:48:32.17ID:???
>>620
可変にしてもコードが重複するのは変わらんからね。
関数を可変にするのは今回のような場合の為じゃないかな。
0622nobodyさん2016/11/30(水) 20:54:41.13ID:???
関数名が気に入らないw
0623nobodyさん2016/11/30(水) 22:28:20.62ID:???
どうせ2案になるんだから例示関数名なんかどうだっていいだろ
0624nobodyさん2016/12/01(木) 05:11:23.70ID:???
photoUrlの写真のidじゃなくてグループ化したやつのidだろ
だから違和感があってな
0625nobodyさん2016/12/01(木) 05:11:55.22ID:???
寝起きで日本語がおかしかった
まぁさっしてくだし
0626nobodyさん2016/12/01(木) 17:15:12.06ID:???
else if?
elseif?
0627nobodyさん2016/12/01(木) 20:26:43.07ID:aRkR7W4h
>>625
お前の顔もおかしいよ
0628nobodyさん2016/12/02(金) 12:55:15.56ID:???
php7.1キタ━━━━(゚∀゚)━━━━!!
http://php.net/index.php#id2016-12-01-3
0629nobodyさん2016/12/02(金) 13:26:41.26ID:???
バグフィックスがメインでたいした変更はないな
0630nobodyさん2016/12/03(土) 13:17:39.70ID:???
ロゴがクリスマス風になってイラッとした
0631nobodyさん2016/12/11(日) 18:09:11.24ID:???
>>630

おまえ、場の空気をシラッとさせるスレッドストッパー決定な。
0632nobodyさん2016/12/17(土) 09:45:26.51ID:???
for ( $i = 0; $i < 256; $i++ ) {
  $fp = stream_socket_client( "tcp://xxx.xxx.xxx.{$i}:1234", $errno, $errstr, 0.3 );
  if ( $fp ) {
    echo "{$i} OK\n";
    fclose( $fp );
  }
}
一括サーバチェックコードなのですが、
$iを増やせば増やすほど正常なのにレスポンスが返ってくることが少なくなります。
たまに調子が悪いと漏れますが、1個ずつやれば自分とのやり取りは0.2秒でも問題のない国内サーバ群です。
タイムアウトを3秒ぐらいにすれば問題がなくなるのですが、それだと時間がかかりすぎます。
これは単純にPHPだけの問題じゃない気がするのですが、どこを見なおせばいいでしょうか?
0633nobodyさん2016/12/17(土) 10:19:26.66ID:???
1回ごとにウェイトかけないの?
06346322016/12/17(土) 11:22:19.39ID:???
>>633
ありがとうございます。
sleep挟んでみましたが特に効果は見られませんでした。
3秒ぐらいにすると10までしかいかなかったのが20ぐらいになる程度には改善するのですが、すぐに手詰まりになります。
OS(Windows)側でTcpTimedWaitDelayを30秒に変更もしてみましたが、それも特に効果はありませんでした。
一番安定するのはソケットのタイムアウトを0.3秒から増やすことで、それ以外はあまり効果がないようです。
0.3秒でもリスト(上のコードはforですが実際はforeachでやります)の最初のほうに持ってきたIPはポンポン返るんですけどね。
0635nobodyさん2016/12/19(月) 10:56:38.32ID:???
>>632
まず何エラーが発生してるのか教えろ

問題の把握&解決法
・tcpをダンプして何が起こっているのか観察する
・スレッドを使える言語にしてタイムアウトを伸ばす
・PHPじゃなきゃ駄目なら、複数プロセスを同時に起動させて対象を分割しタイムアウトを伸ばす
0636nobodyさん2016/12/19(月) 11:36:42.72ID:???
>>632
> これは単純にPHPだけの問題じゃない気がするのですが、どこを見なおせばいいでしょうか?
別手段で同じ事やってみて、再現するかどうか試してみたら?
0637nobodyさん2016/12/19(月) 14:57:55.84ID:???
>>632
前提として、まず、*.*.*.0と*.*.*.255が同時に使えるということはない。
さらに、*.*.*.256〜は使えない。
それはわかってるのか?
0638nobodyさん2016/12/19(月) 15:57:55.19ID:???
24bitが前提なん?
0639nobodyさん2016/12/19(月) 16:06:34.88ID:???
> 0.3秒でもリスト(上のコードはforですが実際はforeachでやります)の最初のほうに持ってきたIPはポンポン返るんですけどね。
0640nobodyさん2016/12/19(月) 17:32:46.69ID:???
スレッド使え(別言語で)
0641nobodyさん2016/12/19(月) 20:17:26.20ID:???
遅延もっと伸ばしたらexpectedな結果になるの?
06426322016/12/20(火) 15:57:45.40ID:???
レス遅くなり申し訳ありません。

> 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
> または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
エラーはこんな感じです。

遅延を伸ばせば期待通りになります。

wiresharkの使い方もよくわからず、tcpダンプとかちょっとレベルが高くて無理なので、
あれから試行錯誤してみたところわかったことが1つありました。
チェックに使うサーバ郡は、応答が返って来ないサーバのほうが多いぐらいなのですが、
その中から返ってきたもののみを抽出して、再度チェックしたところ、
全てのサーバが0.1秒でも問題なく返ってきました。
>>632のコードで全部ifの中を通ってきたということなのですが、
ひょっとしたらfcloseしないことが何か関係しているのでしょうか?

スレッド使えというのはもっともな意見ですね。
とりあえず今回の問題の原因が気になるので、もうちょっと調べてみようと思います。
0643nobodyさん2016/12/20(火) 16:56:26.59ID:???
隔靴掻痒

> チェックに使うサーバ郡は、応答が返って来ないサーバのほうが多いぐらいなのですが
そのサーバは、ポート1234でlistenしているの?してないの?
してるとしたら、サーバ側でログは出せないの?
別手段で試すことはできないの?
06446322016/12/20(火) 17:44:20.39ID:???
>>643
サーバの管理者は自分ではありません。
そのため、今現在各サーバ管理者がlistenしてるかどうかまではわかりません。
サーバがどういうものかよくわかっていないような人でも、
設定不要でワンクリックでWindows上で立てれるような代物なので、
中にはダイナミックなIPアドレスでDDNSを使わず運用してる人もいると思います。
古い情報も多く整理するためにやっているのですが、
今の書き方だと問題のないサーバまで弾いてしまう可能性があるので、
原因がどこにあるのか(PHPの問題なのか)知りたいです。
専用クライアント使って別手段で1個ずつ試すことは出来ますが、時間がかかりすぎる上に手動になるので・・・
0645nobodyさん2016/12/20(火) 18:14:23.46ID:???
>>644
> 専用クライアント使って別手段で1個ずつ試すことは出来ますが、時間がかかりすぎる上に手動になるので・・・
少しは調べろ
https://www.google.co.jp/webhp?sourceid=chrome-instant&;ion=1&espv=2&ie=UTF-8#q=windows+tcp+%E7%96%8E%E9%80%9A%E7%A2%BA%E8%AA%8D
0646nobodyさん2016/12/20(火) 18:21:39.38ID:???
>>642
> 遅延を伸ばせば期待通りになります。

期待通りって何だよ?

> 1個ずつやれば自分とのやり取りは0.2秒
とあるが、>>632のコードのタイムアウトを10秒とかにすると、生きてるサーバは全部0.2秒以内に戻るのか?
0647nobodyさん2016/12/20(火) 18:51:50.60ID:???
てか、なんでstream_socket_client()使ってるんだ?
06486322016/12/20(火) 20:13:02.88ID:???
>>645
別手段ってそういうことだったんですね。
なんか特別な専用ツールがないかみたいなことを聞かれてるかと思ったので。

>>646
>>641へのレスだったのですが、長めに5秒にしてみたのですが、生きてるものはちゃんと返ってきました。
この生きてるものというのは、0.3秒で10個ずつ分割して、コンソールからやったときに正常に返ってきたものと同じです。
これを10個ずつとか分割しないで、一気に1回でやったら5秒なら返ってきました。
>生きてるサーバは全部0.2秒以内に戻るのか?
生きてるサーバにたいしてタイムアウトを0.1秒にしたら(分割しないでも)全部返ってきました。

>>647
なんか他にいい手段ありますか?
0649nobodyさん2016/12/20(火) 22:49:27.33ID:???
何のサーバ探してるの?Webカメラとか?
0650nobodyさん2016/12/21(水) 11:05:46.46ID:???
なんて説明が下手なんだ。

>>648
> これを10個ずつとか分割しないで、一気に1回でやったら5秒なら返ってきました。
と
> 生きてるサーバにたいしてタイムアウトを0.1秒にしたら(分割しないでも)全部返ってきました。
は、矛盾してるが。

> なんか他にいい手段ありますか?
質問の意図は、なんでstreamを使ってるのか、だ。
普通の手段をなんで使わないんだ?
http://php.net/manual/ja/book.sockets.php
とか
http://php.net/manual/ja/ref.network.php
(つか、検索しろよ)
0651nobodyさん2016/12/21(水) 13:12:59.09ID:???
犯罪の臭いがするな
06526322016/12/21(水) 15:25:46.59ID:???
>>649
いくつかのタイトルのゲームサーバです。

>>650
>>632のコードで、0〜255までのうち、偶数は正常で応答があり、奇数は異常で応答がないとし、
これは正常なサーバの状態とします。
stream_socket_clientのタイムアウトは0.3秒に設定されていますが、
これでは、最初の方は正常に応答があるものの(分割した理由はこのため)、ある程度いくと、
正常なはずの偶数のサーバの応答も返ってこなくなります(100%ではありませんが)。
しかし、タイムアウトを5秒まで伸ばしたところ、全て正常に応答が返ってくるようになりました。
ちなみに分割というのは、sleepを挟んでということではなく、
一度スクリプトを終了して、再度スクリプトを起動しています(引数でstartとendを指定するイメージ)。

forのインクリメントを$i++から$i+=2にし、正常な偶数のサーバのみに問い合わせた場合、
タイムアウトを0.1秒にしても全て正常に応答が返ってきます。


教えていただいた関数ですが、上のはクライアント側には使わないと思います。
下のはfsockopenのことを言っているのなら、stream_socket_clientとほぼ同じ関数です。
06536322016/12/21(水) 15:41:28.87ID:???
すみません、socket関数についてですが、
使わないというのは語弊があったので、訂正します。
使う必要がないというニュアンスでお願いします。
サーバの仕様がわからないので・・・
0654nobodyさん2016/12/21(水) 16:38:45.41ID:???
netstat 使ってみ、理由がわかる
06556322016/12/21(水) 16:40:31.51ID:???
環境はWindowsを示唆することをレスの途中でちらっと言いましたが、
正しくはWindows7+PHP5.4です。

ハード的にいえばWindowsのものよりだいぶ劣っているのですが、
先ほどCentOS7+PHP7の別環境を構築したので(VM上ではなく専用機)、
>>632のコードを実行しましたが、同一回線で問題なく最後まで正常に動作しました。

Windowsのソケットが悪いのか、ハードに問題があるのか、
何が原因かまではわかりませんが、どうも環境依存っぽいです。

環境依存となると、正確な情報が欲しければタイムアウト伸ばしたほうがよさそうなので、
一応Javaでもためそうとおもいますが、とりあえず構築したLinuxで気長にやることにします。
0656nobodyさん2016/12/21(水) 17:29:34.20ID:???
>>653
別手段でやってみろとアドバイスしてるのに、必要がないとか言われたわ
0657nobodyさん2016/12/21(水) 18:35:56.95ID:???
抽象的な言葉ばっか使ってるから話が噛み合ってないんだろ
お前らいい加減学習しろよ
0658nobodyさん2016/12/22(木) 12:51:15.27ID:???
https://chrome.google.com/webstore/detail/%E3%81%AF%E3%81%A6%E3%81%AAng/mbgdnfmdelffjdhkdggilmphfdihnmcj?hl=ja
0659nobodyさん2016/12/23(金) 23:24:25.82ID:GYV6CxEo
練習でショッピングカートを作ってみようと思いましたが、設計段階でいきなり迷ってしまいました
SESSIONなのか、classなのか、それともtmp用のテーブルを作るのか・・・
何か色々作ってみたいのですが、前に勧めません。とりあえずなんでもいいから作って見たほうが良いんでしょうかe?
こういうのは場数を踏むしかないんでしょうか?
0660nobodyさん2016/12/23(金) 23:58:36.32ID:???
>>659
IOは別クラスに切り出すと後のストレージ切り替えなんかの変更に強い
が, 考え過ぎて手が動かないよりは最初は手を動かした方が良い
0661nobodyさん2016/12/24(土) 00:05:01.87ID:Zz5BM5EI
>>660
ありがとうございます
失敗しても何かの糧になると思って、やってみます
0662nobodyさん2016/12/24(土) 07:51:09.57ID:???
まずは汚いコードでもいいから完成させるんだね
だいたいあれこれ考えてると完成までしないで構想で終わるから
0663nobodyさん2016/12/24(土) 08:43:49.53ID:???
>>662
そう。あとセキュアも完璧主義になりすぎると、リリースできない。
破壊される前提で設計したら負けない。
0664nobodyさん2016/12/24(土) 09:02:16.35ID:Zz5BM5EI
>>663
それちょっと違うくね
0665nobodyさん2016/12/24(土) 09:12:46.63ID:???
>>664
おまえはオレに口答えするだけのレベルなのか?
0666nobodyさん2016/12/24(土) 12:30:40.79ID:???
htmlspecialcharsをDBに格納するときに使うとかで荒れたことあったけど
自信ないやつは笑われてもそうすればいいんだぜ
普通じゃないことをさも当たり前のように言わなければ
自分は糞だからそうするって自覚してれば何をしたっていいじゃない
0667nobodyさん2016/12/24(土) 12:34:40.76ID:???
なんという読みにくい文章をかくのだよ!!!
0668nobodyさん2016/12/25(日) 15:01:39.62ID:???
>>665
俺はお前がゴミクズに見えるから口答えしてもいいな
0669nobodyさん2016/12/25(日) 15:08:18.45ID:???
>>668
ダメだと言っているのがわからないのか?おまえは!!!
0670nobodyさん2016/12/25(日) 16:36:13.43ID:???
>>669
ゴミクズにダメだと言われても知らん。黙らせたいならもっと腕を磨け。
0671nobodyさん2016/12/25(日) 16:38:23.16ID:???
しかしPHPのブログのコードは一貫性が無い物が多いな。
抽象化も下手くそだし、こいつは普段どんなコードを書いているのかというのがひと目で分かるな。
0672nobodyさん2016/12/25(日) 16:48:34.64ID:k0peFTaN
phpはまず言語がへっぽこ
リソースも実質無制限にあるようなもんから速度以外考えない
そりゃ環境に甘えたコードが出てきてしまうだろう
0673nobodyさん2016/12/25(日) 17:32:25.87ID:???
>>670
なに!? おまえPHPマスターになにいってんの?
完全なセキュアなんて無いんだが?
オレの手法は免震構造マンションからヒントを得ている。固く守れば逆に崩れる。
ハッキングされようがその力を無力化する。おまえのスペックでは理解不能の次元であることを謝罪する。
0674nobodyさん2016/12/25(日) 20:54:45.55ID:???
>>673
アホはいい加減に黙れよ。
0675nobodyさん2016/12/25(日) 20:58:02.34ID:k0peFTaN
>>673
尊大さが足りない
0676nobodyさん2016/12/26(月) 00:08:21.78ID:???
抽象化ってぶっちゃけいらねえよな
0677nobodyさん2016/12/26(月) 00:18:19.36ID:BpT0k2cT
多人数開発するなら必須
ソロだとアホらしいだけだ
0678nobodyさん2016/12/26(月) 11:20:55.28ID:miFRCdVb
https://youtu.be/7EekMD3GGHQ

https://youtu.be/uH-WOOcNZ0s

https://youtu.be/xHx5MbIGEoY
0679nobodyさん2016/12/26(月) 11:45:29.81ID:BpT0k2cT
Enchant 関数って日本語非対応なんでしょうか?
0680nobodyさん2016/12/26(月) 12:03:46.34ID:???
if (isset($input['q']) && $input['q']) {
//
}

$input['q']が存在してなおかつ空ではないことを確認する場合、
上記よりも簡潔な書き方はありませんか?
0681nobodyさん2016/12/26(月) 15:35:51.50ID:???
>>680
ない
0682nobodyさん2016/12/26(月) 15:52:00.20ID:???
if ($input['q']??空)
0683nobodyさん2016/12/26(月) 16:28:07.03ID:???
>>682
ザコphper
0684nobodyさん2016/12/26(月) 22:16:26.19ID:???
これ、使ったことある?
今知ったけど怖すぎて使えない

gmp_divexact
gmp_divexact ― 正確な除算
GMP gmp_divexact ( GMP $n , GMP $d )
高速な "exact division" アルゴリズムを使用して n を d で割ります。 この関数は、n が d で割り切れることがわかっている場合にのみ正確な結果を出力します。

$div2 = gmp_divexact("10", "3"); // 間違った結果となります
echo gmp_strval($div2) . "\n";
0685nobodyさん2016/12/26(月) 23:32:48.71ID:???
>>684
それGMPライブラリ側の仕様だから
割り切れると分かっている場合に使える高速アルゴリズムによる除算
0686nobodyさん2016/12/27(火) 22:27:51.95ID:???
phpって内部的にかなりのクソ言語なんですね・・・
死にたい・・・
以下で半日潰れましたorz

これはマッチしてしまう
var_dump(preg_match('/[あい]/', 'う')); // int(1)
0687nobodyさん2016/12/27(火) 23:09:25.98ID:???
>>686
マルチバイト使うのにuオプション付けないお前の頭がクソ

PHPにクソな部分があるのは否定しないがそもそも外部ライブラリ側の仕様持って来るヤツはプログラミング向いてないから早いとこ引退しろ
0688nobodyさん2016/12/28(水) 01:50:10.42ID:???
すまん初心者スレの患者が出てきてしまったようだ
こっちで回収しておく
0689nobodyさん2016/12/28(水) 09:04:28.87ID:???
初心者スレってどこにあるんだ?
0690nobodyさん2016/12/28(水) 10:50:07.82ID:???
>>1もよめないん?
0691nobodyさん2016/12/28(水) 12:15:49.39ID:???
thx
なんでか>>1がNGに入ってたわ
0692nobodyさん2016/12/28(水) 21:36:15.17ID:???
エックスサーバーのPHPサーバーで
PHPでpear::mailを使ってヤフーでSMTP認証してヤフーからメール送れますか?
0693nobodyさん2016/12/28(水) 21:43:17.54ID:???
試したほうが早いと思うぞ
06946922016/12/29(木) 00:28:31.69ID:???
ちゃんと出来ました
ありがとうございました
0695nobodyさん2016/12/29(木) 22:45:48.26ID:???
値:0 でPOSTしたデータがPOSTされていないことになっているので
「はいはい、emptyね」みたいな感じで昔書いたコードを読んでいったら、
そのへんは全部対策してあるのになおも値がとれなくて、
どうなってんだこれ?と思ったら、
keyがアンダースコアとハイフン間違えてて本当にPOSTされてないだけだった。

PHPさん疑ってごめん。でも君は普段から疑わしすぎるんだよ。
0696nobodyさん2016/12/30(金) 08:33:26.83ID:???
PHPStormのカスタマイズについて教えてください。

PHPStormで、カーソル位置がPHPの関数の文字列にあるとき、
F1 キーを押すとPHP日本語ヘルプでその関数の説明をを表示する
ようにしたいです。

ご存じの方いましたら教えてください。
0697nobodyさん2016/12/30(金) 15:55:58.57ID:???
>>695
アホまるだし

>>696
スレチ
0698nobodyさん2016/12/31(土) 09:50:53.91ID:???
Windowsで環境変数にphpのpathを通したので、
コマンドラインからphp xxxx.phpで実行出来るようにはなったのですが、
xxxx.phpにpathを通しても、exeのように、
xxxx.phpあるいはxxxxとうつだけでは実行はできませんよね?
0699nobodyさん2016/12/31(土) 18:38:55.23ID:???
やってみればいいじゃん(いいじゃん)
0700nobodyさん2017/01/01(日) 11:56:44.00ID:???
聞き方が悪かったようですね。
>>698では出来ないので実行出来るならやり方を教えて下さい。
0701nobodyさん2017/01/02(月) 01:05:14.21ID:???
Windowsは拡張子と実行プログラム関連付けできるから
インタプリタを関連付ければできそうな気がするが
0702nobodyさん2017/01/02(月) 13:55:50.76ID:???
>>701
適当な拡張子をつけてphp.exe(CLI)に関連付けしてみると、
拡張子までうつと実行は出来るようになりました。
しかし$argvがどうも受け取れないようで、意図した動作にはならず、
何をしてもエラー処理部分に常にいってしまいます。
0703nobodyさん2017/01/02(月) 23:43:58.27ID:???
Pythonの例で説明するけど、
個別のファイルを、実行可能にするには、そのファイルの1行目に、シバン(shebang)を書く

#!/usr/bin/env python
環境変数PATHから、pythonコマンドを探して、そのファイルを実行する。
PATHの順番によって、python2, 3 のどちらが起動されるかが決まる

シバンが書いてあれば、そのファイルを起動するプログラムが分かるので、
python a.py とコマンドを打たなくても、

カレントディレクトリから、./a.py
または、絶対パス/a.py で起動できる。
ただし、そのファイルに実行可能属性が必要

a.py, a.php のようなスクリプトが置いてある場所を、環境変数PATHには設定しない
0704nobodyさん2017/01/03(火) 02:06:32.04ID:???
LINE一番人気の可愛いビールスタンプ。
呑みのお誘いや二日酔い報告にどうぞ!

【ビール大好きくんサマー】
http://らいん.me/S/sticker/1292996

(URLは「らいん」→「LINE」に置き換えてね)
0705nobodyさん2017/01/04(水) 00:47:47.02ID:???
>>703
・pythonを例にすることでのメリットがない
・windows
0706nobodyさん2017/01/04(水) 16:24:22.71ID:???
>>705
キッチリ屋サン
0707nobodyさん2017/01/05(木) 03:11:52.93ID:???
ローカル環境でテストしたPHPMailerを
共用サーバーでSMTP認証したらこのようなエラーがでました
Warning: fsockopen() has been disabled for security reasons in (class.smtp.phpまでのパス) class.smtp.php on line 290

class.smtp.phpの290行目にはこのように書いてありました
$this->smtp_conn = fsockopen(//←ここが290行目です
$host,
$port,
$errno,
$errstr,
$timeout
);

この共用サーバーではPHPMailerでSMTP認証できないのでしょうか?
また、PHPMailerでSMTP認証できる共用サーバーをご存知ないでしょうか?
できれば無料サーバーだとありがたいです
0708nobodyさん2017/01/05(木) 03:50:36.02ID:???
初心者はお帰り下さいませ。。。
0709nobodyさん2017/01/05(木) 10:40:40.10ID:???
>>707
> できれば無料サーバーだとありがたいです
なめてんの?
0710nobodyさん2017/01/05(木) 15:54:28.15ID:???
>>707
PHPMailer以外ではSMTP認証できるのか?
話はそこからだろ
0711nobodyさん2017/01/05(木) 16:14:42.57ID:???
>>707
http://www.2by2host.com/articles/php-errors-faq/disabled_fsockopen/
0712nobodyさん2017/01/05(木) 19:45:58.54ID:???
最近PHPの配列をよく使うようになった。
以前はDBばかり使っていたのでほとんど気にしていなかったが、
PHPの配列関連のメソッドって本当にマジキチだな。

PHPの不評の大部分(整合性のとれていない引数やメソッド名)って、配列関連じゃねーの?
0713nobodyさん2017/01/05(木) 19:48:19.67ID:???
そうだと思うよ。
配列処理増えてきたころって一番文句を言いたくなる時期とかぶるような気もするし。
0714nobodyさん2017/01/05(木) 22:59:29.94ID:???
LaravelのCollection神
0715nobodyさん2017/01/05(木) 23:51:50.16ID:???
>>707
その引数、$errno, $errstr にエラーメッセージが書いてあるんじゃないの?

それには、何て書いてある?
0716nobodyさん2017/01/06(金) 18:12:45.72ID:???
>>712
配列関連の関数は、なにも不満なく使ってるけどな。
0717nobodyさん2017/01/06(金) 19:41:37.74ID:???
あれも欲しいこれも欲しいにしたのがあれだから
気に入らなきゃ速度なんて気にせずforでごにょったらいいと思うの
いまならyieldも使えるし
0718nobodyさん2017/01/07(土) 07:04:16.08ID:???
日本語の意味わからないなら黙ってればいいのに。
0719nobodyさん2017/01/07(土) 14:55:16.02ID:???
PHPの配列は参照と明示的に組み合わせて使ったときの非直感的振る舞いがアレ
マニュアルに書いてある通りではあるんだけれども
0720nobodyさん2017/01/07(土) 19:08:36.10ID:???
>>719
具体的にコードを書いてくれないと意味がわからん。
0721nobodyさん2017/01/08(日) 11:32:12.90ID:???
マニュアル見ないと挙動がわからんのが批判されてるところだからな。

普通はマニュアルなんて見なくてもある程度予想がつく。
0722nobodyさん2017/01/08(日) 15:36:28.98ID:???
プロPHPerさんの知恵を貸してください

[
'a.bc',
'd.ef',
'g.hi',
]

このドット記法の配列データを以下のようにできませんか?

[
'a' => ['bc'],
'd' => ['ef'],
'g' => ['hi}
0723nobodyさん2017/01/08(日) 19:53:09.56ID:???
できますん
0724nobodyさん2017/01/08(日) 20:27:11.49ID:???
foreach
$new[] = explode [0] => [1]
0725nobodyさん2017/01/09(月) 00:19:28.37ID:???
$test = array(
0726nobodyさん2017/01/09(月) 00:21:23.01ID:???
$test = array("a" => "a");
$test2 = array("a" => "a");

echo $test["a"]."<br>"; // OK
echo "$test[a]<br>"; // OK
echo $test[$test2["a"]]."<br>"; // OK
echo "$test[$test2[a]]<br>"; // SYNTAX ERROR

最後のケースが構文エラーになるのは何故なのでしょうか?
(echo "{$test[$test2[a]]}<br>";とした所うまく動きました。)
0727nobodyさん2017/01/09(月) 01:30:28.61ID:???
>echo "$test[a]<br>"; // OK
マジかよと思ったら本当にこれ動いたわw
0728nobodyさん2017/01/09(月) 07:11:47.79ID:???
$a = ["b"=>"c"];
$d = "b";
echo "$a[$d]"; //OK
$d = ["e"=>"b"];
echo "$a[$d[e]]"; //NG


$a = ["b"=>["c"=>"d"]];
echo "$a[b][c]"; //NG

$a = ["?b"=>"c"];
echo "$a[?b]"; //NG


ダブルクオテーション内において{}で囲まずに正常に展開される範囲は

1次元の配列まで
かつ
添字部分はシングルクオテーションや配列記号[]を含める記号を入れられない(ただし$から始まるスカラー変数は可能)

ということなのだろう・・・
0729PHPネ申2017/01/09(月) 12:26:06.49ID:???
>>726
? echo "$test[$test2[a]]<br>"; // SYNTAX ERROR

◎ echo $test[$test2["a"]];

こうじゃないの?
0730nobodyさん2017/01/09(月) 17:19:48.21ID:???
>>727
二重引用符の文字列展開は基本ゾ・・・
0731nobodyさん2017/01/09(月) 17:34:23.33ID:???
>>730
とりあえず{}で囲むのが基本やとおもう
['a']ならまだしも$test[a]はそのまんまだとエラー出るしなあ
0732nobodyさん2017/01/09(月) 17:42:55.69ID:???
echo "b{$test[$test2["a"]]}c";
0733nobodyさん2017/01/09(月) 22:53:04.00ID:bmjPRAaj
echo mb_detect_encoding($maxnko, "JIS,SJIS,eucjp-win,sjis-win,UTF-8");

PHPで文字列の文字コードを判別する場合、
この様に引数に予め複数の文字コードを列挙する必要があるのでしょうか?

感覚的には、mb_detect_encoding関数の引数に
調査対象の文字列を入れれば、自動で文字コードが検出されるものかと思っておりました。
0734nobodyさん2017/01/10(火) 01:43:45.43ID:???
>>725-726
2chのバグだろう

書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" の代わりに、\" とエスケープすれば、どうだろう?

それか、書き込み確認画面が出たら、1度キャンセルすれば、確認画面は出ないようになった

>>733
その関数のドキュメントに、使い方は書いてないの?
0735nobodyさん2017/01/10(火) 01:48:53.38ID:???
>>733
残念ながら文字コード検出は「難しい」処理で, 一般には一意に決定出来ない
ICUでもiconvでもnkfでも推測は出来ても決定は出来ない
文字の符号化方式は無数に存在するからな

だから候補を挙げておいてそこから選ばせる必要がある
0736nobodyさん2017/01/10(火) 06:10:16.00ID:???
>>733

mb_detect_encoding
と
mb_convert_encoding

を混同してない?
0737nobodyさん2017/01/10(火) 10:53:00.59ID:???
>>733
それやらないと文字コードを誤検出してかなりダルイ

// utf-8に変換する時は脳死でこう
$str = mb_convert_encoding ( $str, "UTF-8", mb_detect_encoding ( $str, "ASCII,JIS,UTF-8,CP51932,SJIS-win", true ) );
0738nobodyさん2017/01/10(火) 11:05:09.98ID:bVLvPFIi
>>735
サンクス なるほど。

>>736
してないです!


>>737
丁寧にサンクス!
0739nobodyさん2017/01/15(日) 17:28:16.80ID:???
SESSIONって、要するにサーバー版のcookieですか?
0740nobodyさん2017/01/15(日) 17:39:16.09ID:jnaaL6KK
↑
バカ発見
0741PHPネ申2017/01/15(日) 17:48:12.63ID:???
>>739
スーパーグローバル変数ですよ
0742nobodyさん2017/01/15(日) 17:48:30.19ID:???
>>739
ざっくり言うとその通り
0743nobodyさん2017/01/15(日) 17:52:26.02ID:???
ローカルファイルに保存して毎回読み込んでいるという点は同じ
誤解を招きそうで怖いけど
0744nobodyさん2017/01/16(月) 10:18:57.25ID:eoF1W14n
外部サイトにあるmp4ファイルの存在を確認するにはどうすればいいでしょうか?
ファイル情報を取得して判断しようとしても上手く行かないんですが何か専用の関数とかあるんでしょうか?
0745nobodyさん2017/01/16(月) 10:21:51.42ID:???
>>744
http://php.net/manual/ja/function.file-exists.php
0746nobodyさん2017/01/16(月) 10:26:39.45ID:???
あとファイルの総浚いに対抗するためにUAなどで弾かれてる可能性もある
全ファイルの取得とかは考えないほうがいい
0747nobodyさん2017/01/16(月) 10:38:44.23ID:eoF1W14n
>>745
例えば、http://hogesite/movie/hoge.mp4 をfile_exists()で確認しようとすると、どちらもfalseが返ってくるんですよね・・
でも実際は存在するファイルは読み込むことができるんですよね
他にはstat()やheader()でやろうとしてもダメでした
0748nobodyさん2017/01/16(月) 10:42:39.71ID:???
あれ、file_exists()外部ファイルで使えなかったか、ごめん
get_headers()
だな
0749nobodyさん2017/01/16(月) 10:53:20.56ID:???
用途にも依るけどリダイレクト含めて200レスポンスが返ってくるかどうかなんだろうけどねぇ
0750nobodyさん2017/01/16(月) 13:45:22.96ID:???
意味もなくこういうコードを書くことってありますか?無限ループ楽しい・・・

class c {
public $n;
public function __construct() {
$n = new $this;
}
}
(new c());
0751nobodyさん2017/01/17(火) 21:14:32.74ID:LeG/+lw1
スレチかもですが今日xamppアプデしたら
セキュリティ画面がなくなって居たのですが
何も設定しなくて良いのでしょうか?
一応mysqlのユーザーパスは変えました
それだけでおけ?
0752nobodyさん2017/01/17(火) 21:16:12.54ID:???
セキュリティ画面とは
0753nobodyさん2017/01/17(火) 21:20:49.76ID:LeG/+lw1
結構古いカモですが
オレンジっぽい画面で
セキュリティの警告が出たりしてました
そこで何やらゴニョゴニョやった気が…
今はもう大丈夫なんですかね?
0754nobodyさん2017/01/17(火) 21:28:58.78ID:???
http://localhost/xampp/みたいな画面のやつか?
あんなの公開鯖じゃないんだしどうでもよかろうもん
0755nobodyさん2017/01/17(火) 21:32:55.35ID:???
PHPのビルトインサーバで物足りなくなったらXAMPPでもApacheでもnginxでも入れれば宜しいと思うの
0756nobodyさん2017/01/17(火) 21:37:26.37ID:???
>>754
あーあれか。いつもすぐに消してたな。

>>751
別に誰か触るわけじゃないからユーザーパスなんて無くて良くないか
それよりもmysqlのユーザーとパスを本番環境に合わせておくといいぞ
rootでテストすると思わぬところでひっかかる、というかひかかった
0757nobodyさん2017/01/17(火) 22:09:14.22ID:LeG/+lw1
>>754
そうです。調べた所、なくなったみたいですね。

>>756
私も昔やっちまいました。

みなさんありがとうございます。
0758nobodyさん2017/01/18(水) 10:03:47.04ID:p0EF6Ec+
https://youtu.be/quIHgwuF6r4
0759nobodyさん2017/01/18(水) 23:47:21.59ID:wplrfJOQ
なんでphpは文字列を ' シングルクォーテーションで囲むの?

普通は、 " ダブルクォーテーションでしょ?
0760nobodyさん2017/01/19(木) 00:07:37.89ID:???
>>759
Perlに訊くべきだな
0761nobodyさん2017/01/19(木) 00:14:32.60ID:???
>>759
それ言い出すとどの言語にも変なところの一つや二つつある
0762nobodyさん2017/01/19(木) 00:20:28.47ID:???
シングルであることはmustではない
シングルでも書けるが正解
普通はダブルだと思うならダブルを使えばいい
0763nobodyさん2017/01/19(木) 00:22:12.50ID:???
キーボード「7」の位置にあるからシングルコーテーション嫌い
0764nobodyさん2017/01/19(木) 00:24:08.99ID:HOa0/Opm
>>760
Perl は嫌い

>>761 >>762
もともとC#から入ってる俺からすると生粋のPHPerが ' で文字列を括るのに
本当に嫌悪感を感じる。

また
if ( true ){
}

じゃなくて普通は
if( true )
{

}
じゃないか?
0765nobodyさん2017/01/19(木) 00:28:38.25ID:???
ブロックはこう
if ( true ){
}
functionはこう
function()
{
//foo
}
0766nobodyさん2017/01/19(木) 00:30:46.07ID:???
>>764
PHPはPerlからの影響もかなり強い
C#と違ってな

あとコーディング規約でしかないことを必要以上に押し付けるのは宗教の押し売りと変わらんぞ
0767nobodyさん2017/01/19(木) 00:42:20.14ID:???
>>764
コーディング規約なんてどうでもいいだろ
Javaの影響が強いEclipse使ってれば上になるし
C系の影響が強いVS使ってれば下になる
PHPもPEARコーディング規約は上でZendコーディング規約が下と分かれてるし
PHPerに人気のPhpStormも下だから下の書き方のやつは多い
0768nobodyさん2017/01/19(木) 00:46:22.49ID:???
>>767
流石に現代ではZendコーディング規約は兎も角, PEARよりPSR-2を挙げるべきだと思うの
0769nobodyさん2017/01/19(木) 08:11:03.40ID:???
>>759
変数展開するかしないかの違いがあるよね。
0770nobodyさん2017/01/19(木) 11:55:42.84ID:???
コードを最適化するコンパイラをもつC#と比べるのがそもそもナンセンスなんだがな
0771nobodyさん2017/01/19(木) 11:56:43.28ID:???
それちょっと地学ない
0772nobodyさん2017/01/19(木) 12:27:11.30ID:HOa0/Opm
phpでフレームワークは使わずに
DBからデータを検索しようとしています。

例えば社員IDが 3,5,7
の3つを検索しようとした場合
PHPで文字列編集を行ってSQLを

EMPLOYEE_ID IN ( 3 , 5, 7)

と組み立てて実行してますが、もっとスムーズにやる方法はありませんか?
0773nobodyさん2017/01/19(木) 12:36:39.34ID:???
>>772
お前さんがどうやってるのか分からないのにもっと効率的とは是如何に
0774nobodyさん2017/01/19(木) 14:50:03.82ID:???
文字列編集?これ脆弱性作るやつだ・・・
0775nobodyさん2017/01/19(木) 15:27:39.67ID:HOa0/Opm
>>773

あー、cakePHP使ってる時には確か検索した対象データを
配列に詰めて渡せば、内部的にINに組み込んでくれるっていう便利な機能があったはずなんだけど・・・・

プレーンなphpじゃないか。やっぱりFW使っておいた方が良かったかな。
0776nobodyさん2017/01/19(木) 16:30:05.73ID:???
>>775
> あー、cakePHP使ってる時には確か検索した対象データを
> 配列に詰めて渡せば、内部的にINに組み込んでくれるっていう便利な機能があったはずなんだけど・・・・
その程度、自分で実装しろよ
0777nobodyさん2017/01/19(木) 18:29:18.38ID:???
プレーンなC#にもないよね
0778nobodyさん2017/01/19(木) 19:46:23.77ID:???
C#erとか強そうなのがやってきたと思ったら、ただの雑魚だったっていう・・・
0779nobodyさん2017/01/19(木) 20:17:56.32ID:???
C#は完全にjavaに食われたな
もっと伸びると思ってたんだけどなぁ
0780nobodyさん2017/01/19(木) 20:39:55.91ID:???
PHPスレは、>>775この程度のやつがいっちょまえな感じで書き込みするから嫌なんだよ
0781nobodyさん2017/01/20(金) 02:52:58.31ID:???
普通は
if( true )
{

}
じゃないか?

この時点で強そうじゃないのはわかるでしょう。どこの畑で育つとこうなるのか
0782nobodyさん2017/01/20(金) 03:30:32.80ID:???
発芽してないから
0783nobodyさん2017/01/20(金) 11:13:42.22ID:???
>>781
phpマニュアルは
if () {
0784nobodyさん2017/01/20(金) 11:14:45.43ID:???
>>781
http://php.net/manual/ja/functions.user-defined.php
phpマニュアルは以下のようになっている
if() {
}
function()
{
}
phpマニュアルに合わせているよ
functionはエディタで見やすくなるって聞いたけど、ifブロックがなぜこうなっているかはよくわからない
0785nobodyさん2017/01/20(金) 13:07:11.97ID:???
phpマニュアルは以下のようになっている
if() {
}

なってないでしょ
0786nobodyさん2017/01/20(金) 14:15:57.82ID:???
一体なんのために>>785みたいなレスするのか不思議だ
0787nobodyさん2017/01/20(金) 14:25:18.33ID:???
>>785
確認しやすいようにURLまで漬けてんだから見てくれよwwww

あとなってない場所を教えてくれ。修正しとくわ
0788nobodyさん2017/01/20(金) 14:50:46.62ID:???
相手しちゃダメよー
0789nobodyさん2017/01/20(金) 15:51:26.02ID:???
curl関数のcurl_setopt()のそれぞれのオプションの初期値を確認する方法ってあります?
http://php.net/manual/ja/function.curl-setopt.php
ここにデフォルトはあれあれ通常はこれこれと書いてあるものもあるけど
大半は記述がないのでどうしてくれようかと
0790nobodyさん2017/01/20(金) 16:02:55.09ID:???
>>787
コーディングスタイルはカーリーブレースの位置を決めるだけじゃないよ
>>783に対しては安価をつけてないでしょ。
同じ意味で、>>781を書いた。(これはもちろん >>764 の引用。)
0791nobodyさん2017/01/20(金) 16:21:48.17ID:???
さわるな危険
0792nobodyさん2017/01/20(金) 16:44:19.89ID:???
初心者向けの話題は初心者スレで
0793nobodyさん2017/01/20(金) 16:49:03.04ID:???
>>789
なんでコード読まないの?
0794nobodyさん2017/01/20(金) 16:58:41.09ID:???
コードを読まないで生きていけるのならば、皆そうすべきである
0795nobodyさん2017/01/20(金) 17:19:57.45ID:???
・マニュアルには網羅的な説明がない
・ちょっとググったけど情報が見当たらない
・コードは見られる

なら、コード見るのが最速だよな
0796nobodyさん2017/01/20(金) 22:02:41.88ID:???
・網羅的に設定コードを書く

が最速
0797nobodyさん2017/01/21(土) 02:15:46.19ID:???
>>789
https://github.com/php/php-src/blob/master/ext/curl/interface.c
これ読んでから
https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
この辺を見る
0798nobodyさん2017/01/21(土) 15:57:48.07ID:3TMSiFF1
if (true){
}
→と書く奴の低能率の高さは異常

if (true)
{
}
→と書く奴には有能な奴が多い。
0799nobodyさん2017/01/21(土) 16:55:26.91ID:7J/ZXd+H
PHPマニュアルのユーザーCSS作ったので
フラットデザインのほうが見やすいと思う方で
Opeta、Firefox、Chromeで拡張機能のStylish入れてる方は
気が向いたら使ってみてください

https://userstyles.org/styles/137945/flat-php-manuals-php

ソースが汚いので、他の方がカスタマイズしやすいように整理する予定です
0800nobodyさん2017/01/21(土) 18:55:42.15ID:???
>>798
スレタイ
ROMは歓迎しますのでちょっと黙っててね
0801nobodyさん2017/01/21(土) 19:01:39.43ID:???
if (true){}
オレはワンライナーだな。
0802nobodyさん2017/01/21(土) 19:12:06.25ID:???
phpマニュアルってなんか暗いよな
読んでて陰鬱な気分になる
0803nobodyさん2017/01/21(土) 19:14:14.44ID:???
>>801
そのパターンの場合{}をつけるのはちょっと
0804nobodyさん2017/01/21(土) 19:15:48.83ID:???
>>803
if (true)
これでいいな。
0805nobodyさん2017/01/21(土) 21:42:16.74ID:???
なんでifと(の間にスペース入れるの
0806nobodyさん2017/01/21(土) 22:35:26.24ID:???
if(true)
これでいいな。

ただ、一言いわせてほしい。

適当でも動く。それがこの言語の唯一の世界最高の部分を忘れないでほしい。
0807nobodyさん2017/01/21(土) 22:43:09.24ID:???
よほど厳しい言語でない限りそこは空白あってもたいていは動くでしょ
PHPで特筆すべきところはelseifのところじゃないか
elseifでもelse ifでもいい
0808nobodyさん2017/01/21(土) 22:51:48.20ID:???
そういうことだ!
0809nobodyさん2017/01/21(土) 23:34:06.55ID:???
if 〜〜〜 else ifは if 〜〜〜 elseif とは違い
if 〜〜〜 else
  if 〜〜〜 ということだったような

結果生成されるアセンブラ的にジャンプ回数が後者のほうが多い=重いとか
0810nobodyさん2017/01/22(日) 00:17:50.98ID:???
自分が空白あける理由がわかったわ。
}else{
この書き方でelseが窮屈なのと、
if()だと制御構造じゃなくて関数呼び出しみたいに感じるからだわ。
echo ""
print("");
の違いにも言えることだけど。
0811nobodyさん2017/01/22(日) 00:18:49.55ID:???
if x==y {
}
こう書けるのが一番なんだけどね。
0812nobodyさん2017/01/22(日) 00:22:15.82ID:???
if x==y {}
ワンライナーにしよう
0813nobodyさん2017/01/22(日) 08:01:35.50ID:???
psrに従う
0814nobodyさん2017/01/22(日) 08:24:32.05ID:???
$a = if x==y {10} else {20};
とか出来る日は来るのだろうか
0815nobodyさん2017/01/22(日) 08:49:06.15ID:???
>>807
それいいよね
あとtrueでもTRUEでも
boolean true扱いなのが良い

Cか何かは大文字だけだったはずで、
define TRUE true
かなにかを毎回入れてたな。めんどくさかった
0816nobodyさん2017/01/22(日) 12:05:06.34ID:Bh2I+8hl
>>801 真正バカ
0817nobodyさん2017/01/22(日) 12:07:04.02ID:Bh2I+8hl
if ( true )
{

}


という風な書き方をする奴はいけてる。自己紹介してみた。
0818nobodyさん2017/01/22(日) 12:38:10.01ID:???
>>817
理由は?
0819nobodyさん2017/01/22(日) 12:52:14.70ID:Bh2I+8hl
↑
可読性が高い
0820nobodyさん2017/01/22(日) 13:02:10.82ID:???
ペチパーの鏡だな
0821nobodyさん2017/01/22(日) 13:06:06.11ID:???
>>819
もう少し明確な理由ない?
あればそっち使おうかと思うんだけどな
無ければマニュアルに従う
0822nobodyさん2017/01/22(日) 13:08:26.34ID:???
アロー書くのめんどくせえ・・・
>>>とか>>だとEOFとの兼ね合いやビット演算の関係でダメなんだろうけど
:>これじゃダメなの =>や->よりは絶対書きやすいんだが
0823nobodyさん2017/01/22(日) 13:14:23.08ID:???
$php="適当でも動く!"
0824nobodyさん2017/01/22(日) 15:10:18.11ID:???
セキュリティについてひととり勉強したけど
「POSTやGETのパラーメーターは必ずサニタイズしろ」
「改行、特殊文字のエスケープ、ヌル文字や/../排除」
「ホワイトリスト作って、適切なリクエスト以外ははじけ」
「アクセスできる場所に重要なものを置くな。置くなら.httpdや.htaccessではじけ」
「フォームを作るならワンタイムトークン」
これが原則よな
最低限これだけやってりゃだいたい大丈夫っぽいじゃん
0825nobodyさん2017/01/22(日) 15:17:46.81ID:???
>>824
ログイン機能が無ければ楽勝
極論ユーザーからの送信は
「ホワイトリスト作って、適切なリクエスト以外ははじけ」
これだけで何とかなる

でもログイン機能を作ると途端にセキュリティホールだらけになるゾ
楽しいゾ〜^^b
0826nobodyさん2017/01/22(日) 15:59:59.37ID:???
穴掘って埋めるだけのブラック労働;;
0827nobodyさん2017/01/22(日) 18:51:35.53ID:???
コマンドラインって使いますか?
0828nobodyさん2017/01/22(日) 19:09:37.33ID:???
>>818
そいつ初心者だから相手すんな
0829nobodyさん2017/01/22(日) 19:18:37.65ID:???
今ちょっと試せないんだけど

$array = [
MyClass::class => '...'
];

みたいなkeyの指定って大丈夫ですか?
0830nobodyさん2017/01/22(日) 19:20:35.19ID:???
だいじょうぶです!
0831nobodyさん2017/01/22(日) 19:53:38.91ID:???
ty!!!!!!
0832nobodyさん2017/01/22(日) 20:00:57.23ID:???
>>829
これどうなってるの?
連想配列は分かるけど、staticなプロパティで$外してもエラー起こらないの?
Myclass::classで何でクラス名が返ってるの?
0833nobodyさん2017/01/22(日) 20:24:38.89ID:???
>>832
http://php.net/manual/ja/language.oop5.basic.php
0834nobodyさん2017/01/22(日) 21:03:16.72ID:???
>>833
ありがとう!
しかもこれclass定義しなくても使えたのね。ビックリ

::class
PHP 5.5 以降では、class キーワードでクラス名の解決ができるようになりました。 ClassName クラスの完全修飾名を文字列で取得するには、 ClassName::class とします。 これは、 名前空間つきのクラスと組み合わせると特に便利です。
0835nobodyさん2017/01/22(日) 23:46:19.23ID:???
ちゃんとテスト書いてね
0836nobodyさん2017/01/23(月) 01:10:26.38ID:???
いやよ
0837nobodyさん2017/01/23(月) 01:58:05.38ID:YCqPaICU
アナルPHPでついて
0838nobodyさん2017/01/23(月) 22:57:06.46ID:???
マニュアルに翻訳ミスがあったけど、報告の仕方がさっぱりわかんないからここに書きますね
だれか修正してちょ


http://php.net/manual/ja/regexp.reference.assertions.php
ここ

> (?<=\d{3}...(?<!999))foo

>は、999 でない 3 桁の数字とさらに 3 文字の後に続く "foo" にマッチするパターンです。

これおかしいなあと思って原文見たけど、やっぱり誤訳だった。

「3桁の数字と、999ではない3文字の後に続く"foo"」が正解ですね。


よろしくお願いしますー
0839nobodyさん2017/01/23(月) 22:59:20.26ID:???
ああ、具体例追記しておきますね

マッチしない例
123999foo
abc123foo

マッチする例
123abcfoo
999abcfoo


こういうことです
よろしくおねがいしますー
0840nobodyさん2017/01/23(月) 23:01:06.80ID:???
あとマニュアル向けのstylishのCSSを修正して
メイン記事のフォントを太くしました
そのほうが見やすいと思ったので。

メイン記事のフォントの種類とトップのヘッダの色も変えられるようになりました
0841nobodyさん2017/01/23(月) 23:44:22.72ID:???
>>838
右上の edit
anonymous login
修正
保存

これぐらいは出来るようになっておいたほうが良いぞ
0842nobodyさん2017/01/24(火) 11:49:49.33ID:???
>>841
ログインはできるんだよ
その先がよくわかんない
0843nobodyさん2017/01/24(火) 11:57:54.39ID:???
ああ、わかった
「すべてのファイル」ってのクリックすりゃいいのね
0844nobodyさん2017/01/24(火) 12:19:47.00ID:???
なんか知らんけど修正不可になってる(他のファイルは修正できる)からやめとく
0845nobodyさん2017/01/24(火) 14:07:46.91ID:???
昔バグ報告したのに英語がめちゃくちゃで理解してもらえなくて今もスルーされている
今そのバグが再現可能かどうかはわからないけど
0846nobodyさん2017/01/24(火) 20:37:54.16ID:???
再現コードが書ければどんだけ英語がおかしくても理解してもらえるはずだけどなぁ
0847nobodyさん2017/01/24(火) 21:50:49.60ID:KZ0F5F3W
何もしていない普通の一般人の自宅に隠しカメラを取り付け
それをネットでリアルタイム配信

仲間という人間に対する盗聴盗撮生ネット配信の会

しかけたカメラの映像
乗っ取っているPCの画像をリアルタイムで生配信中
集団で仲間の私生活を覗いて楽しんでいる

そんなことが今この国では行われています

仄めかしの隠語は
猫 穴 水 仲間 
0848nobodyさん2017/01/25(水) 13:25:36.75ID:???
$array = array(
  array(1,2,3), array(4,5,6), null, array(7,8,9), null,
  array(10,11,12), array(13,14), array(15,16,17), array(18,19,29,2000)
);

これをnullを境にぶった切って始点・終点の目印をつけて
次レスのように変えたい
どうやるのが良いか、先生お願いします

泥臭いけどループごとに1つ前の要素を見て判断させるのが一番なんでしょうか
0849nobodyさん2017/01/25(水) 13:27:52.99ID:???
$result = array(
  array(
    'start'=>true, 'end'=>false,
    'data'=>array(
      array(1,2,3),
      array(4,5,6)
    )
  ),
  array(
    'start'=>false, 'end'=>false,
    'data'=>array(
      array(7,8,9)
    )
  ),
  array(
    'start'=>false, 'end'=>true,
    'data'=>array(
      array(10,11,12),
      array(13,14),
      array(15,16,17),
      array(18,19,29,2000)
    )
  ),
);

わざわざ配列に組み直してるのは、互いに統合できない2つ以上の別々のところで
分割したものをもとに処理したいからです
0850nobodyさん2017/01/25(水) 13:48:15.96ID:???
>>848
>>849が目的じゃなくて手段なら、SplDoublyLinkedListを使うのがいい。
$list = new SplDoublyLinkedList();
$list->push(['abc', 'def']);
$list->push(['ghi']);
$list->push(['jkl', 'mno', 'pqr']);
print_r($list);
0851nobodyさん2017/01/25(水) 13:57:58.30ID:TQsts9Pu
つか、これでいいんじゃねーの?
$result = array(
  array(
    array(1,2,3),
    array(4,5,6)
  ),
  array(
    array(7,8,9)
  ),
  array(
    array(10,11,12),
    array(13,14),
    array(15,16,17),
    array(18,19,29,2000)
  )
);
0852nobodyさん2017/01/25(水) 14:02:31.89ID:???
>>850-851
自分でもアレだとは思うんだけど、元の配列の最初([0])ではじまってる塊か、最後で終わる塊か、
に意味があるので手段じゃなく目的になるます
0853nobodyさん2017/01/25(水) 15:03:00.65ID:???
>>852
ちょっと意味がわからないんだが。

> 自分でもアレだとは思うんだけど、元の配列の最初([0])ではじまってる塊か、最後で終わる塊か、
> に意味があるので手段じゃなく目的になるます

目的=元の配列の最初の塊か最後で終わる塊かを知りたい

じゃないのか?
それを実現する手段が>>849のコードじゃないの?
0854nobodyさん2017/01/25(水) 15:05:21.62ID:???
Aという目的に対してBという手段を考えたのだが、Bに関してCという疑問がある。
Cはどうすればいい?

というようなことだったら、Bじゃなくて別手段がいいんじゃなないのというお話。
0855nobodyさん2017/01/25(水) 15:30:59.78ID:???
>>853
目的は最初に書いたように「nullを境にぶった切って始点・終点の目印をつけ」ることです

852で元の〜〜は手段じゃなく目的だと書いたのは、
始点・終点の目印を省く提案をされた>>850-851の方々に対して、いや必要なんですよ、と返す意図です

始端・終端の把握のためとはいえ、いかにもって感じのフラグ設定はどうかとも思ったのですが、
わかりやすさを優先してフラグ設定として書いてあります
アレだと思う、と書いた意図はこのようなことだったのですが今読み直すと意味不明ですね、すみません
854は申し訳ないけど意味がわかりません
0856nobodyさん2017/01/25(水) 16:17:04.24ID:???
>>848
> 泥臭いけどループごとに1つ前の要素を見て判断させる
というのがどういうコードを想像しているのかわからんけど、foreachで回してnullかどうかでアレコレすればいいだけだろ

くだらん質問する暇があったらコード書け
0857nobodyさん2017/01/25(水) 18:01:04.15ID:???
手段と目的の意味すらわからんとは
0858nobodyさん2017/01/25(水) 18:24:52.58ID:???
目印なくても$result[0]が最初で$result[count($result)-1]が最後でしょ

それはそうとして、$hoge->fuga($array)に3つの塊を渡して、fuga()の中で
$array['start'], $array['end']を参照して処理を振り分けようと思ってるなら
それは筋が悪い
0859nobodyさん2017/01/25(水) 21:45:59.66ID:???
PHPマニュアルのフラットデザインを上げた者ですが
白い背景だと目が疲れるという方もいると思うので
黒背景バージョンも作りました

https://userstyles.org/styles/138132/darker-flat-php-manual-php

拡張機能のStylishを導入している方で、需要があればご利用ください
0860nobodyさん2017/01/25(水) 22:44:31.53ID:???
>>855
> 目的は最初に書いたように「nullを境にぶった切って始点・終点の目印をつけ」ることです
何かをするために目印をつけるんじゃなくて、目印をつけたら終わりってことなのね。
0861nobodyさん2017/01/25(水) 23:39:57.48ID:???
この流れ久々にこれはひどいと思ったわ
0862nobodyさん2017/01/26(木) 00:18:55.89ID:???
explodeの配列版みたいな関数があれば楽なのになって話かね
0863nobodyさん2017/01/26(木) 00:33:38.12ID:???
何の目的に使うか分からんデータ構造を生成したいというなら素直にループ回せばいいのでは
前の要素を参照するとか意味分からんけど, 別にO(n)でもO(n^2)でも構わんのでしょう?

助言としては作るデータ構造はなるべく汎用データ構造かその拡張にしたほうが便利よ, とだけ
0864nobodyさん2017/01/26(木) 01:29:38.46ID:???
ちょっとオレが居ないと、こんなクソ展開になるのかよ…

おまえら、アホだな
0865nobodyさん2017/01/26(木) 01:32:19.82ID:???
そうだお前が頼りだ
0866nobodyさん2017/01/26(木) 02:24:48.81ID:???
>>864 C#erはクソして寝ろよ
0867nobodyさん2017/01/26(木) 12:53:41.57ID:???
こういうコードを書いてみたけど、もっとうまいやり方ある?

って感じにしてくれ、今後は
0868nobodyさん2017/01/26(木) 14:11:35.81ID:UAQktabA
https://youtu.be/quIHgwuF6r4
0869nobodyさん2017/01/28(土) 00:36:58.68ID:???
この手法は何というのですか

(new MyClass)->method()
0870nobodyさん2017/01/28(土) 00:49:13.21ID:???
なんとかケース
0871nobodyさん2017/01/28(土) 10:24:13.32ID:???
カッコマン
0872nobodyさん2017/01/28(土) 11:22:54.14ID:???
ワンライナー
0873nobodyさん2017/01/28(土) 15:44:19.19ID:???
クラスの分割のために継承できないような構造だとしたら、
トレイトとしてメソッド分割してok?
0874nobodyさん2017/01/29(日) 02:48:03.36ID:???
PHPのトレイト使ったことないけど、他言語のそれと同じものならおk。
0875nobodyさん2017/02/01(水) 15:32:36.08ID:???
isset()って 1 とか 'test' とか渡すとsyntax errorで怒られるけど、これ関数じゃない?
0876nobodyさん2017/02/01(水) 16:29:08.11ID:???
if isset($PHPer){echo "関数";}
0877nobodyさん2017/02/01(水) 17:25:46.13ID:???
>>875
言語構造
0878nobodyさん2017/02/01(水) 19:18:55.57ID:???
>>875
マニュアル読む癖をつけたほうがいい

http://php.net/manual/ja/function.isset.php
isset() は何らかの値が渡された 変数の場合のみ動作します。そうでない場合、パースエラーとなります。 もし 定数 が設定されているかどうかをチェックする場合は、 defined() を使用してください。
注意: これは、関数ではなく 言語構造のため、可変関数 を用いて コールすることはできません。
注意:オブジェクトのアクセス不能なプロパティに対して isset() を使用した場合は、もしオーバーロードメソッド __isset() が宣言されていればそれをコールします。
0879nobodyさん2017/02/01(水) 19:19:30.82ID:???
phpって関数にしか見えない言語構造が多い気がするけど、
他の言語もそうなの?
0880nobodyさん2017/02/01(水) 19:41:06.22ID:???
function_exists('isset') or die('not a function');
0881nobodyさん2017/02/03(金) 14:28:22.41ID:???
>>877-878
ありがと
マニュアルは目を通したつもりだったんだけど注意のところ見逃してたごめん
可変変数もダメなんだなあ
0882nobodyさん2017/02/03(金) 15:14:11.12ID:BPtags4A
facebookって開発言語なに?
0883nobodyさん2017/02/03(金) 23:04:39.09ID:???
B言語使ってるよ
0884nobodyさん2017/02/03(金) 23:16:47.84ID:???
>>882
PHPに決まってるだろ、言わせんな!
0885nobodyさん2017/02/03(金) 23:22:23.40ID:???
言わせたかったんだ、ごめん
0886nobodyさん2017/02/03(金) 23:30:45.78ID:???
ペチパーが!!
0887nobodyさん2017/02/03(金) 23:39:02.33ID:???
だが少し待って欲しいHHVMはPHPのように見えるPHPのような何かなのではないだろうか
0888nobodyさん2017/02/04(土) 01:31:34.47ID:Rj9LF3nc
>>884
嘘つくんじゃねーよ。沖縄県民
0889nobodyさん2017/02/04(土) 01:34:05.86ID:???
なんで沖縄なんだよ
0890nobodyさん2017/02/04(土) 08:46:43.40ID:???
>>889
日本人が一番嫌がるレッテル貼りは「南朝鮮人」もしくは「在日」。しかしあまりに使いすぎたので効果が薄れてきた
最近基地問題で流行りの「沖縄人」を使ってみたが、リゾート地、朝鮮人の市民団体、中国人の市民団体とイメージが広すぎる

結論を言うと、煽りやレッテル貼りとしては失敗。もう少しイメージが絞られたものにするべき
そういう意味では「南朝鮮人」に勝るものはないと言えるだろう
0891nobodyさん2017/02/04(土) 09:47:53.23ID:???
うわー、ネトウヨこっちくんなよ・・・
0892nobodyさん2017/02/04(土) 11:49:01.40ID:QsE+sxbw
https://www.youtube.com/watch?v=quIHgwuF6r4&;sns=em
0893nobodyさん2017/02/04(土) 21:14:54.28ID:???
[1,2,3,4]
[2,1,4,3]

上のような配列順序がバラバラでもtrueを返したいのですが、どのような比較方法があるでしょう
0894nobodyさん2017/02/04(土) 21:21:25.15ID:???
array_diff()
0895nobodyさん2017/02/04(土) 21:26:02.13ID:???
業務アプリばっかつくっててDBばっか使ってるとPHPの配列用関数なんか全く覚えないから
>>894 みたいな回答がすらっとでてくるのは脅威
0896nobodyさん2017/02/04(土) 21:57:52.05ID:Rj9LF3nc
>>893
みたいな意味不明な質問が出る事がゆとり教育の弊害
0897nobodyさん2017/02/04(土) 23:42:29.34ID:???
まあ確かに意味不明は一理なくもない
0898nobodyさん2017/02/04(土) 23:49:40.69ID:???
意味の推定は可能だが日本語としては意味を成していない
0899nobodyさん2017/02/05(日) 00:14:30.88ID:jA2houVQ
893みたいなやつとは一緒に仕事したくない。
間違いなく、コミュニケーション能力の低さ故に仕様確認で喧嘩になりそう。


なんでプログラマって言語障害者が多いのかな?
0900nobodyさん2017/02/05(日) 00:17:57.77ID:???
phpのテストメソッドの命名で

・testUnkoMan(接頭辞にtestでキャメル)
・it_unko_man(接頭辞にitでスネーク)

どっちの形式が良いか悩ましいんだけど、ベストプラクティスみたいなの書いてる記事ないかね
0901nobodyさん2017/02/05(日) 00:20:38.51ID:???
>>900
いい年して小学生みたいな命名やめた方が良い
0902nobodyさん2017/02/05(日) 00:20:44.15ID:jA2houVQ
うんこ男をテストしてどうするんだばーか。
0903nobodyさん2017/02/05(日) 00:22:01.70ID:???
>>902
ageガイジは黙ってろ氏ね
0904nobodyさん2017/02/05(日) 00:26:24.71ID:???
>>900
TDDなら上, BDDなら下
0905nobodyさん2017/02/05(日) 08:44:02.70ID:yhK5jENS
PHPと関係ないんですが、、パーミッションについて質問があります
共有レンタルサーバー サクラを契約しています
デフォルトで、下記の内容でパーミッションが割り振りされています。

705: /home/username/

そこで、サイトを公開するにあたって、ドメイン名ディレクトリを作る必要があります。
/home/username/www/ドメイン名/

このドメイン名のディレクトリのパーティションを 777 に変更しました

そこで質問なのですが
同じサーバー内の他のユーザが、このドメイン名のディレクトリにアクセスできちゃう なんてことはありますか?
自分の認識では /home/username/ の段階で弾かれると思っています この認識で大丈夫でしょうか。

また ドメイン名ディレクトリを 777 にすることで何かセキュリティ的にまずいことはありますか?
0906nobodyさん2017/02/05(日) 09:43:44.06ID:JQZvwDcv
905 すいません、解決しました。ありがとうございました。
0907nobodyさん2017/02/05(日) 11:16:50.78ID:???
なぜPHPと関係ないと分かっていて投下したのか
0908nobodyさん2017/02/05(日) 11:30:51.61ID:jA2houVQ
マルチだから
0909nobodyさん2017/02/05(日) 20:53:05.34ID:???
>>896 >>899みたいなキレやすくて理解力ないやつもいらねえ
IQ低いのに偉そうじゃん
俺はパッと見て何言ってるかわかったし>>894もわかったし・・・
0910nobodyさん2017/02/05(日) 20:55:08.48ID:???
PHPマニュアルを見ろとは言わないけど、文字列の操作(最低でもtrimとstrが頭につくもの)と
配列の操作の関数だけは最初で暗記しようね
0911nobodyさん2017/02/05(日) 21:01:50.63ID:???
phpマニュアル、詳しいのはいいんだけど重要度を書いてほしいな
似たような関数があったり、使わなくていいものとか多くて困る
0912nobodyさん2017/02/05(日) 21:53:01.64ID:???
いやphpマニュアルを見ろと言うべきだろう
暗記しないでもいい、必要なときに必要なビルトイン関数があるか調べればいいだけ
どうせよく使う関数は自然と覚える
0913nobodyさん2017/02/05(日) 22:01:19.05ID:???
他の関数でも出来る
関数を組み合わせれば出来る

もっとベターな方法があるなんてのは
知らないから使わなかっただけなんだから気にすんな
0914nobodyさん2017/02/05(日) 22:21:39.40ID:???
マニュアル読んでおいた方が結果的に早いんだが、なぜか初心者は頑なに読もうとしないんだよな
0915nobodyさん2017/02/05(日) 22:53:03.52ID:???
>>893の2値が外から受けとる変数で、数が同じでないならば、
array_diffの1番目の引数は数が多い方にしないと、正確な結果がとれないからそこだけ注意。
数多くなければsortしてそれ比較するのも直感的にわかりやすくてありだと思う。
片方の配列の値を1個ずつもう片方の配列にarray_searchかけるなんて手法もある。
最悪計算量はsortするのと同じぐらいだけど1週目でfalse判定も可能。
0916nobodyさん2017/02/05(日) 22:58:04.19ID:???
ID出して煽るやつ=ただただ頭の悪いC#erのキチガイ
読点はつけるのに句点はつけないやつ=盛り上げてると思ってる自演キチガイ
0917nobodyさん2017/02/05(日) 23:07:55.89ID:???
他のやつはどうでもいいけど、>>916 おまえだけは黙ってろ
0918nobodyさん2017/02/05(日) 23:10:04.98ID:???
おっと自演キチガイがお怒りだwwwwww
>>911-912
皆の者この恥ずかしいやり取りをみよwwww
0919nobodyさん2017/02/05(日) 23:11:19.94ID:???
なぜC#であってCでないのだろう
0920nobodyさん2017/02/05(日) 23:12:07.69ID:???
そりゃ>>764で自己紹介してるからよ
0921nobodyさん2017/02/05(日) 23:15:10.57ID:???
C#便利だからね
なんでもサクッと作れて良い
0922nobodyさん2017/02/05(日) 23:20:02.68ID:???
VSにGUIエディタがあるからね
JavaSsciptかじってればWindowsアプリなんか楽勝だし
Webアプリしか出来ないとか言ってるお前らにも作れるよ
0923nobodyさん2017/02/05(日) 23:21:11.24ID:???
>>918
キチガイはおまえだよ、ゴミクズは黙ってろ
0924nobodyさん2017/02/05(日) 23:25:12.65ID:???
>>923
自演してごめんなさいって言えば丸く収まったのになwwwww
>>864痛すぎるぞお前wwwwww
0925nobodyさん2017/02/05(日) 23:41:23.04ID:???
>>924
キチガイは黙ってろ
0926nobodyさん2017/02/05(日) 23:49:29.62ID:???
盛り上げてやってるならもっと面白い返ししてみろよwwww
融通がきかず口数少ないコミュ障の典型的なプログラムオタクだなお前wwww
もう寝るしまた遊びに来てやるからせいぜい自演しとけやwwwwww
0927nobodyさん2017/02/06(月) 00:01:31.34ID:sbN7DgFT
>>926
マジキチは黙ってろ
0928nobodyさん2017/02/06(月) 00:41:32.55ID:fRp1AG0N
>>916
真正キチガイのお前がいっても説得力ないよ。
0929nobodyさん2017/02/06(月) 11:23:10.10ID:???
PHPマニュアルで、ナビバーの下にあるリンクで「前のページ」と「次のページ」を
キーボードショートカットで移動できる拡張機能作ったけど需要ありますかね
上のリンクだけじゃなくて、サイドバーのメニューにも移動できて、
下へ辿っていくこともできます
金が無いのでストアじゃなくgoogle driveでの自主配布になるんですが・・・
(ただ自主配布の信用できない拡張機能はセキュリティ上問題があることが多く・・・)
0930nobodyさん2017/02/06(月) 11:34:30.15ID:???
phpマニュアルだけじゃなく他のページにも色々対応できるようにすればいいんじゃないか?
とりあえず俺は使わないかな・・・

後、検索したらこういうのがあるらしい
http://thesaibase.com/chrome/autopagerize
0931nobodyさん2017/02/06(月) 11:41:24.51ID:???
いや、オートページャーとは違うんですよ
それだとできないから自分で作ったんで・・・
ま、いいです
0932nobodyさん2017/02/06(月) 14:17:46.07ID:???
一応正解書いとくか。

>>905
> 同じサーバー内の他のユーザが、このドメイン名のディレクトリにアクセスできちゃう なんてことはありますか?
ある。

> 自分の認識では /home/username/ の段階で弾かれると思っています この認識で大丈夫でしょうか。
間違い。

> また ドメイン名ディレクトリを 777 にすることで何かセキュリティ的にまずいことはありますか?
まずい。
0933nobodyさん2017/02/06(月) 22:31:50.67ID:???
自分のWEBサービスでユーザーページがあるとして、
「users/1」のアクセス数をアナリティクスからapiで取得してjavascriptでグラフ化…とか可能ですか?
0934nobodyさん2017/02/06(月) 22:33:07.98ID:???
それはPHPの質問じゃなくね
0935nobodyさん2017/02/06(月) 22:37:46.12ID:???
>>933
できるけど、アナリティクスの機能に頼ったほうが良い
自動レポート機能もあるからわざわざapiとか覚えなくても良いよ
0936nobodyさん2017/02/07(火) 00:01:00.13ID:???
>>935
いえ、WEB側で表示させたいんですよ
0937nobodyさん2017/02/07(火) 00:40:19.36ID:???
どう見てもPHPではない
0938nobodyさん2017/02/07(火) 00:43:36.62ID:???
>>936
そうか、がんばれ
v3でいけるならv3使ったほうが良いぞ。v4はうまく動かなかった。今思えば重かっただけなのかもしれんが
0939nobodyさん2017/02/07(火) 12:29:03.90ID:LoqCooPa
PHPで広告ブロックソフトを入れているかどうか
判定したいのですがどう判定すればよいでしょうか?

この要件を満たすWordPressのプラグインがあるので
どうやって判定しているのか気になってます。
0940nobodyさん2017/02/07(火) 12:41:06.44ID:???
jsじゃね。phpじゃ無理と思う
テキトーに要素の間に広告入れて、要素間がくっついてたら広告ブロック入ってる
あとはajaxで検知したデータを取得すればok
0941nobodyさん2017/02/07(火) 14:10:41.31ID:LoqCooPa
>>940
サンクス!!

そーいう判定をしてるのね。
0942nobodyさん2017/02/07(火) 16:04:18.38ID:PKNwz2mK
php print_r_output.php > print_r.txt って感じで
1回のprint_r( $array, true )の結果を出力しただけのテキストファイルを、
phpから読み込んで、配列とかに格納してくれる関数とかってあります?
0943nobodyさん2017/02/07(火) 16:12:27.32ID:???
http://stackoverflow.com/questions/7025909/how-create-an-array-from-the-output-of-an-array-printed-with-print-r

普通はシリアライズするんだがな
0944nobodyさん2017/02/07(火) 16:23:00.90ID:???
var_export
0945nobodyさん2017/02/07(火) 16:23:57.32ID:???
>>943
さんきゅー今から見る
いやあ後で使う予定じゃなかったから普通に出力して溜め込んでチェックして終わってたんだ
0946nobodyさん2017/02/07(火) 16:25:24.73ID:???
var_exportはマニュアル見ればわかるけど欠点があるから
0947nobodyさん2017/02/07(火) 16:31:45.54ID:???
var_exportよりserializeの方がよかった気がする
理由は忘れた
0948nobodyさん2017/02/07(火) 16:51:59.11ID:???
一応報告、自分の用途は多次元配列だったけど>>943のprint_r_reverseで解決
パーサ書きたくないと思ってたとこだったので非常に助かった
0949nobodyさん2017/02/07(火) 21:26:33.39ID:???
気になったんだけど、価格.comって誰が商品の登録してるの?
メーカーとかの詳細情報もいちいち従業員が入力してる…っていうのはさすがに無いか
0950nobodyさん2017/02/07(火) 21:55:56.79ID:???
小売かメーカーが申請するんだろう
あれだけ大手ならメーカーからどんどん情報が来ると思う
0951nobodyさん2017/02/07(火) 22:20:56.61ID:???
メーカーはオンラインサポート用に商品情報とかデジタルデータ作るだろうし
価格comとはwin-winだしそういうデータを提供してもらってんじゃね
そういうコネがないところは人力だと思うけど
0952nobodyさん2017/02/08(水) 19:44:36.27ID:???
session_register()系 廃止するし、今後は$_SESSIONいじってや

となってるけど、なんでそうなったのか歴史的経緯を知りたい
0953nobodyさん2017/02/08(水) 19:50:15.04ID:???
廃止するっていうかされたよ
0954nobodyさん2017/02/08(水) 20:22:25.81ID:???
>>953
なんで廃止したのかの理由が知りたい
$_SESSION直接いじるのと関数経由するのとで なんか違うの?
0955nobodyさん2017/02/08(水) 20:33:30.90ID:???
例えば読み込もうとしたファイルがなかった時にエラーが出るのを防ぐためにはどうしますか?

1. 読み込む前にそのファイルが存在するか読み込み可能か調べる
2. @でエラー制御をする
3. set_error_handlerでエラーをErrorExceptionに投げてcatchブロックで対応する

2と3はエラーになる可能性承知でって感じですが
毎度色々エラーになるの考慮して実装してたら大変だしコード長くなるので
2.3もありかなと思うのですがどうでしょう?
0956nobodyさん2017/02/08(水) 20:38:30.28ID:???
@で制御はその後のコードも実行されるからマズイですね
それ除外で
0957nobodyさん2017/02/08(水) 20:50:54.34ID:???
https://github.com/php/php-src/blob/PHP-5.3/ext/session/session.c
歴史的経緯ってどうやって調べるんだろうね、俺も知りたい
ソースの見方までは分かるんだけどコメントってどこに書いてるんだろう
0958nobodyさん2017/02/08(水) 20:54:05.08ID:???
>>954
> session_register() は、その変数名のグローバル変数を現在のセッションに登録します。
0959nobodyさん2017/02/08(水) 20:54:56.84ID:???
>>957
メーリングリスト探すといいよ
0960nobodyさん2017/02/08(水) 21:09:54.05ID:???
>>959
あーそういやマニュアルにもメーリングリストがどうこうって書いてたな
ありがとう
0961nobodyさん2017/02/09(木) 18:43:39.42ID:???
ソケットサーバ作ってブラウザからアクセスして
ブラウザから送ってきたHTTPリクエストヘッダを表示して接続を切るっていうコードを書いたんですが

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, '127.0.0.1', 80);
socket_listen($sock, 5);

while ($con = socket_accept($sock)) {
echo socket_read($con, 2048);
socket_close($con);
}

これってコード間違ってます?
>echo socket_read($con, 2048);
この部分がいっぱい表示されてしまいます
マニュアルはソケットの仕様を知ってる人向けの簡素な説明でよくわからなくて
0962nobodyさん2017/02/09(木) 21:16:32.94ID:???
>>955
起こりうるエラーを全部テストコードに書くんよ
0963nobodyさん2017/02/09(木) 21:21:40.82ID:???
>>961
読み込んだ長さを見てbreak
0964nobodyさん2017/02/10(金) 10:56:01.73ID:???
$obj->{'prop'}
(new Class)->method()

みたいな小技集ないのかね
0965nobodyさん2017/02/10(金) 11:20:52.49ID:???
マニュアル最新版のリリース見ていけばどうだろう
0966nobodyさん2017/02/10(金) 13:52:39.73ID:???
>>963
何をしてもsocket_close($con)に達すると
echoした文字列が複数回表示されます
数からしておそらく\r\nの数分表示されてる気がします
0967nobodyさん2017/02/10(金) 15:37:51.81ID:???
>>966
受信した文字列の長さを見たら?
0968nobodyさん2017/02/10(金) 16:06:20.73ID:???
>>967
$conで接続したクライアントに対して
こちらがsocket_closeするまでデータ来るのを待ってる感じだと思うのですが
socket_readで長さみて一定の長さまできたらsocket_closeしても
その一定の長さまで切り詰めた文字列が複数回表示されるだけです
0969nobodyさん2017/02/10(金) 16:55:17.09ID:???
一方的にsocket_closeせずに
試しにちゃんと応答してからsocket_closeしてみましたが
こちらがちゃんと応答すれば正常な動作になり
コンソールに1度だけ表示されるようになりました
うーんよくわからない・・・
0970nobodyさん2017/02/10(金) 17:01:03.60ID:???
>>961との差はクライアントへのsocket_writeを加えただけですが
一応コードです

while ($con = socket_accept($sock)) {
echo socket_read($con, 2048);
socket_write($con, $res = "HTTP/1.1 200 OK\r\n\r\n", strlen($res));
socket_close($con);
}
0971nobodyさん2017/02/10(金) 20:22:12.24ID:???
読み込んだ長さを見てbreak
0972nobodyさん2017/02/10(金) 21:37:46.81ID:???
while ($con = socket_accept($sock)) {
while (true) {
$buf = socket_read($con, 2048);
if (strlen(trim($buf)) > 0) echo $buf; break;
}
socket_close($con);
}

>>971
こういうことでないならば
すみませんがコードで示していただけますか?
0973nobodyさん2017/02/10(金) 21:40:27.10ID:ajYu3lk8
2chで質問してるやつは例外無く友達がいない。
0974nobodyさん2017/02/10(金) 22:20:54.93ID:???
犯罪者の98%はこの食べ物を日常的に食べている
0975nobodyさん2017/02/10(金) 22:51:48.16ID:ajYu3lk8
GETパラメータをDBに保存してます。

例えば、 hogeword.com/search_word=さくらんぼ
といったアクセスを想定して、その検索ワードをDBに保存しています。
すると、↓の様な不自然な検索が行われている様です。

これって攻撃を受けてますか?
最悪サイト自体は個人情報は何もないのですが、、、

999999.9 /**/uNiOn/**/aLl /**/sElEcT 0x393133353134353632312e39--
999999.9) /**/uNiOn/**/aLl /**/sElEcT 0x393133353134353632312e39,0x393133353134353632322e39 and(0=0
0976nobodyさん2017/02/11(土) 00:35:41.84ID:???
SQLインジェクションは、プレイスホルダーを使っていれば防げる

文字列を連結して、SQL文を作っていれば、やられる。
相手は「;何とかかんとか;」とSQL文をつなげてくる
0977nobodyさん2017/02/11(土) 01:07:54.41ID:???
>>975
初心者が背伸びすんな
0978nobodyさん2017/02/11(土) 02:13:53.39ID:???
>>972
そのコードもうわざとだろ
0979nobodyさん2017/02/11(土) 06:36:00.12ID:???
>>978
わざととは何がですか?
外側のループでbreakしろってことですか?
それはサーバが止まるってことなのでだめです
0980nobodyさん2017/02/11(土) 06:57:28.29ID:???
悪手ですがgoto使って試してみましたがいずれも結果は>>961と同じです
ブラウザに応答しない限りはいっぱいechoされます
ひょっとしたらブラウザがリクエスト再送してるのかもしれませんね
0981nobodyさん2017/02/11(土) 07:03:14.01ID:???
やっぱそうみたいですね
すみませんお騒がせしました
応答せずsocket_closeしたらFirefoxの場合10回ぐらい再送してるようです
ヘッダの数とたまたま同じぐらいだったので錯覚していました
ちゃんと別のブラウザでも確かめるべきでした
0982nobodyさん2017/02/11(土) 08:52:47.81ID:???
こういうのって長さを確認してから読み取るものだと思ってた
0983nobodyさん2017/02/12(日) 11:46:10.30ID:???
文字列の比較がうまくいきません。どうすればいいですか?

if($baka=="baka"){$aho="aho";}else{$aho="tonma";}

もしかしてPHPでは"は'にしないとダメなんですか?
0984nobodyさん2017/02/12(日) 11:58:18.02ID:???
まず何がしたいのかわからない
0985nobodyさん2017/02/12(日) 12:21:16.35ID:???
>>983
==を===にする
0986nobodyさん2017/02/12(日) 13:12:32.94ID:???
5年ぐらい前PHPを使ってコードを書いてました。

今モバイルのエンジニアなんですが、バックエンドも自分でやりたいので
ちょくちょくPHP使い始めたのですが、皆さんは普段どういった開発環境でコードを書いてますか?

昔はZendFrameworkにSmartyを使ってました。

私がやりたいのはHerokuのpostgreに保存を出し入れ
JSONで吐き出すぐらいなんですが、とりあえず
Git,PHPUnit,DBUnit,idiormを使ってます。
個人的にテスト回りがさっぱりでして
皆さんちょっとしたコードを書くときの定番ライブラリ教えて頂けると助かります。
0987nobodyさん2017/02/12(日) 13:57:51.85ID:???
phpstorm
後は自前のライブラリ
0988nobodyさん2017/02/12(日) 14:53:57.26ID:???
>>987

vimでいじってたんですが、phpstormとAtomで迷ってます。
Android Studioとそっくりなんで使いやすかったですが
高くてビビりましたw
0989nobodyさん2017/02/12(日) 14:58:03.83ID:???
>>988
高いけどそれだけのものがあるんだよなぁ

atomはPCか他のアプリとの相性が悪くて、すげー重かったわ
0990nobodyさん2017/02/12(日) 15:04:08.30ID:???
>>989
そうですね。AndroidStudioが無料だったので悩んじゃいます。
見た目や性能も同じなんですよね。
何もいじらなくても高性能なのが素晴らしいです。
Atomはvimとにてプラグインで拡張していく感じで
デフォルトでは使い物にならないって感じです。
0991nobodyさん2017/02/12(日) 23:51:03.86ID:???
>vimでいじってたんですが、phpstormとAtomで迷ってます。

他にいいのあるから探しなよ。
金もかからず、かなりいイイ感じで使えるのがあるから。
0992nobodyさん2017/02/13(月) 00:09:57.57ID:???
netbeansだっけな、数年前使ってたけどあれ猛烈に軽かった
今どうなってんのかは知らんけど
0993nobodyさん2017/02/13(月) 01:08:22.95ID:???
vimがデフォルトでは使い物にならないみたいに読めてしまうよ
0994nobodyさん2017/02/13(月) 12:37:51.45ID:???
http://tamae.2ch.net/test/read.cgi/php/1486956982/
次スレはこちらです

vimはプラグイン導入がめんどくさいよね
09959752017/02/13(月) 15:56:53.50ID:33fWrUff
誰かアドバイスください。
どうもSQLインジェクションをやろうとしている様なのですが
何か良い防御コードはありませんか?
0996nobodyさん2017/02/13(月) 15:59:00.22ID:???
攻撃元特定してアクセス遮断すりゃいいだろ
0997nobodyさん2017/02/13(月) 16:02:53.48ID:???
>>995
つ WAF
0998nobodyさん2017/02/13(月) 16:43:20.61ID:???
>>995
他人に迷惑かける前にWebサイトシャットダウンして下さい
0999nobodyさん2017/02/13(月) 16:58:45.51ID:33fWrUff
>>997
高いからNG
1000nobodyさん2017/02/13(月) 17:24:37.19ID:???
サーバのログ見りゃ怪しいリクエストなんて日常茶飯事だ
対策できてるなら心配する必要はないし
変なリクエストが来るようなら無視するか弾くしかないだろ

つうかスレチな話題ばっかだな
次スレじゃPHPの話題頼むよ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 118日 19時間 40分 25秒
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。