- 1 名前:nobodyさん mailto:sage [2014/01/20(月) 06:23:11.66 ID:???]
- 質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り 次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。 ◆前スレ 【PHP】下らねぇ質問はID出して書き込みやがれ 131 kohada.2ch.net/test/read.cgi/php/1384065969/ ◆質問用テンプレ 【OS名】CentOS 【PHPのバージョン】5.5 【連携ソフトウェア】MySQL ImageMagick 【質問内容】 ◆質問する時の注意 ・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す) ・ 己の行った操作、変更などを詳しく明記すること。 ・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。 ・ 質問者として、態度をわきまえること。 ・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。 (PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。) ◆質問後の注意 ・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。 ・解決しなくても回答をもらった場合はお礼を言うこと。 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。) ◆回答者への注意 ・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。 【その他諸注意】 ・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
- 89 名前:nobodyさん [2014/02/02(日) 00:03:04.56 ID:6TG0eOwN]
- ActiveRecordを継承するModelモデルがあったとして
テーブルにinsertするaddメソッドを作るとき staticメソッドにすべきかどうかを教えていただきたいです。 以下の2つで迷ってるんですが正解ってあるんでしょうか。 public function add($hoge) { $this->hoge = $hoge; return $this->save(); } $model = new Model; $model->add($hoge); ---------- public static function add($hoge) { $model = new static; $model->hoge = $hoge; return $model->save(); } Model::add($hoge);
- 90 名前:nobodyさん mailto:sage [2014/02/02(日) 02:48:14.87 ID:???]
- 議論のあるところですが、Frameworkの流儀に倣うのがよいでしょうね
元々はテーブルがクラスでインスタンスが行になる感じですね クラスの得意メソッドが、PHPだとStaticという表現になります
- 91 名前:nobodyさん mailto:sage [2014/02/02(日) 03:55:43.87 ID:???]
- >>89
ARでは、クラス -> テーブル、インスタンス -> 行、プロパティ -> カラム、という表現 insertはテーブルに対する操作なので、インスタンスではなくクラスに対するメッセージ==クラスメソッドで表す RailsのARだとまさにClassMethodsつー思い切ったモジュールがあって、このcreate()がinsertに対応しているので お宅の求めているものにかなり近いだろう https://github.com/rails/rails/blob/40e7fe3451df8e5b454f7d0472396d2429edc0e5/activerecord/lib/active_record/persistence.rb
- 92 名前:nobodyさん mailto:sage [2014/02/02(日) 07:28:04.31 ID:???]
- 出番だぞ
724:デフォルトの名無しさん :2014/02/02(日) 04:29:49.87 [sage] 1000日後の日付をYYYY-MM-DD形式で取得するのに簡単な方法はありますか? 前提条件はできるだけ少ないほうがうれしいです
- 93 名前:nobodyさん mailto:sage [2014/02/02(日) 09:49:34.74 ID:???]
- いつから1000日後よ
- 94 名前:nobodyさん mailto:sage [2014/02/02(日) 12:30:52.38 ID:???]
- DateTimeクラスのaddメソッド
- 95 名前:nobodyさん [2014/02/02(日) 12:44:47.02 ID:XaYZuhBO]
- function view() {
extract([ "v1" = > "aaa" ]); require("test.php"); } test.php <? function func() { echo $v1; // ここで$v1を表示するにはどうしたらいいですか } global $v1 と $GLOBALS['v1'] でも表示されません
- 96 名前:nobodyさん mailto:sage [2014/02/02(日) 14:59:01.63 ID:???]
- requireの場所違くね
- 97 名前:nobodyさん mailto:sage [2014/02/02(日) 15:25:36.73 ID:???]
- func(extract([ "v1" = > "aaa" ]))じゃダメなの?
- 98 名前:nobodyさん mailto:sage [2014/02/02(日) 15:26:50.98 ID:???]
- 突っ込みどころが多すぎる
- 99 名前:nobodyさん mailto:sage [2014/02/02(日) 15:34:01.86 ID:???]
- 一番手っ取り早い方法
function〜 {と } の行を全てコメントアウト = > を => に <? を <?php に view()のあるファイルの先頭に <?php 追加 これでいけると思うが
- 100 名前:nobodyさん mailto:sage [2014/02/02(日) 16:00:51.61 ID:???]
- >>97は無視してくれ extractという関数を理解していなかった
extractってのはシンボルテーブルに変数をインポートする関数なんだが 別のphpファイルだとシンボルテーブルを共有してないっぽい
- 101 名前:nobodyさん mailto:sage [2014/02/02(日) 16:07:28.45 ID:???]
- 関数ごとにシンボルテーブル違うっぽいな
- 102 名前:95 mailto:sage [2014/02/02(日) 16:13:00.92 ID:???]
- 無理ぽいのでとりあえず引数で渡すことにします。
皆さんありがとうこざいました。
- 103 名前:nobodyさん mailto:sage [2014/02/02(日) 16:13:21.82 ID:???]
- 質問者は関数定義だけしてその関数を呼んでない、というのもあるw
- 104 名前:95 [2014/02/02(日) 16:13:50.74 ID:XaYZuhBO]
- ID出し忘れました
- 105 名前:nobodyさん mailto:sage [2014/02/02(日) 16:20:08.31 ID:???]
- 1 <?
2 $a = "aaaaaaaaaaaaaaaaaaaaa"; 3 echo "in global\n"; 4 print_r(get_defined_vars()); 5 function bbb(){ 6 $b = array("bbbbbbbbb" => "bbbbbbbbbbbbbbbbbb"); 7 extract($b); 8 echo "in function\n"; 9 print_r(get_defined_vars()); 10 } 11 bbb(); 12 echo "in global\n"; 13 print_r(get_defined_vars());
- 106 名前:nobodyさん mailto:sage [2014/02/02(日) 16:20:50.71 ID:???]
- test.phpの実行結果
in global //大量に変数が表示される [a] => aaaaaaaaaaaaaaaaaaaaa in function Array ( [b] => Array ( [bbbbbbbbb] => bbbbbbbbbbbbbbbbbb ) [bbbbbbbbb] => bbbbbbbbbbbbbbbbbb ) in global //大量に変数が表示される [a] => aaaaaaaaaaaaaaaaaaaaa どうやらextract($b)によって変化するのはbbb()のシンボルテーブルのみ
- 107 名前:nobodyさん mailto:sage [2014/02/02(日) 16:28:01.37 ID:???]
- あと面倒くさいから確かめてないけど
func()でglobalをつかってもtest.phpのシンボルテーブルが参照されるだけで requireされた場所(views)のシンボルテーブルが参照されるわけではないんじゃないの
- 108 名前:nobodyさん mailto:sage [2014/02/02(日) 16:39:41.69 ID:???]
- <?
$v1 = ''; function view() { global $v1; extract(array( "v1" => "aaa" )); require("test.php"); } view(); testfunc(); -------------------- <? function testfunc() { global $v1; echo $v1; // ここで$v1を表示するにはどうしたらいいですか } --------------------
- 109 名前:nobodyさん mailto:sage [2014/02/02(日) 16:44:10.62 ID:???]
- test.php
<? require('test2.php'); function view(){ extract(array("v1"=>"aaa"));; func(get_defined_vars()); } view(); test2.php<? function func($hoge){ echo $hoge["v1"]; } これじゃダメ?
- 110 名前:108 mailto:sage [2014/02/02(日) 16:46:04.11 ID:???]
- 上が適当なファイルで下がtest.php
extract(array( "v1" => "aaa" )); は動かしたphpのバージョンが古いので変更している。 requireはあくまでファイルを読み込むためのもの。例え関数内で読まれたとしてもその意味は変わらない。 view関数の中でrequireしても、view関数内の変数がglobalの対象にならないよってことで。
- 111 名前:nobodyさん mailto:sage [2014/02/02(日) 16:47:28.98 ID:???]
- 個人的に関数を呼び出すごとにrequireっておぞましいんだが普通なんか?
- 112 名前:nobodyさん mailto:sage [2014/02/02(日) 16:56:25.03 ID:???]
- >>111
あまりrequireすることがなくてサイズが大きいやつだとオーバーヘッドになるから、その関数内でやる場合もあるかも。 ただ効果があるかどうかは知らない。
- 113 名前:nobodyさん mailto:sage [2014/02/02(日) 17:16:05.52 ID:???]
- 自分は主な関数ごとにファイルを作成しているから、使う関数の数だけrequireするよ。
たいていは、多くても10ファイル前後におさまる。 速度も別に遅くならないし、気にならない。 まあ、auto_loadが関数の読み込みにも使えたら便利なんだけど。
- 114 名前:nobodyさん [2014/02/02(日) 17:38:45.22 ID:UuBd4EHo]
- 質問と言って良いかわからんが
curl_multi_exec を使うと「エラー時のエラー番号が0」になる人いない? バージョンは最新のどれでも。 curl_exec だとしっかりエラー番号も取れるんだけどねー。
- 115 名前:nobodyさん mailto:sage [2014/02/02(日) 17:42:38.20 ID:???]
- 仕様見てみりゃわかる。
multi は個別にエラーチェックしないと
- 116 名前:89 [2014/02/02(日) 17:53:21.79 ID:6TG0eOwN]
- >>91
ありがとうございます。クラスメソッドにすることにしました。 クラスメソッドの使いどころについてもうちょっとお聞きしたいです。 オブジェクト指向の勉強にとデザインパターンの入門サイトを見ていたのですが factoryメソッドの紹介でこんなコードが載ってました。 codepad.org/KLCiPfDa このReaderFacotoryクラスのメソッド2つをクラスメソッドにしない理由がよくわかりません。 $factory = new ReaderFactory(); // このnewが無駄に見えて仕方ないです $data = $factory->create($filename); 単に $data = ReaderFactory::createReader($filename); とせずインスタンスを作る利点は何なのでしょう?
- 117 名前:nobodyさん mailto:sage [2014/02/02(日) 18:13:08.61 ID:???]
- >>116
載ってるコードだけで完結させるならどっちでもいい。public staticにする必要はあるけど。 addとかdeleteとかメソッド作ったりしてクラスを改造していくならインスタンス作るほうが便利。
- 118 名前:nobodyさん mailto:sage [2014/02/02(日) 19:09:25.78 ID:???]
- 95 はテンプレートエンジンじゃないの
- 119 名前:114 mailto:sage [2014/02/02(日) 19:34:26.88 ID:???]
- >115
>multi は個別にエラーチェックしないと エラーメッセージは正確に出るのに 番号は出ない仕様なの? よければ、マニュアルに書いてあったら教えてください。
- 120 名前:nobodyさん mailto:sage [2014/02/02(日) 21:36:29.16 ID:???]
- >>166
create
- 121 名前:nobodyさん mailto:sage [2014/02/02(日) 21:37:01.14 ID:???]
- ぉん?
- 122 名前:nobodyさん mailto:sage [2014/02/02(日) 23:19:31.40 ID:???]
- >>166
依存性を小さくできる、パターンに従っていれば伝わりやすい、OO的に自然で理解に手間がかからない 上のファクトリは単純にStaticにしても動かない ファクトリはサブクラスにオブジェクト生成の詳細を任せるパターンだから、createReaderはオーバーライド前提になっている ReaderFactory::create()からサブクラスのcreateReader()を呼ぶのは、親にとって未知の子孫固有のメソッドを呼ぶこと そのためget_called_class()なり遅延束縛なりして実行時にstaticメソッドのバインド先を決定してやる必要があるという 謎設計に帰結する。遅延束縛がなかったころはさらに不自然だった。 OOPではクラスメソッドは(各インスタンスではなく)クラス自身の振る舞いを記述するものだと言っていいだろう コード上でメッセージをやりとりしてシステムを形成しているオブジェクト==インスタンスだとすれば、クラス自身は何か? この設定いかんによって、クラス固有のメソッドとして自然なものと不恰好なものを区別できる static張りまくって関数ポインタのかたまりを作る人もいし、それがよいケースもある しかし手続きからOOに入ってやりがちな、よくないstaticについてはstatic evilとかでぐぐれば情報はある
- 123 名前:122 mailto:sage [2014/02/02(日) 23:24:15.85 ID:???]
- つられたw
>>122は>>116へ
- 124 名前:nobodyさん mailto:sage [2014/02/03(月) 03:26:24.18 ID:???]
- 遅延束縛なかったら静的メソッドのユニットテスト糞になるからな
- 125 名前:nobodyさん mailto:sage [2014/02/09(日) 11:25:27.29 ID:???]
- php関数名って一貫性なさすぎだろ
一旦全部エイリアスにして新しいの付けるべき
- 126 名前:nobodyさん mailto:sage [2014/02/10(月) 01:52:41.55 ID:???]
- isset は is_set で有るべきだと思うんだ
- 127 名前:nobodyさん mailto:sage [2014/02/10(月) 03:44:49.98 ID:???]
- alias.phpでも作ってろ
- 128 名前:nobodyさん mailto:sage [2014/02/10(月) 09:41:58.22 ID:???]
- >>125
正しい名前でラップするには都合がいいだろう?
- 129 名前:nobodyさん [2014/02/11(火) 22:13:31.86 ID:ak6dJouy]
- OS XP
php ver 4 適切なスレが見つからなかったのですが、 phpでmysqlのテーブルから文字列を取ってきて表示させようとしたのですが、 半角パーセント記号を含む文字列において、パーセント記号が消え、次の文字が変な記号になってしまいます。 文字列中の%を\%などとしてみてもダメでした。 解決法を教えてください。
- 130 名前:「ガスライティング 集団ストーカー カルト」で検索を! [2014/02/11(火) 23:02:18.69 ID:lii3ZN0H]
- ★マインドコントロールの手法★
・沢山の人が偏った意見を一貫して支持する 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法 ・不利な質問をさせなくしたり、不利な質問には答えない、スルーする 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法 ↑マスコミや、カルトのネット工作員がやっていること TVなどが、偏った思想や考え方に染まっているフリや常識が通じないフリをする人間をよく出演させるのは、 カルトよりキチガイに見える人たちを作ることで批判の矛先をカルトから逸らすことが目的。 リアルでもネットでも、偽装左翼は自分たちの主張に理がないことをわかっているのでまともに議論をしようとしないのが特徴。 ,.,.,,
- 131 名前:nobodyさん mailto:sage [2014/02/12(水) 09:15:48.34 ID:???]
- >>129
php4か… 新規で学習中なら現在主流のphp5をおすすめします。 (できればOSも来年度以降サポートがあるものが(winでもLinでも)望ましい) mysqlではパーセント記号がワイルドカードとして扱われるからそれが影響してるのかも。 phpmyadminとかで取り出す前のデータが化けてないか確認してみるといいかも。 化けてるならinsertに問題あり。 化けてないならselectに問題あり。
- 132 名前:nobodyさん mailto:sage [2014/02/12(水) 10:53:26.54 ID:???]
- >>129
表示はどうやってるの? printf 使ってるなら、1番目は%sにして文字列は2番目で
- 133 名前:nobodyさん mailto:sage [2014/02/12(水) 11:57:19.74 ID:???]
- >>129
どの文字がどう変わるのか、もう少し具体的に言った方がアドバイスを 貰いやすいよ。
- 134 名前:nobodyさん mailto:sage [2014/02/12(水) 13:37:43.31 ID:???]
- >>129
base64というものがありまして。 抽出、表示を一気にやる前に、抽出したものをそのままログファイルなどに出力して確認してはどうだろう。
- 135 名前:nobodyさん mailto:sage [2014/02/12(水) 19:37:08.84 ID:???]
- ceil(7000*1.08)が7561になるのは仕様?
どうすれば7560って出せるの? 切り上げでね。
- 136 名前:nobodyさん mailto:sage [2014/02/12(水) 19:55:29.57 ID:???]
- >>135
>>1
- 137 名前:nobodyさん mailto:sage [2014/02/12(水) 21:41:24.51 ID:???]
- >>135
PHPのせいといいたいかもしれないけれど、小数がどう扱われるかを勉強したほうがいい。 何かと付きまとう問題なので。
- 138 名前:nobodyさん mailto:sage [2014/02/12(水) 21:51:04.93 ID:???]
- >>135
仕様 ceil(7000*108/100)とすればよい 消費税だろうけど、浮動小数点数型の丸め誤差は勉強した方がよいと思うよ
- 139 名前:nobodyさん [2014/02/12(水) 21:53:28.41 ID:rdsqA60A]
- この程度で丸め誤差とか致命的に腐ってるだろ
- 140 名前:nobodyさん mailto:sage [2014/02/12(水) 22:24:47.86 ID:???]
- >>139
腐ってない言語ってなにかあるのか?
- 141 名前:129 [2014/02/12(水) 22:44:26.79 ID:J2CtCpwd]
- 具体的には下の通りです。
ちなみに出力はflashでしています。 (flashが原因でないことは確認しています) 【テーブルの文字列】 フィールドdata2 「ダメージを50%カット。」 【php】 if(!$mysql->query("SELECT * from table")){ }else{ while($row=$mysql->fetch()){ $data=$data.$row["data1"].",".$row["data2"].","; } echo "data=".$data; 【出力結果】 ダメージを50?≪ット。
- 142 名前:nobodyさん mailto:sage [2014/02/12(水) 22:46:17.19 ID:???]
- すみません。phpの方コピペミスで"}"足りないです。
- 143 名前:nobodyさん mailto:sage [2014/02/12(水) 22:47:07.64 ID:???]
- >>139
Perl、Python、Ruby すべて 7561 になる。 これは1.08が2進数では循環小数になることが影響している。
- 144 名前:nobodyさん mailto:sage [2014/02/12(水) 22:54:42.67 ID:???]
- >>139はCOBOL以外は全部腐ってるって言いたいんだろ。
- 145 名前:nobodyさん mailto:sage [2014/02/12(水) 22:59:09.78 ID:???]
- >>129
insert時にミスってるように見える。 コマンドラインのmysqlで直接データ見たほうが良いと思う。
- 146 名前:nobodyさん mailto:sage [2014/02/12(水) 23:02:39.00 ID:???]
- Pythonならdecimal、RubyならBigDecimalがあるけど、PHPの場合は…gmp_*ぐらいしかないか
- 147 名前:nobodyさん mailto:sage [2014/02/12(水) 23:06:27.54 ID:???]
- >>145
テーブルの文字列は、phpmyadmin上で直接手打ちしました。 phpmyadmin上では正常に入力されているように見えます。
- 148 名前:nobodyさん mailto:sage [2014/02/12(水) 23:12:22.34 ID:???]
- >>146
文字列を使って小数点を扱うクラスとしてはdecimal便利だよね PHPは利用用途が多くないから実装されてないな
- 149 名前:nobodyさん mailto:sage [2014/02/12(水) 23:41:18.22 ID:???]
- >>139
レス乞食おつ。
- 150 名前:nobodyさん mailto:sage [2014/02/12(水) 23:45:37.82 ID:???]
- >>141
化けるのと同じくらい深刻なトラブルがあるんだけど、 data= が出力されてないよ。大丈夫なのかな。心配だよ。
- 151 名前:nobodyさん mailto:sage [2014/02/12(水) 23:59:12.57 ID:???]
- >>141
すみません。一応通常の動作は確認済みです。 ここに要点だけ書くためにいじったら変になってしまい。。 解決策が無いようであればおとなしく全角%にします。。。
- 152 名前:nobodyさん mailto:sage [2014/02/13(木) 00:47:36.04 ID:???]
- %がおかしなるのはエスケープ周りじゃないかなあ
文字コードも分からんし
- 153 名前:nobodyさん mailto:sage [2014/02/13(木) 00:57:57.07 ID:???]
- 要点だけ書くなら検証方法も要点にまとめてほしいもんだわ。
|

|