トップページ⇒php
985コメント270KB

【PHP】フレームワークについて語るスレ13【総合】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/03/24(火) 01:21:08ID:???
PHPのフレームワークに関する話題用のスレッド

●国外産●
symfony
 ttp://www.symfony-project.com/
code igniter
 ttp://codeigniter.com/
Zend Framework
 ttp://framework.zend.com/manual/ja/index.html
CakePHP
 ttp://www.cakephp.org/
Yii Framework ←New!! (Dec 03, 2008)
 ttp://www.yiiframework.com/

●国産
ちいたん
 ttp://php.cheetan.net/
Ethna
 ttp://ethna.jp/
guesswork
 ttp://classic.guesswork.jp/
maple
 ttp://kunit.jp/maple/

●前スレ
【PHP】フレームワークについて語るスレ12【総合】
http://pc11.2ch.net/test/read.cgi/php/1229960175/
05775492009/09/06(日) 02:19:24ID:???
>>571
> 既存のDBアクセス周りをラップするクラスを作ればいいんじゃね?

DBの結果セットをmemcachedに移行するというアプローチは、
自分でやった時はうまくいかなかったなあ。
結局、ご指摘の通りにオンメモリにして逃げちゃった。

なので、簡単に後付けで移行出来る方法があるなら良いなぁと思ったし、
無いんでないかなーと>>549で言っちゃった。

>>573-576
東京なんちゃら対応のなんちゃらモジュールがCakePHPで動くらしいね。
Cakeはよくよく調べてみるとみんなで結構何とかしちゃってる感がある。
0578nobodyさん2009/09/06(日) 16:08:50ID:55qWNNES
チャットプログラム作ってって言われた。相手はシロートさん&レンタルサーバってコトで、PerlかPHPの二択にほぼ決定。
Perlは正直「使える」程度なんでPHPにしようと思うんだが、Pearを使わないでファイルコピーで設置完了することが可能なFWってあるかな?
一応SymfonyはSandbox使えば可能なのは知ってるが、流石に少々重たいかと思ってね。

