1 名前:デフォルトの名無しさん (ワッチョイ 1342-Xqtn) mailto:sage [2016/11/09(水) 11:03:26.15 ID:eAjeihOa0.net] PHPに関する下らない質問用避難スレです。 まず読むこと【PHPマニュアル】 www.php.net/manual/ja/ 前スレ 【PHP】下らねぇ質問はここに書き込みやがれ 5(実質6) echo.2ch.net/test/read.cgi/tech/1462971286/ 次スレは>>980 が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
768 名前:デフォルトの名無しさん (ワッチョイ c346-1ST5) mailto:sage [2017/02/02(木) 15:15:09.65 ID:sBmZcLbl0.net] >>757 例えば Bで期待された結果が得られた時は”○”と出力 そうでなければ”×:例外内容”を出力 AはBの出力結果(○ or ×)によって処理 ○とか×は例で書いただけで実際はHTTPのステータスコードみたいに 200ならOK とか 50Xならエラーとか きちんと仕様を決めるといい web APIとか扱ったことないのかな? あれと同じことだよ
769 名前:デフォルトの名無しさん (ワッチョイ 03c1-4SR0) mailto:sage [2017/02/02(木) 16:01:33.97 ID:ICaoPi9S0.net] >>757 例外はレイヤーで設計する 低レベルAPIが投げた例外は高レベルAPI内部でキャッチして集約(元々の例外は$prevでチェーン) 或いはキャッチしたAPIで処理し切る(復旧するなり落とすなり) いずれにしてもどのレイヤーが何処までの例外に対応するかは決めておかにゃならん 途中でキャッチしてエラー吐く処理して親に例外通知しないならそこで例外処理は完結していなければならない 例外安全とかも考えるべし
770 名前:757 (ワッチョイ b3c9-C7TH) mailto:sage [2017/02/02(木) 18:02:37.06 ID:t2qREDFK0.net] >>758 web APIとか扱ったことないです。 >>759 すみません。おっしゃることの半分も理解できません。 a.phpでエラーが起きているのかどうか、エラー内容も知りたいのですが・・・。 もし初心者向けの質問スレがありましたら、ご紹介してもらえませんか? ちょっと探したのですが見つかりませんでした。 サイト検索すると、例外処理は、例外の発生したファイル(箇所)で 行うのばかりで、他のファイルで処理する方法が見つけられませんでした。
771 名前:デフォルトの名無しさん (ワッチョイ d356-1ST5) mailto:sage [2017/02/02(木) 18:06:19.95 ID:I2XsCSbD0.net] 758の内容が理解できないならYahoo知恵遅れとかのがいいと思う
772 名前:デフォルトの名無しさん (ワッチョイ 8f5b-1ST5) mailto:sage [2017/02/02(木) 18:24:29.29 ID:5vn48hDV0.net] >>757 ちょっと質問の意図がわからんのだが a.phpでエラーが出ているの? catchのPDOExceptionをa.phpに表示させたいの? まずやりたいことを教えてくださいな
773 名前:デフォルトの名無しさん (ワッチョイ 8f5b-1ST5) mailto:sage [2017/02/02(木) 18:30:28.72 ID:5vn48hDV0.net] >>757 追記すると、 PDOExceptionで吐かれたエラーを そのままechoさせないで、変数なり渡す それをa.phpで$resultが判定 catchでどんな書き方してるかわからんけど 要領としてはこんな感じ ただ、これをする意味があるのかは不明
774 名前:デフォルトの名無しさん (JP 0H07-4SR0) mailto:sage [2017/02/02(木) 18:32:25.93 ID:yqvkGsV5H.net] >>760 親に例外通知したいなら例外をキャッチしないか, キャッチした例外をそのまま投げ直すか, キャッチした例外を高レベルの例外でラップして投げるかの何れか
775 名前:デフォルトの名無しさん (ワッチョイ a3f8-0MWP) mailto:sage [2017/02/02(木) 18:49:28.99 ID:bt5fyjk60.net] get()のとこでしないでa.phpで例外処理するだけ
776 名前:デフォルトの名無しさん (ワッチョイ d3a0-TTqS) mailto:sage [2017/02/03(金) 01:16:26.70 ID:5q5mSgpk0.net] >>684 です。 PEARやHTTP_Request2をなんとか準備して一先ず、ブログに記事をアップロードできるようになりました。 ですが、いくつか問題が残りました。 1本文はすべて「記事を書く」に入ってしまい「続きを書く」に入れることができない。 2画像をアップロードして、ブログ上での画像のURLの取得方法がわからない。 3タグが追加できない。 1と3も問題ですが、2ができないと非常に困ったことになります。 何か良い方法はないでしょうか?
777 名前:デフォルトの名無しさん (ワッチョイ 8f5b-1ST5) mailto:sage [2017/02/03(金) 03:58:43.49 ID:Ixnwxz7P0.net] >>766 状況わからないけど ブログからどういう形式でデータを取得してるの? APIでやってるの?
778 名前:デフォルトの名無しさん (ワッチョイ d3a0-TTqS) mailto:sage [2017/02/03(金) 10:56:49.07 ID:5q5mSgpk0.net] 正直、初心者過ぎて何やってるのかほとんどわからない とりあえず https://github.com/seiyaan/LiveDoorBlogAtomPub output-ism.info/2014/03/08/1561/ でアップロードは確認できた。 主に下のやつでいろいろ試している状態
779 名前:757 (ワッチョイ b3c9-C7TH) mailto:sage [2017/02/03(金) 11:15:01.38 ID:eixaQSD90.net] >>764 ,>>765 ひょっとしてエラーは呼び出し元へ戻ってくるのでしょうか? b.phpのクラスhoge->get()で起きたエラーは、呼び出し元のa.phpで、 try { $hoge->get();} catch (PDOException $e) { echo $e->getMessage(); } とすれば、hoge->getでのDB接続エラーを捕捉できるということでしょうか?
780 名前:デフォルトの名無しさん (ワッチョイ 6f50-cqZ0) [2017/02/03(金) 12:47:01.16 ID:Nsh1g7Ol0.net] >>746 サーバーの設定やらなんやらいじったらしばらくサイトが表示されなくなってしまって対処してました。。 環境変数やパスは確認済みで、考えられるのはsocket周りかなとは思うんですけど、ini等で変更してみても上手く行かないんですよね ググってもその例が出てこなくてどうにもならない。。 目的は非同期の別プロセスで重い処理をしたいので、もう少し調べてみてダメだったら諦めてajaxでやろうかと思います
781 名前:デフォルトの名無しさん (ワッチョイ c359-0MWP) mailto:sage [2017/02/03(金) 14:18:44.41 ID:XND6iDtO0.net] まだ直せないのかエンジニア
782 名前:デフォルトの名無しさん (ワッチョイ 33ce-0MWP) mailto:sage [2017/02/03(金) 15:23:46.05 ID:ZDAGU2jx0.net] インスタンス生成時に複数のメソッドを実行する場合 function __construct() {
783 名前:772 (ワッチョイ 33ce-0MWP) mailto:sage [2017/02/03(金) 15:25:20.61 ID:ZDAGU2jx0.net] 書き込み押しちゃいました function __construct() { $this->a; $this->b; } public function a() {} public function b() {} といった使い方をしてもいいんでしょうか?
784 名前:デフォルトの名無しさん (ワッチョイ d356-1ST5) mailto:sage [2017/02/03(金) 16:32:04.20 ID:AZd6IUX40.net] 逆に何でだめだと思ったの? あと好みの問題かもしれないけど public function a() { return $this; } public function b() { return $this; } みたいにしておくと $this->a()->b(); みたいにメソッドチェーンできてスマートかな
785 名前:デフォルトの名無しさん (ワッチョイ 33ce-0MWP) mailto:sage [2017/02/03(金) 16:42:27.65 ID:ZDAGU2jx0.net] >>774 レスありがとうございます __construct内でプロパティの初期化以外の実例が見つけられなかったので 一般的には使われていないのかと思いました
786 名前:デフォルトの名無しさん (ワッチョイ 03c1-yene) mailto:sage [2017/02/03(金) 20:29:36.44 ID:Y5WAIXu10.net] >>769 例外は「キャッチされない限り」コールスタックを遡り続ける throw new Exception(); で例外は投げられるから自分で挙動を確かめてみるといい (勿論実用上はExceptionかその子孫を継承した例外クラスを実装して投げる)
787 名前:デフォルトの名無しさん (ワッチョイ 1342-vqxm) mailto:sage [2017/02/03(金) 23:26:01.79 ID:nOd+Bj3o0.net] >>770 あーなるほど、バックグラウンドで動かすってやつですね。 sshで入ってコマンドラインで実行するとOKで execで動かすとダメ、ということだと、やっぱり環境変数関連が一番怪しいかな execに限らないけど、バッチとかでphpを動かす時は まずカレントが違う可能性も高いかな。なるべくフルパスで指定するようにしてたな。 環境変数も最低限しか設定されてないので、環境変数に依存するのはやめた方がいい(MySQLの接続先を環境変数でやるとかよくあるから) もしくはシェルスクリプト作って、その中で export するとか まぁ相当Linuxに詳しくないと・・よくハマるよね(自分もこの前ハマったw)
788 名前:デフォルトの名無しさん (ワッチョイ c359-0MWP) mailto:sage [2017/02/04(土) 02:11:09.03 ID:yz7EyBEj0.net] >>777 そも、実行しているPHPが意図しているものかの確認をしているかどうかが彼のレスからは読み取れなくないか
789 名前:デフォルトの名無しさん (ワッチョイ 33ce-0MWP) mailto:sage [2017/02/04(土) 16:29:21.48 ID:n3v1YVLA0.net] 下記の記述で、Aパターンの場合はinclude先のsub.php内にて、 $Foo->method()だけでFoo内のメソッドを呼び出せるんですが、 Bパターンではsub.php内で再びFooインスタンスを生成しないと method()にnot objectのエラーが出て、呼び出すことができません。 sub.phpから直接Foo内にアクセスする場合は sub.phpをnew Fooと同一のメソッド内でincludeする必要があるんでしょうか? Aパターン <?php //main.php class Example { public function sample() { $Foo = new Foo(); //Foo.php include 'sub.php'; } } $example = new Example; $example->sample(); Bパターン <?php //main.php class Example { public function sample() { $Foo = new Foo(); //Foo.php $this->bar(); } public function bar { include 'sub.php'; } } $example = new Example; $example->sample();
790 名前:デフォルトの名無しさん (ワッチョイ 7f17-3Ibi) mailto:sage [2017/02/04(土) 23:09:46.50 ID:VQZ3VZ/F0.net] phpでmysqlに’日付’,と'オナぬした回数'をそれぞれ一日ごとに格納しています mysql_fetch_arrayを使いechoすると 1日目、2日目、3日目、、、に対して 5回抜、2回抜、3回抜、、、と帰ってくるのですが4日目に入力し忘れた場合 1日目、2日目、3日目、5日目、、 5回抜、2回抜、3回抜、9回抜、、となります 入力忘れの日に自動で「日付」と「0回」を補完するにはどうすれば良いのでしょうか? テーブル作成時のSQL ↓ CREATE TABLE onanimaster( onani int(11), nukibi date default '0000-00-00')
791 名前:デフォルトの名無しさん (ワッチョイ a3f8-0MWP) mailto:sage [2017/02/05(日) 11:42:59.55 ID:pJp2c9va0.net] ・毎日(0回の日にも)ちゃんとinsertをする ・格納前に最後のnukibi_dateを取り出して今日と日付が連続するか比較する ・last_inserted(next)_onani, last_inserted(next)_dateを管理するテーブルを作る 好きなのどうぞ
792 名前:デフォルトの名無しさん (ワッチョイ d3d6-RMO+) mailto:sage [2017/02/05(日) 21:48:00.12 ID:xV17TEr+0.net] >>780 ばかじゃね? 1日5回も抜いてるから後々息が切れてきて抜かない日が出来るんじゃん。 最大2回でがまんすればいいんだよ。そうすれば断続的に抜けるから。
793 名前:デフォルトの名無しさん (ワッチョイ cf42-yene) mailto:sage [2017/02/05(日) 22:28:23.20 ID:z02c26Xt0.net] 後からで良いから、抜けてる日付のデータを入れておくと楽だよ
794 名前:デフォルトの名無しさん (ワッチョイ 33f8-dbIh) mailto:sage [2017/02/05(日) 23:05:41.71 ID:rvJfY1g90.net] 事前にカレンダーテーブル作ってupdate していくか 後からカレンダーテーブル作って連結してnullはゼロにする
795 名前:デフォルトの名無しさん (ワッチョイ a3f8-0MWP) mailto:sage [2017/02/05(日) 23:15:32.54 ID:pJp2c9va0.net] 781だけど ちゃんと読んでなかったスマンコ
796 名前:デフォルトの名無しさん (ワッチョイ 7f17-LFJd) mailto:sage [2017/02/06(月) 01:05:03.78 ID:/6p41uPl0.net] >>781 780ですが ・last_inserted(next)_onani, last_inserted(next)_dateを管理するテーブルを作る こちらの方法が気になりました ググっても last_insted_id() 関係の記事やページしか見つけられなくて.... 参考になるようなマニュアル、リファレンス、記事などありましたら教えていただけないでしょうか?
797 名前:デフォルトの名無しさん (ワッチョイ 1376-yene) mailto:sage [2017/02/06(月) 01:07:34.79 ID:MbdNwU5U0.net] cakephp3って最初にアクセスするページのデザイン変わりましたか? 参考サイトだと緑で、 get the ovens ready と書いてあるところが、 自分のだとヘッダーが赤で welcome to cakephp 3.3.13 red velvet. build fast grow solid って書いてあるんだけど composer 経由でのインストールだからバージョンも選べないし、このまま進めていいのか不安です
798 名前:デフォルトの名無しさん (アウアウウー Sa07-J+fW) mailto:sage [2017/02/06(月) 01:19:49.57 ID:Y3CDv6Uea.net] >>787 かわったよ
799 名前:デフォルトの名無しさん (ワッチョイ 1376-yene) mailto:sage [2017/02/06(月) 01:23:11.63 ID:MbdNwU5U0.net] >>788 ありがとうです。 このまま進めたいと思います。 たいへん助かりました。
800 名前:デフォルトの名無しさん (ワッチョイ a3f8-0MWP) mailto:sage [2017/02/06(月) 06:46:03.10 ID:BQS7D9EJ0.net] >>786 それは出てこないだろうね 英語の意味通りで別にそういう関数があるって話じゃないから 早い話が設定値を保存するテーブル(KVS)作れってことだけど onaniってのは回数じゃなくて日数だと思ってたし 質問読んでなくてほんとすまんかった 最後挿入したnukibiをとるだけなら SELECT nukibi FROM onanimaster ORDER BY nukibi DESC LIMIT 1 で出来る 挿入する前にこれと昨日の日付比較して日数に空白があれば その分だけINSERTするようにすればいいんちゃう
801 名前:790 (ワッチョイ a3f8-0MWP) mailto:sage [2017/02/06(月) 07:12:47.14 ID:BQS7D9EJ0.net] あ、もう1つ追伸しとくと これからの方策を示しただけで 現在のぶっ壊れたデータベースを修正するって話じゃないんでそこよろしく
802 名前:デフォルトの名無しさん (ワッチョイ 034a-Sup+) mailto:sage [2017/02/06(月) 09:57:07.81 ID:LFg06LIZ0.net] >>790 抜いてばかりの童貞にinsertは無理だろ
803 名前:デフォルトの名無しさん (アウアウウー Sa07-VnDS) mailto:sage [2017/02/06(月) 19:16:02.72 ID:ozwc9aFfa.net] >>792 誰がうまいこと言えと
804 名前:デフォルトの名無しさん (ワッチョイ 03d6-yene) mailto:sage [2017/02/06(月) 19:50:18.02 ID:Qfr8LDq90.net] データベーススレ死んでるのでここで 自分の「お気に入りの本」を無制限で登録できるシステムがあるとき、 そのお気に入りの本の順序もデータベースへ保存したいと考えています どのようなテーブル構造にすればよいでしょうか?
805 名前:デフォルトの名無しさん (ワッチョイ 034a-Sup+) mailto:sage [2017/02/06(月) 19:53:11.14 ID:LFg06LIZ0.net] >>794 順序って何さ?
806 名前:デフォルトの名無しさん (ワッチョイ 03d6-yene) mailto:sage [2017/02/06(月) 19:56:54.25 ID:Qfr8LDq90.net] >>795 1番目、2番目・・・などのユーザーが本を並び替えした順番のことです これはただの順序であって、ランキング的な意味合いではありません
807 名前:デフォルトの名無しさん (ワッチョイ 034a-Sup+) mailto:sage [2017/02/06(月) 20:00:24.61 ID:LFg06LIZ0.net] 列1: 本のタイトル 列2: 順番 でいいんじゃないか?
808 名前:デフォルトの名無しさん (ワッチョイ 03d6-yene) mailto:sage [2017/02/06(月) 20:17:46.69 ID:Qfr8LDq90.net] いい感じのパッケージありました https://github.com/spatie/eloquent-sortable
809 名前:デフォルトの名無しさん (ワッチョイ d3d6-RMO+) mailto:sage [2017/02/06(月) 21:57:45.78 ID:c35vGYE60.net] >>797 プライマリキーくらいつくれ、能無し
810 名前:デフォルトの名無しさん (ワッチョイ 7f17-pD/q) [2017/02/07(火) 00:04:49.40 ID:Mn/5HQ4m0.net] >>780 ですが 一応できました もっと効率のいい書き方、変数の使い方、抜き方、等ありましたら教えてください pastebin.com/pHhnxtc7
811 名前:デフォルトの名無しさん (ワッチョイ 7f17-pD/q) [2017/02/07(火) 00:10:20.64 ID:Mn/5HQ4m0.net] >>800 すいませんミスりました 30行目 39行目 $benkyoukaisibi とありますが $nukikaisibi のまちがいでした
812 名前:757 (ワッチョイ b3c9-C7TH) [2017/02/08(水) 09:18:47.18 ID:FV7NOXvo0.net] お礼が遅くなりました。なんとなく(?)例外処理がわかりそうな気がします。 あと一つ関連で教えていただきたいのですが A.php で try{ B.php内の関数} catch($error){例外処理} としているとき、 B.php の関数で、DB処理をしてトランザクション処理をするときは、 B.phpで処理の必要があると思うのですが、そのあと、改めて例外を投げて A.phpで補足するのが定番なのでしょうか。 例えばB.php 内の慣習(A.phpから呼び出される)で try{sql処理} catch($error){ロールバック処理;throw $error} といった形ということです。
813 名前:802 (ワッチョイ b3c9-C7TH) [2017/02/08(水) 09:19:56.66 ID:FV7NOXvo0.net] ごめんなさい。関数というのは、B.phpで作られるクラスのメンバ関数のことです。
814 名前:デフォルトの名無しさん (ワッチョイ a3f8-0MWP) mailto:sage [2017/02/08(水) 09:23:32.00 ID:+f0LmjaI0.net] PDOのエラーモードを例外にしてんなら、 全部PDO関連の例外はPDOExceptionに集約されるでしょ。 そこでトランザクション中ならロールバックすればいいだけ。 php.net/manual/ja/pdo.intransaction.php
815 名前:デフォルトの名無しさん (ワッチョイ a3f8-0MWP) mailto:sage [2017/02/08(水) 09:40:39.44 ID:+f0LmjaI0.net] try { $pdo = new PDO(〜); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 〜 //実行 } catch (PDOException $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } } もしくは try { $pdo = new PDO(〜); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 〜 try { //実行 } catch (PDOException $e) { $pdo->rollBack(); } } catch (PDOException $e) { } 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
816 名前:デフォルトの名無しさん (JP 0Hff-w8tn) mailto:sage [2017/02/08(水) 10:14:53.81 ID:WP/XTf2IH.net] >>802 基本的に、データベースアクセスするメソッド内ではtransactionを開始しないこと(呼び出し側で処理する)。 なので、B内ではtry-catchは不要。 A内でcatchするのがrollbackの為だけなら、それも不要。commitしなければ自動ロールバックされるし。 データベースエラーのときだけログをごにょごにょしたいなら、exception handler内でexceptionのクラスを調べて、 PDOExceptionの場合にそうすればいい。
817 名前:757=802 (ワッチョイ 9bc9-Ev9t) [2017/02/09(木) 13:06:47.11 ID:90f1Xg3G0.net] >>804 ,805,806 説明が下手でごめんなさい。ロールバックの仕方がわからないのではなくて、 呼び出し先(B.php)でロールバックされたことをA.phpで知って「登録されませんでした」と いったメッセージをA.phpで送りたいんです。 >>806 A.phpでDB接続のロジックを書きたくないんです。接続せずにトランザクション開始ってできないですよね。 B.phpのクラスでDB関連のロジックをまとめて、A.phpでは結果だけ取得したいです。 結果というのは、正しい結果もあれば例外オブジェクトと思っています。 なので、A.phpでtry{b->function}catch($e){例外処理}としたいのですが、考え方が おかしいでしょうか?A.phpがコントローラ、B.phpがロジックの場合、どのように処理するのが 定番なのでしょうか
818 名前:デフォルトの名無しさん (JP 0H0e-oA82) mailto:sage [2017/02/09(木) 13:45:35.85 ID:dfCX7ZDmH.net] >>807 例えば、B.phpの立場と同じUserModel.phpを考えてみましょうか。 まず、class UserModel自身がデータベース接続を確立するのはこのましくありません。 なぜなら、ユーザの登録と同時に何かの登録をしたいとき、 $user = new UserModel(); $foo = new FooModel(); $user->add($user_data); $foo->add($foo_data); と書くと思いますが、トランザクションはこのコードの外側で操作する必要があります。 $conn = DBConnection::getConnection(); $conn->begin(); $user = new UserModel($conn); $foo = new FooModel($conn); $user->add($user_data); $foo->add($foo_data); $conn->commit(); このコードがコントローラに存在するなら、データベース接続はコントローラで行わなければならないということになります。
819 名前:デフォルトの名無しさん (JP 0H0e-oA82) mailto:sage [2017/02/09(木) 13:47:44.35 ID:dfCX7ZDmH.net] それから、上でも書きましたが、エラー発生後他の処理をしないなら、exception handlerで全てのexceptionを処理するのが簡単です。
820 名前:デフォルトの名無しさん (ワッチョイ 9342-3OfB) mailto:sage [2017/02/09(木) 18:57:33.26 ID:jEjnqqv00.net] >>807 呼び出し先でエラーがあったらメッセージを出したいってこと? 自分だったら、global変数にエラーメッセージを入れて、それを出力するようにするかなぁ
821 名前:デフォルトの名無しさん (オッペケ Srf7-S/g0) mailto:sage [2017/02/09(木) 20:01:16.79 ID:rM/fQ6YVr.net] おれ、いろんなサイトでB.phpでDB接続して、A.phpでも接続してるけど、特になんの問題もないよ 動けばいい、多少のロジックの無駄は気にすんな
822 名前:デフォルトの名無しさん (ワッチョイ 26c9-cGUq) [2017/02/09(木) 20:24:33.59 ID:3FO030YH0.net] foreachで、途中からループを始めたいときはどうしたらいいの? 最初のn個飛ばすとか
823 名前:デフォルトの名無しさん (ワッチョイ dfd6-CIv3) mailto:sage [2017/02/09(木) 20:46:25.53 ID:m/rQHIL40.net] 欠陥コードだから構造見直し
824 名前:デフォルトの名無しさん (ワッチョイ 0f59-cGUq) mailto:sage [2017/02/09(木) 21:30:00.55 ID:PVymcmPW0.net] >>808 B.phpはモデルじゃなくサービスレイヤみたいに読めるけど。
825 名前:デフォルトの名無しさん (ワッチョイ 126b-T9/6) [2017/02/09(木) 22:51:03.38 ID:Uf58p31N0.net] オブジェクト指向プログラミングのお手本になるようなオープンなソースを教えてほしいです。 PHPのオブジェクト指向プログラミングの基礎を学んだのですが、今ひとつクラス設計がわかりません。 神クラスにならないようにするというのはわかったのですが、実体の無いものをクラス化する時、 例えばデータをファイルに書き込むという操作群があるとして、これをどういうクラスに入れればいいのかということです。 今までは適当に関数にまとめて呼び出していたのですが、これをOOPにするならどういう風に書けばいいのかわかりません。 私が読んだことのあるPHPプログラムは古いバージョン用に書かれたOOPとは無関係の掲示板スクリプトなどです。 出来ればPHPの標準関数・機能だけで完結しているものがあればありがたいです。
826 名前:デフォルトの名無しさん (ワッチョイ dfd6-CIv3) mailto:sage [2017/02/09(木) 23:01:22.62 ID:m/rQHIL40.net] >>815 フレームワークとか覗いてみるといいかもね https://github.com/laravel/framework
827 名前:デフォルトの名無しさん (ワッチョイ dfc1-CIv3) mailto:sage [2017/02/10(金) 00:11:57.81 ID:Vc9wXXK10.net] >>807 だからBで例外投げてAでcatchすればいいんじゃねーの
828 名前:812 (ワッチョイ 26c9-cGUq) mailto:sage [2017/02/10(金) 10:32:44.34 ID:6P3lfBfG0.net] どうしたらいいかな
829 名前:デフォルトの名無しさん (ワッチョイ 27f8-cGUq) mailto:sage [2017/02/10(金) 10:38:32.76 ID:8U0cA5Uo0.net] forを使って下さい
830 名前:デフォルトの名無しさん (ワッチョイ 8356-ENO3) mailto:sage [2017/02/10(金) 13:22:55.21 ID:iqUwwggS0.net] >>812 $ary = array(1, 2, 3, 4, 5, 6); print_r($ary); echo "\n"; foreach ($ary as $k => $v) { if ($k < 3) { continue; } echo "{$k} => {$v}\n"; } echo "\n"; $ary = array_slice($ary, 3); foreach ($ary as $k => $v) { echo "{$k} => {$v}\n"; } とか forやwhile使ってもいいけど
831 名前:デフォルトの名無しさん (ワッチョイ 8356-ENO3) mailto:sage [2017/02/10(金) 13:26:14.20 ID:iqUwwggS0.net] >>815 Zend Frameworkのソースコードはお手本みたいな規約だしオススメ
832 名前:デフォルトの名無しさん (ワッチョイ dfd6-CIv3) mailto:sage [2017/02/10(金) 14:32:54.04 ID:lMP7OKhp0.net] array pushの公式に もし配列にひとつの要素を加えるために array_push() を使用するなら、 関数を呼ぶオーバーヘッドがないので、$array[] = を使用するほうがいいです。 って書いてあるけど、下みたいな書き方でもオーバーヘッド発生するのかな foreach ($variable as $value) { array_push($array, $value); }
833 名前:デフォルトの名無しさん (ワッチョイ dfc1-S0So) mailto:sage [2017/02/10(金) 14:43:11.39 ID:Vc9wXXK10.net] >>822 なんで発生しないと思うの?
834 名前:デフォルトの名無しさん (ワッチョイ 9342-3OfB) mailto:sage [2017/02/10(金) 15:00:30.89 ID:RYh3fTnw0.net] >>811 自分は気にするけどなぁww DB関連のコードを全てB.phpでするようにして、A.php側ではDBを意識しないコードにしたいとかよくある。 あとでDBが変更になることもあるし PDO使ってても、一部KVSに変更とかあると対応できないし(お願いしたことあるw) DB一つでトランザクション完了してた時は楽でよかったwww
835 名前:デフォルトの名無しさん (ワッチョイ dfd6-CIv3) mailto:sage [2017/02/10(金) 16:22:22.39 ID:lMP7OKhp0.net] >>823 関数に閉じ込めてる間はpushが稼働してると思ったから
836 名前:デフォルトの名無しさん (ワッチョイ 9342-3OfB) mailto:sage [2017/02/10(金) 16:29:42.22 ID:RYh3fTnw0.net] foreachは関数じゃなく、ループですが・・ オーバーヘッドがあるから、ループの中で使うのはおすすめしないと言うことなんだけどね。 ちなみに、array_mergeという関数があって こちらを使えば・・ループの代わりに関数を使うことで・・という説明になるね
837 名前:デフォルトの名無しさん (オッペケ Srf7-S/g0) mailto:sage [2017/02/10(金) 16:35:15.11 ID:8f4rSBP3r.net] どうせ誰が作ってもクソコード
838 名前:ネんだから動いてればよくて、なんかエラーでてたり客に文句言われたら対応すりゃいい [] [ここ壊れてます]
839 名前:デフォルトの名無しさん (ワッチョイ 0f46-ENO3) mailto:sage [2017/02/10(金) 16:39:09.45 ID:yKHSCA+P0.net] 多少の処理速度の差やオーバーヘッドを気にして見通しの悪いコードにするのは本末転倒 ましてやPHPだし
840 名前:デフォルトの名無しさん (アウアウカー Sa1f-S0So) mailto:sage [2017/02/10(金) 20:36:55.90 ID:B/44UtXJa.net] >>825 それループで回る分だけ毎回array_push呼ばれるから
841 名前:デフォルトの名無しさん (ワッチョイ beaf-cGUq) [2017/02/11(土) 01:35:29.95 ID:sRxxkJoY0.net] $ary[] = これの方が美しいし速い 他の言語じゃ無理だからな
842 名前:デフォルトの名無しさん (ワッチョイ 9f4a-1VpQ) mailto:sage [2017/02/12(日) 17:20:35.17 ID:abtsR4dg0.net] >>830 どれくらい速いの?
843 名前:デフォルトの名無しさん (ワッチョイ beaf-cGUq) [2017/02/12(日) 18:06:30.99 ID:wFV2vg550.net] >>831 二通りにしかないんだからarray_pushより速いで十分でしょ?
844 名前:デフォルトの名無しさん (ワッチョイ dfd6-CIv3) mailto:sage [2017/02/12(日) 21:51:06.88 ID:QFyd4EUF0.net] kakaku.com/item/K0000820062/ 価格.comみたいなK0000820062ってどういう風に作るんだろう UUIDじゃないよね?
845 名前:デフォルトの名無しさん (ワッチョイ 7230-jWyY) mailto:sage [2017/02/12(日) 21:59:19.74 ID:xZhsq1SY0.net] なんかのIDにK付けて0埋めしてるだけちゃうん
846 名前:デフォルトの名無しさん (ワッチョイ 83d6-Frzy) mailto:sage [2017/02/12(日) 23:54:04.06 ID:GioNsZNN0.net] >>833 おまえ、頭がやばいよ…
847 名前:デフォルトの名無しさん (ワッチョイ 265b-ENO3) mailto:sage [2017/02/13(月) 10:24:20.63 ID:7hOSszMQ0.net] >>833 プログラミングの基礎を勉強するべき
848 名前:デフォルトの名無しさん (ワッチョイ 0f46-ENO3) mailto:sage [2017/02/13(月) 12:03:26.71 ID:MX/uxF0s0.net] >>831 そこで自分でコード書いて試そうという発想にならないならプログラミングには向いてないと思う 人間には得手不得手ってあるからね 手遅れになる前に他の道を探そう
849 名前:デフォルトの名無しさん (ワッチョイ dfd6-CIv3) mailto:sage [2017/02/13(月) 12:53:46.07 ID:dq41sjDl0.net] protected function getResponseGroup(): array { return $this->responseGroup; } こんな感じでわざわざ取得メソッド使うのって、型の強制できるぐらいのメリットしかないのかね
850 名前:デフォルトの名無しさん (ワッチョイ 0f46-ENO3) mailto:sage [2017/02/13(月) 13:48:40.27 ID:MX/uxF0s0.net] >>838 そこら辺は設計思想にもよるし”これが絶対に正しい”というのは無いかな ”getter setter”とかでググってメリット・デメリットを理解した上で”自分の中での正解”を探せばいいのではと
851 名前:デフォルトの名無しさん (アウアウカー Sa1f-S0So) mailto:sage [2017/02/13(月) 16:03:15.51 ID:KMmRwMwBa.net] >>838 子クラスに親クラスのプロパティを絶対に変更させないという強い意志が感じられる(小並
852 名前:デフォルトの名無しさん (ガラプー KK4b-4eBQ) mailto:sage [2017/02/13(月) 18:39:07.72 ID:qWBqE6jZK.net] 「$this->」 これを何十回も入力させるってバカみたい。
853 名前:デフォルトの名無しさん (ワッチョイ 27f8-cGUq) mailto:sage [2017/02/13(月) 18:52:43.00 ID:pn1QtbZ90.net] そう思うなら自分好みのパーサー書けばいいんじゃね
854 名前:sage (JP 0Hfe-JgBl) [2017/02/14(火) 12:57:43.87 ID:vlYZpaj3H.net] すみません教えてください。 ドキュメントルートが/home/virtual/id/public_htmlとして、一つ上のパスを取得したいとします。 (上の例なら/home/virtual/id) perlで $ENV{'DOCUMENT_ROOT'} =~ /(.+)\/(.+?)/; my $path = $1; これと同じことをPHPでやりたいのですが、見当が付きません… よろしくお願いします。
855 名前:デフォルトの名無しさん (ワッチョイ 27f8-cGUq) mailto:sage [2017/02/14(火) 13:38:34.23 ID:BZw4l4zq0.net] dirname($_SERVER['DOCUMENT_ROOT'])
856 名前:デフォルトの名無しさん (ワッチョイ 9342-3OfB) mailto:sage [2017/02/14(火) 13:44:44.59 ID:AvrQL4xh0.net] dirnameのマニュアル読むといろいろ簡単にできて便利だよ php.net/manual/ja/function.dirname.php 今確認したら、PHPってファイルシステムの関数めちゃあるね。
857 名前:843 (JP 0Hfe-JgBl) mailto:sage [2017/02/14(火) 13:49:26.20 ID:vlYZpaj3H.net] >>844 >>845 ありがとうございます!! こんなの直接できるんだ。。唖然。。
858 名前:デフォルトの名無しさん (アウアウカー Sa1f-S0So) mailto:sage [2017/02/14(火) 16:16:39.35 ID:vX4Pr1L+a.net] Pythonのos.path, Rubyのpathname, PerlにだってFile::Specがあるんだぜ? ファイルシステム依存なんだし組み込みじゃなくとも標準ライブラリでラップされてて何も不思議じゃない
859 名前:デフォルトの名無しさん (ワッチョイ 8356-ENO3) mailto:sage [2017/02/14(火) 17:26:18.09 ID:i5SPUrbm0.net] >>846 つか>>843 のperlのソースコードの意味(正規表現)は理解できてるんだろうか? PHPでも正規表現を使えば似たようなコードで実現できるでしょ もちろん1つ上のパスを取得する「だけ」なら>>844 のがスマートだけど
860 名前:デフォルトの名無しさん (ワッチョイ 1246-3OfB) [2017/02/14(火) 17:46:30.89 ID:PYBh6Cc20.net] Xcodeの質問ってここで良い? view controllerでそれぞれのiPhoneの画面サイズがインプットされてない? 出ないんだが?誰か解決策教えてくださいな
861 名前:843 (JP 0Hfe-JgBl) mailto:sage [2017/02/14(火) 18:39:19.55 ID:vlYZpaj3H.net] >>846 PHPの正規表現の後の$1、$2…が理解できんのです。 誰が作ったのかさえわからん、みんな逃げちゃった(=PHPわかる人が誰もいない+私もPHP書いたこと一度もない)ものを触らざるを得なくなって。 置換もさっぱり。少なくともs/before/after/ig;みたいに簡単じゃないことだけは昨日知った…
862 名前:デフォルトの名無しさん (ワッチョイ 0f59-cGUq) mailto:sage [2017/02/14(火) 19:45:33.94 ID:GvFlLFXU0.net] >>850 sed分かるなら何の問題もないでしょ
863 名前:デフォルトの名無しさん (ワッチョイ 27f8-cGUq) mailto:sage [2017/02/14(火) 21:45:49.32 ID:BZw4l4zq0.net] >PHPの正規表現の後の$1、$2…が理解できんのです。 >>843 で後方参照して同じことしてるじゃん? echo preg_replace('/(.+)\/(.+)?/', '$1', '/home/virtual/id/public_html') [JS] '/home/virtual/id/public_html'.replace(/(.+)\/(.+)?/, '$1') [Rb] '/home/virtual/id/public_html'.gsub(/(.+)\/(.+)?/, '\1') [Py] re.sub(r'(.+)/(.+)?', '\\1', '/home/virtual/id/public_html') Perlが同じように書けるかは知らないけど テキスト処理能力を進化させすぎたPerlが多分特殊な方
864 名前:デフォルトの名無しさん (アウアウカー Sa1f-S0So) mailto:sage [2017/02/14(火) 22:33:22.74 ID:aTcP7cxLa.net] 置換じゃなくてキャプチャしたいんでしょ マニュアルのpreg_match見れば分かるけどキャプチャ保存用に引数一個追加する必要がある
865 名前:デフォルトの名無しさん (ワッチョイ 9342-3OfB) mailto:sage [2017/02/14(火) 23:05:03.22 ID:AvrQL4xh0.net] Perlの書き方は、シェルスクリプトの経験があればなんとかなるけど 何にも知らない人が新しくプログラムを学ぼうとすると 癖が多すぎてwww まぁプログラムが好きで、プグラムを組むことが目的な人が多い感じするよね。
866 名前:843 (JP 0Hfe-JgBl) mailto:sage [2017/02/15(水) 09:52:31.78 ID:dsR3IgXDH.net] >>852 その位置に$1か… ありがとうございます。 >>853 書き方がわからなくて、最後の/以降の文字列を取得してから空文字列で置換しようとしてもうまくいかず、splitで分割して前方だけを$_[0]のような形で取得しようとしても空文字が返り… 一昨日からいろんなところをググりながら調べているですが、マスターできる気がしません… >>854 ご想像通り?シェルとPerl以外書いたことがありません(ExcelのマクロとVWD2005のC#はほんの少し触った)。 みなさまありがとうございました。がんばってみます。。
867 名前:デフォルトの名無しさん (ワッチョイ 26c9-cGUq) mailto:sage [2017/02/15(水) 10:57:58.02 ID:auzGmUVk0.net] >>855 シェルやperlを書いたことがあるなら大丈夫でしょ シェル芸とかいまだにマニュアル読みながらじゃないと書けないわ
868 名前:デフォルトの名無しさん (ワッチョイ 8356-ENO3) mailto:sage [2017/02/15(水) 14:03:33.63 ID:VOjsPlCF0.net] >>855 DOCUMENT_ROOTが空っぽの事がある可能性も踏まえるなら if (preg_match('/(.+)\/(.+?)/', getenv('DOCUMENT_ROOT'), $match)) { $path = $match[1]; } が>>843 と同等のPHPコード print_r($match); の出力結果見てみるといい 細かいことをいえば正規表現は /^(.+)\/.+?$/ のが良いと思うけど 説教臭くて申し訳ないが言語が違えど正規表現の書き方なんて大差ない 基本を理解してないからこういう時に潰しが効かない