・・・ま、「チャットごとき素のPHPで書けよ」ってのは御説ごもっともなんだがw、
どうもバリデータやHTML/SQLサニタイズを手で書くのは億劫になってね。
FWに慣れすぎたかもw
0579nobodyさん2009/09/06(日) 16:39:56ID:???
FWに慣れすぎた人の質問とは思えないw
0580nobodyさん2009/09/06(日) 16:53:37ID:???
もしかしてPEARしか触ったことないんじゃ?
0581nobodyさん2009/09/06(日) 16:54:07ID:???
>>578
いまどき PEAR 使う FW はない
簡単なプログラムなら CodeIgniter でいいんじゃない?
0582nobodyさん2009/09/06(日) 17:02:52ID:???
PEAR(笑)
smarty(笑)
0583nobodyさん2009/09/06(日) 17:13:23ID:???
ちいたんで萌え萌えチャットを(ry
0584nobodyさん2009/09/06(日) 17:41:33ID:???
>>578
ぜったい釣りだろ、お前w
0585nobodyさん2009/09/06(日) 17:53:04ID:???
あまりにもトンチンカンな PHP 知識。dankogai 疑惑。
0586nobodyさん2009/09/06(日) 17:53:38ID:???
lol
0587nobodyさん2009/09/06(日) 20:33:41ID:???
どうせ個人的に使うチャットだろうし
全部1クラスにまとめたようなレトロな作りにしても十分じゃね
FTPでアップロードして権限振ったらすぐ使えます、のほうがいいような相手なんでしょ

大体バリデーションつっても、入力文字の<>&あたり置換すりゃ早々問題なんて起きんだろうし
ログだってファイルにはいていいんじゃね、小一時間もありゃ書けるでしょ

つか、578の場合レンタルでも探したほうがいいんじゃねw
そっちのほうが間違いなく多機能で安全で優れてるとおもうぞ
0588nobodyさん2009/09/06(日) 20:54:55ID:???
>578
fitzgerald。本体が269行しかない。
ttp://www.moongift.jp/2009/06/fitzgerald/
バリデータは存在しないので自分で書かんといけないが。
一番面倒な、入力を一括してフィルタリングする機構はあるのでさほどの手間はない。

あと、エスケープ/サニタイズが面倒なのはお前が阿呆なだけ。
面倒ならエスケープしてからビューに渡す関数とか作れよ。
0589nobodyさん2009/09/06(日) 21:47:35ID:???
関数を作るのもめんどくせえー
0590nobodyさん2009/09/06(日) 22:56:49ID:???
まともなプログラマなら、小規模用の俺俺ライブラリくらい持ってるだろw
FWに慣れたっつーより、FWが無ければ何も出来ないの間違いじゃね?

正規表現とかもかけないんじゃね?w
0591nobodyさん2009/09/06(日) 23:09:44ID:???
「相手はシロートさん」にワロタ
おめーも大差ないですよっと
0592nobodyさん2009/09/06(日) 23:30:43ID:???
PHP使いにまともなプログラマっているの?
0593nobodyさん2009/09/06(日) 23:52:14ID:???
いるわけねーだろ
0594nobodyさん2009/09/06(日) 23:58:14ID:???
まともという言葉がどこをさすのかによるだろうな
0595nobodyさん2009/09/07(月) 00:25:40ID:???
何度目だよ
0596nobodyさん2009/09/07(月) 00:36:51ID:???
Regexクラスとかできちゃいそうだよね
0597nobodyさん2009/09/07(月) 02:36:55ID:???
まともなプログラマは言語に依存せず、要件に見合ったコードを書く
PHPかどうかは関係無いし、PHPにも職人クラスのPGはいる。


ただ勘違いした「シロートさん」比率が、他の言語より圧倒的に多いww
0598nobodyさん2009/09/07(月) 03:31:50ID:???
Pealのにわかプログラマに比べればまだマシだけどな
0599nobodyさん2009/09/07(月) 03:46:45ID:???
PHPはどうしても冗長だからな。
0600nobodyさん2009/09/07(月) 04:43:15ID:???
PHPは取っつきやすいからな。
で、上達するに連れ、言語仕様に不満が出てくる。
そして、他の言語へ移る。

Web用言語の登竜門みたいなもんだから、仕方ないべ。
今更Perlから入る人も少ないでしょうし。

グローバル関数をクラスライブラリ化して、型宣言もアリにして、
OO言語に生まれかわらんかな。

既存のグローバル関数で発生したエラーを例外処理化したライブラリはないかな?
0601nobodyさん2009/09/07(月) 05:04:58ID:???
WEBの基礎知識をすっ飛ばしちゃうから
登竜門としては Perl/CGI の方が良いと思うけどなぁ。

PHPから始めた人て、HTTP通信のバックエンドや、文字コードを理解して無い人が多いよね
multipartなPOSTデータをパースしたり、URLエンコード/デコードしたり、クッキーやセッションの仕組みを理解してなかったり、etc

バグが発生した時に、原因の切り分けが出来なくて困ってる人をよく見る。
0602nobodyさん2009/09/07(月) 05:20:04ID:???
それは言語関係ないと思うけどな

俺はPHPからだったけどWebカメラいじりたくてソケットから弄りだした
まぁその前がC/C++だったから、文字列の扱いが超簡単で楽だったなぁ
0603nobodyさん2009/09/07(月) 06:41:11ID:???
変数のスコープが関数単位だから、処理を局所化したコードの書き方が身につかない。
0604nobodyさん2009/09/07(月) 10:46:40ID:???
>>603
前半と後半のつながりがさっぱりわからん
0605nobodyさん2009/09/07(月) 10:53:21ID:???
PHPしか知らないとそうなる。
0606nobodyさん2009/09/07(月) 11:26:17ID:???
関数内でさらに局所かしたいってこと?
確かにできたほうがいいけど、関数をあまり巨大化させなければそれほど問題にならないのでは?
PHPのだめな所はもっと他にあるだろ
0607nobodyさん2009/09/07(月) 11:34:03ID:???
たぶん、複数の関連性の強い関数群と、それらの間だけで欲しいデータとかのこと言ってるんじゃ
ないかな、603は。
PHPだとそれらを別ファイル分けて書いて見通しだけは良くしても、結局includeだから同一ソース
ファイルに全部放り込んでるのと変わらん、データの独立性が…とか言いたいのかも。

まあ、クラス使えばいいと思うけど、そういうのは。
0608nobodyさん2009/09/07(月) 11:42:30ID:???
603はクラスも知らん子ということですか。
0609nobodyさん2009/09/07(月) 12:08:07ID:???
CやPerlと同じ。書き手の裁量が大きい。
つまり糞がかけば糞になる程度がやや大きい。

その程度の話なんだが言語やOSの話になると痛いのがわんさか沸いてくる。
0610nobodyさん2009/09/07(月) 18:10:57ID:???
みんな喧嘩すんなよ
0611nobodyさん2009/09/07(月) 19:14:09ID:???
スコープが関数単位なのって、PHPとJavaScriptぐらいなものなんだ。もっともJavaScriptですら新しいバージョンじゃブロックスコープになるが。
0612nobodyさん2009/09/07(月) 21:03:02ID:???
>>611
> スコープが関数単位
今まで知らなかったよ。
今までのいろんな謎が一気に解けた。ありがとう。
0613nobodyさん2009/09/07(月) 21:10:03ID:???
array array array array がめんどくさい
0614nobodyさん2009/09/07(月) 21:40:15ID:???
>>612
えっ?なんだと思ってたの?
0615nobodyさん2009/09/07(月) 23:23:59ID:???
>607がアホだという事は分かった。

俺も関数を短くするタイプだから、ブロックスコープはあまり必要性を感じないな。
ブロックの中が10行超えたら大抵メソッド化しちまうから特に困らん。
勿論ブロックスコープが悪いとは思わんが、初心者の学習コストを上げるほどのメリットを感じない。
0616nobodyさん2009/09/07(月) 23:26:06ID:???
ブロックスコープってそんなにいいの?何か効果が分かる例出して
0617nobodyさん2009/09/07(月) 23:40:34ID:???
行の長さに応じてメソッド化するとか意味不明すぎる
0618nobodyさん2009/09/07(月) 23:44:47ID:???
だいたい1メソッド20行超えるようだったら能毎分割できるだろう、
とかみたいな目安の話じゃろ。わりとよく聞く話だとおもうけど
0619nobodyさん2009/09/07(月) 23:57:18ID:???
むしろ、途中で変数宣言するとかの方がおかしいと思うのだが
全部関数の初めでやればいいじゃん。
0620nobodyさん2009/09/08(火) 00:02:55ID:???
それもなんだかなぁ
0621nobodyさん2009/09/08(火) 00:06:12ID:???
関数の最初に全部ってのは廃れたやり方だな
0622nobodyさん2009/09/08(火) 00:08:19ID:???
最初に宣言しないと用途わからなくなるくらい冗長ってことだしなぁ
0623nobodyさん2009/09/08(火) 00:11:52ID:???
>>621
そうなの?
じゃあ流行のやり方はどうなってんの?
0624nobodyさん2009/09/08(火) 00:23:20ID:???
>>623
自分は処理毎の先頭で纏めて初期化している。

意識して関数の先頭で全て宣言する事もあるけど、
あまりメリットを感じない。
0625nobodyさん2009/09/08(火) 00:31:02ID:???
途中で宣言するのは for文とか、カウント系だけかな
あとは全部頭で初期化してる
0626nobodyさん2009/09/08(火) 00:33:15ID:???
クラスプロパティとかは頭におくけど、
メソッド内のローカル変数なんて必要になったら宣言すりゃいいんじゃね
よほど長ったらしい関数とかを書くとかじゃない限り分けて宣言するメリットなくね
0627nobodyさん2009/09/08(火) 00:33:52ID:???
条件によって途中で関数を抜けるような場合は、頭で初期化してしまうと無駄な気分に・・・
宣言と初期化分ければそんなに気にならないけど、あまり意味は無い気もするし。


// $hoge を使わない場合がある。
function hoge()
{
$hoge = new Hoge();
if (xxxx) return;
$hoge->hogehoge();
}
0628nobodyさん2009/09/08(火) 00:41:51ID:???
普通はifとかwhileとかのブロックの中でしか使わない変数は、そのブロックの中で宣言するんだよ。
が、PHPの場合、関数の最初の方で宣言しとくのが分かりやすいと言えば分かりやすい。
が、そうすると変数名の衝突が起きやすいので、長い変数名を使わざるを得ない。よって、記述が冗長になる。
0629nobodyさん2009/09/08(火) 00:41:55ID:???
ブロックスコープ無いってことは、関数呼び出すときに変数を全部初期化してるんじゃないの?
何かそんな資料を昔見たようなうる覚え
0630nobodyさん2009/09/08(火) 00:42:18ID:???
お前らそろそろスレ違いに気付け
0631nobodyさん2009/09/08(火) 00:53:55ID:???
はぁい
0632nobodyさん2009/09/08(火) 00:57:15ID:???
全部グローバル変数にするのが一番かっこいい書き方
0633nobodyさん2009/09/08(火) 01:19:29ID:???
C言語って関数スコープだっけ? ブロックスコープだっけ?
0634nobodyさん2009/09/08(火) 01:27:39ID:???
Cはブロックスコープ
0635nobodyさん2009/09/08(火) 01:28:50ID:???
ググレカス。
0636nobodyさん2009/09/08(火) 08:10:48ID:???
全部関数の先頭で宣言するとか、VBじゃあるまいしw
0637nobodyさん2009/09/08(火) 08:46:05ID:???
このスレって、伸びてるなと思って覗いたら、フレームワークとは
全く関係ない話題で埋め尽くされてることが多いよな。
相応しいスレはいくらでもあるんだから、そっちでやれや。
0638nobodyさん2009/09/08(火) 08:57:46ID:???
そういやVBもブロックスコープじゃなくって、関数単位だったな。VB.NETはブロックスコープになったんだっけ。
0639nobodyさん2009/09/08(火) 11:39:27ID:???
>>611
>スコープが関数単位なのって、PHPとJavaScriptぐらいなものなんだ。?x2028;ダウト。
変数宣言のない言語はたいてい関数スコープ。PythonもRubyもそう。
06405782009/09/08(火) 12:25:14ID:???
お返事が遅くなって申し訳ない。
・・・まぁ、この流れはある程度想定の範囲内。
フツー、「んなもんスクラッチで書けよ」って思うよなw

>>587
相手についての考察は大体そのとおり。だからpear使いたくなかったんよ。
レンタルチャットでは多分無理。少なくともかなりのカスタマイズしないといけないんで、結局手間はあんまり変わらないと思われ。

>>588
これは知らなかった。ORマッパ無しというのもいいかも。
少し調べてみるっす。感謝>fitzgerald

エスケープ/サニタイズは、まぁPHPは結構便利な関数があるからそんなに面倒ではないんだけどね。
ま、>>578のとおり、そんなにがっちり組む必要もないんだし、
>大体バリデーションつっても、入力文字の<>&あたり置換すりゃ早々問題なんて起きんだろうし
>ログだってファイルにはいていいんじゃね、小一時間もありゃ書けるでしょ
でいいっちゃいいと思うんだがね。

>>590
あることぁあるが、PHP4の時代のヤツなんでねぇw>俺俺ライブラリ
ま、正規表現は確かに苦手だ。eregとpregでビミョーに違うのもややこしいしw
0641nobodyさん2009/09/08(火) 12:31:29ID:???
>>639
Rubyはブロックスコープだが。
0642nobodyさん2009/09/08(火) 18:43:17ID:???
どのフレームワークのコーディングがきれい?
0643nobodyさん2009/09/08(火) 19:28:03ID:???
>>642
好みが大きいと思うけど、標準的なPHPという点ではZFかな?
0644nobodyさん2009/09/08(火) 19:41:42ID:???
ZFはコーディング規約の為のFWと言っても過言では無いからなw
0645nobodyさん2009/09/08(火) 19:42:43ID:???
あぁ、クエリを弄れる人がいないのか
06466452009/09/08(火) 19:44:11ID:???
誤爆スマソ。
0647nobodyさん2009/09/09(水) 02:15:12ID:???
>>627
その例は設計が悪い
0648nobodyさん2009/09/09(水) 03:38:43ID:???
>>647
具体的に何が?割とよくあるコードだと思うけど?
return に限らず throw とかも含めてね。
0649nobodyさん2009/09/09(水) 04:07:50ID:???
使わないのなら関数で処理分けろよ
バグの温床じゃん
0650nobodyさん2009/09/09(水) 04:39:08ID:???
バリデーションとか含めるとどうしても >>627 みたいなコードは発生するよ。

A処理、B処理、C処理を連続して順番に処理する事を保証する場合、
内部的にメソッドを分けたとしても、PGに提供するメソッドは一つにするのが普通だろ。
その場合、途中の処理でこけた場合、どの処理でこけたかを判断する為に、return もしくは throw 等を使う。

それをしない方がバグの温床になると思うんだが・・・
0651nobodyさん2009/09/09(水) 04:49:10ID:???
変数の宣言とクラスの宣言を混同してる件について
0652nobodyさん2009/09/09(水) 04:55:14ID:???
ん?どこが?
0653nobodyさん2009/09/09(水) 05:02:31ID:???
あぁ >>651 は宣言と初期化の区別がつかないのかw

クラスの宣言ってのは、通常 class Hoge {} な構文を指す言葉だから誤用しないようにね。
0654nobodyさん2009/09/09(水) 05:02:56ID:???
宣言っつーか初期化だろ、Warningでるやつ

1ヶ月でログが20GB超えてたときは流石に吹いたわ
0655nobodyさん2009/09/09(水) 05:06:12ID:???
>>654
あるあるw と言いたいが、途中で気がつけよw
0656nobodyさん2009/09/09(水) 05:18:47ID:???
ローテーションして圧縮してたから、まったく気づかなかった
書庫の中身見てはじめて気づいたんだわ

写真とかアップロードするから、容量に関しては無頓着だったし
0657nobodyさん2009/09/09(水) 05:23:06ID:???
mooseのlazyみたいなのがあればいいんだけどな。
0658nobodyさん2009/09/09(水) 05:30:56ID:???
Mooseのlazyって、内部的にはどんな実装になってるの?
0659nobodyさん2009/09/09(水) 07:00:39ID:???
>>656
稼働前にdisplay_errorsオンにするなり、error_reportingなりでデバッグしないの?
活用しないログほど意味の無いものは無い。
0660nobodyさん2009/09/09(水) 08:27:51ID:???
お前らいい加減スレ違いに気付け
0661nobodyさん2009/09/09(水) 08:41:34ID:???
フレームワークに限らないPHP全般について、うだうだやるのに適切なスレはどこでしょうか。
0662nobodyさん2009/09/09(水) 09:08:54ID:???
くだ質か雑談あたりじゃね
0663nobodyさん2009/09/09(水) 17:32:08ID:???
フレームワークの設定ファイルってどんな感じがいいの?

・xmlとかでphpソースと別ファイルにする
・phpソースに定数とか連想配列で保存

0664nobodyさん2009/09/09(水) 17:34:01ID:???
どっちでも便利なほうでいいんじゃ?
0665nobodyさん2009/09/09(水) 18:14:09ID:???
>>663
YAMLいいよ、YAML
0666nobodyさん2009/09/09(水) 18:23:52ID:???
xmlよりは扱いやすいよね。
0667nobodyさん2009/09/09(水) 18:46:02ID:???
俺もYamlで別ファイル
06686632009/09/09(水) 18:55:08ID:???
YAMLですか。
勉強してきます。
0669nobodyさん2009/09/09(水) 21:36:02ID:???
そこでJSONですよ
0670nobodyさん2009/09/09(水) 23:12:42ID:???
JSON の IE 対策の最後の , が保守性低い
0671nobodyさん2009/09/09(水) 23:45:11ID:???
JSONはYAMLに比べたら人間が書きにくい。読みにくい。わかっていて言っているんだと思うけど。
以下のヤツは俺が使っている設定ファイル・・・を参考に書き直したもの。
ただのコメントが入った設定ファイルように見えるが、これがYAMLの文法なんだぜ。

# 各種プログラムのパス
bin:
 sendmail: '/usr/sbin/sendmail'
 nkf: '/usr/bin/nkf'

# テンポラリディレクトリ
tmp: '/tmp'

cache:
 # キャッシュディレクトリ
 dir: "/var/www/html/myapp/cache"

 # キャッシュの保持時間(秒)
 expires: 604800 # 1 week
0672nobodyさん2009/09/09(水) 23:47:08ID:???
YAMLの公式サイト
http://www.yaml.org/



↑YAMLで書かれていますw
0673nobodyさん2009/09/09(水) 23:52:12ID:???
そうか?YAMLだと空白とか訳分からんミスでエラーに
なったりする時があるから、JSONの方が好きなんだが。

プログラマならJSONの方が構造が直感的に分かると思うんだが。

一般人の理解しやすさは
YAML > JSON >>>>>>>>>>>>>> XML

プログラムからのいじりやすさは
JSON > YAML >>>>>>>>>>>>>> XML

という感じだと思うんだが。

あと記述する内容によって適したデータ形式があるから
プロジェクトごとに選択するしかないと思う。
0674nobodyさん2009/09/10(木) 00:02:10ID:???
俺としては一番理解しやすいのは ini なんだけど。
PHPの関数も用意されてるし
0675nobodyさん2009/09/10(木) 00:21:48ID:???
俺の場合JSも頻繁に触るから、確実に覚えているJSONの方が都合がいい
YAMLの可読性は素晴らしいとは思うけど、適度に記号入ってた方が好み
0676nobodyさん2009/09/10(木) 00:28:49ID:???
>>673
JSONにコメントないじゃん。

プログラムが受け渡すデータならJSONでいいけど、
人間が読み書きするならYAMLの方が良いよ。

あと必要ならデータ形式は変換すれば良いだけ。
■ このスレッドは過去ログ倉庫に格納されています