PHPの慣習的な書き方・組み方について

このQ&Aのポイント
  • PHPの慣習的な書き方や組み方について質問があります。
  • 変数宣言について、接頭辞を付けるべきかどうかについて知りたいです。
  • ファイルと関数のまとめ方や命名規則について教えてください。
回答を見る
  • ベストアンサー

PHPの慣習的な書き方・組み方について

PHPの面白さが分かってきて、コツコツ演習しているのですが、気になることが いくつかあるので質問しました。 問1 PHPは変数宣言をしなくていい、ということで驚いています。 でも、PHPプログラマーの方って、慣習的にどんな変数にしていますか? 接頭辞のようなものを付けているのでしょうか? たとえば、name とするよりも strName のほうが、なんとなく分かりやすいような気がします。 このあたりは、どうなのでしょうか? 問2 a.php b.php c.php という3つのファイル内では、同じ関数を使っているとします。こんなとき、それぞれのファイルに 同じ関数を書き込むよりも、ひとまとめにしたほうがいいと思います。 たとえば、function.php なんてファイルを作って、a.php、b.php、c.php の各ファイルの冒頭で、 include して、関数を使うたびに呼び出したほうが、読みやすくなると思いました。 なんでもかんでも、ひとつのファイルに書いてしまうと、メインの処理がどうなっているのか、分から なくなるので、このあたりは、慣習的にどんな書き方をしているのかなと思って質問しました。 問3 問2とややかぶりますが、入力チェックなども関数化して、別ファイルにまとめて記述するものでしょう か? そして、必要になったら呼び出してチェックする。このあたりは、どんな書き方をしていますか? 問4 自作の関数、ファイルの名付け方について。 自分で作った関数を命名する際に、f_ とか fun ではじまる接頭辞を付けるものでしょうか? 他者の書いたプログラムを参考にしていると、突然、知らない関数が出てきて、自作の関数だと気付く ことがあります(接頭辞が付いていれば、もっと早く気付いたと思います)。 また、php_editor なる便利なツールがあったので、使い始めたのですが、プロジェクト名やphpファイル、 関数ファイルのファイル名には、なんらかの規則性をもたせていますか? たとえば、プロジェクト名なら、pro と接頭辞をつけたりしますか? という質問です。 組み方が我流になる前に、実際に仕事で使っている方は、慣習的にどんな書き方をしているのか知りたいの ですが…。 よろしくおねがいします。

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

私は我流なのでプロジェクト内での運用はわかりませんが参考までに >PHPプログラマーの方って、慣習的にどんな変数にしていますか? 型がわからない変数であれば「ハンガリアン記法」が有効かもしれませんね ただ、必ずしも正しいとは言えないので、プロジェクトの方針次第だと思います。 http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%82%A2%E3%83%B3%E8%A8%98%E6%B3%95 個人でやる場合は覚えていられる範囲で適当につけて弊害はあまりないでしょう。 かくいう私もあまり気にせずに適当に命名しています。 むしろいい加減に見えるところがPHPの敷居をさげて間口を広げている利点ですから。 (逆にそのせいで初心者がぶちあたる壁もあるのですが・・・) >それぞれのファイルに >同じ関数を書き込む さすがにそれはないですね。 よく使うコマンドなどはcommon.phpなどを用意してクラス化するのが妥当でしょう。 >入力チェックなども関数化 ある程度標準化はできるでしょうけど、バリデート・サニタイズ関連は かなり個別ケースが多いので都度でチェック用関数を作る方がよいような気がします。 >突然、知らない関数が出てきて、自作の関数だと気付く これはあまり気にしないのがよいかと そもそも関数は宣言されているのが前提なので、プログラムの一部だけ切りだして 改変するならともかく、全体を見据えて行えばさほど問題にはなりません。 また標準関数はいずれにしても名前を覚えないと話にならないので しらない関数名がでてきたらマニュアルを参照すればユーザー関数と判断できます。 また統合ツールでユーザー関数の参照もできるものもあるし、エディタだって タグジャンプすればすぐですから むしろ命名方法としてはラクダ式(キャメルケース/パスカルケース)にするか アンダスコア式(スネークケース)にするかの統一とか、動詞-形容詞-名詞の 順番をどうするとか、ゲッタやセッタで接頭辞にget、setをつけるとか 当たり前のようなことの方が意外に統一されてないとみにくくなるので 注意が必要ですね。 一応公式にも最低限の提言がでています。 http://www.php.net/manual/ja/userlandnaming.php Zendだとこのへん http://www.zend.co.jp/tech/index.php?%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0%BB%D8%BF%CB あとはこのへんとか参考にしてください http://www.okapiproject.com/java/java_codeconventions/jcc_naming.htm

dv8hjkwf
質問者

お礼

長文回答ありがとうございました。 なるべく定石めいた名付け方や作り方をしたいものです。何度も使う関数は、別ファイルを作って呼び出すようにしました。 1歩前進できたような気がします。

その他の回答 (2)

回答No.3

ハンガリアン記法は現在ではオブジェクト指向との相性が悪いのであまり推奨されていないようです。オブジェクト指向プログラミングでの記法についてはMSDNの名前付けのガイドラインが参考になるとおもいます。 名前付けのガイドライン http://msdn.microsoft.com/ja-jp/library/cc433292%28v=vs.71%29.aspx 注目すべきは「メソッドの名前付けのガイドライン」と「プロパティの名前付けのガイドライン 」です。とりあえずメソッドが関数名、プロパティが変数名と考えていただければ結構です。

dv8hjkwf
質問者

お礼

ありがとうございます。メソッドとプロパティでは、なんとなく自分でも使い分けていました。

回答No.1

おっしゃるとおりですね。 自分の場合、チーム開発をする機会があまりないので、厳格なルールを持っていないのです。 後で自分が書いたはずのソースコードを解読できなくなっても困るので、ある程度の癖があります。 お恥ずかしい限りですが... 問1 混乱しそうなときだけ、接頭辞をつけたり、コメントを書いています。たいてい変数は「名詞」をそのまま使うことが多いです。 PHPを利用したたとえばPEARライブラリの開発では「コーディング規約」を設けています。 http://pear.php.net/manual/ja/standards.php 問2、3 自分はクラスを書いて、再利用可能な形にしています。 問4 自分の場合、接頭辞はつけませんが、「動詞+目的語」のような命名をすることが多いです。

dv8hjkwf
質問者

お礼

回答ありがとうございました。 意味のある名付け方をしているわけですね。変数の名付け方にしろ、ある程度、我流になってしまうのも仕方ないことかもしれませんね。 おおきく外さないように、回答を参考にしながら組んでいきたいと思いました。

関連するQ&A

  • dreamweaverCS4でPHPを作成する環境設定の仕方を教えてください

    dreamweaverCS4でPHPを作成する環境設定の仕方を教えてください。 環境はwindowsXP 、データベースソフトはSQLiteです。phpとApach2も導入済みです。 dreamweaverCS4でPHPを作成しようと思っているのですが、PHPファイルを作成しても「ブラウザでのプレビュー」がうまく実行されません。環境設定はどのようにすればよいのでしょうか?そもそもブラウザでプレビューできるのでしょうか? 設定は以下のようにしました。 「サイトの管理」→「詳細設定」→「テストサーバー」で、 サーバーモデルを「PHP MySQL」 ※私のソフトはSQLiteですがそもそも「PHP MySQL」を選択して大丈夫でしょうか? アクセスを「ローカル/ネットワーク」 テストサーバーフォルダには現在私が作成しているファイルがおいてあるフォルダを。 URL接頭辞はhttp://localhost/で設定しました。 すると「テストサーバーのサイトURL接頭辞[]は、サイトのHTTPアドレスで指定されたサイトURL接頭辞[/自分が作成しているフォルダ名]に一致しません。これによりサイトの相対リンクを使用するページが、実行時に正しく表示されない可能性があります。続行しますか?」 というのが出てきました。 ここの設定がうまくいかないからだと思うのですが、色々試しても解決できませんでした。 きちんと設定する方法をどなたか教えてください! 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHP ファイル操作

    PHP4を使用しているものです。 あるファイルのデータを変数にとりこんで 作業をおこなうロジックを教えてください。 変数に取り込むまででよろしいです。 そういった関数ありますか? よろしくお願いします。

    • 締切済み
    • PHP
  • PHP 掲示板記述

    現在、PHPで掲示板をメモ帳で作成しています。 今回は、よくよく分からないものを記載! PHPタグ================================= <?php // 保存するログファイル名 $LOGFILE = "log.txt"; … (1) // POST で mode = write の属性が送られていたら書き込み処理 if ($_POST["mode"] == "write") { … (2)   $name = $_POST["name"]; … (3)   $message = $_POST["message"];   $date = date("Y/m/d H:i:s"); … (4)   if (file_exists($LOGFILE)) { … (5)     $lines = file($LOGFILE); … (6)   }   $fp = fopen($LOGFILE,"w"); … (7)   fputs($fp,"$name,$message,$date\n"); … (8)   for ($i=0;$i<count($lines);$i++) { … (9)     fputs($fp,$lines[$i]); … (10)   }   fclose($fp); } ?> PHP 解説よくよく分からない=========== (1) では変数で説明した変数に保存するファイル名を指定しています。ファイル名は保存、読み込みのところで複数回つかうので使いまわしできるように変数に入れています。 (2) では前ページで説明した、 <input type="hidden" name="mode" value="write"> でフォームから送られる情報を $_POST["mode"] で受け取って、その値が "write" かどうかチェックしています。 「投稿する」ボタンを押してサーバに情報が送信される際に mode=write も送られていますので、それを if文で判定しています。通常のアクセスでは mode=write が送られないため、書き込み処理を行わないという感じです。 (3) では(2)同様、フォームから送られた name の情報を受け取って $name という変数に入れています。 (4) では現在の日付を取得しています。PHPには date 関数という代物があって簡単に現在の日付を取得できます。 (5) ではファイルが存在するかチェックしています。 file_exists関数でファイルが存在するか調べています。 (6) では file 関数によって配列にデータをすべて入れています。なぜここでデータを変数に入れるかというと、新しく投稿されたデータを1行目に書き込んで、残りに古い情報を書き込むためです。 なまえ,メッセージ,2005/02/06 なまえ,メッセージ,2005/02/06 なまえ,メッセージ,2005/02/06 青が新しく投稿された情報で赤が元々保存されていたふるい情報 (7) ではこれから書き込むのでfopen関数でファイルを書き込みモードで開いています。 (8) では開いたファイルにfputs関数で書き込んでいます。名前、メッセージ、日付をカンマ区切りで1行にしてファイルに書き込んでいます。 (9),(10) では古いファイルの情報(投稿前に書き込まれていた情報)を書き込んでいます。これを行わないと、新しく投稿された情報は書き込まれますが、古い情報が消えてしまうのでこの処理をしています。 PHPの解説でよくわからないので、お答えしてください。                                     ♪♪宜しくお願いします。♪♪

    • ベストアンサー
    • PHP
  • クラスのメンバー変数の書き方。

    クラスのメンバー変数の書き方。 クラスのメンバー変数を書くとき、以下の3つはどちらでも同じ動作をします。 ◆privateの場合、privateを明示的に書く or 書かない ◆null初期化の場合、= nullを明示的に書く or 書かない ◆メンバー変数名に接頭辞(mTextなど)をつける or つけない チームなどで書き方をどちらかに統一するとすれば、どちらに統一するのがいいと思いますか。 理由も含めて教えて下さい。 明示的に書くとJavaに不慣れな人にも分かりやすくて良いと思います。 書かないとタイプ数が減ってコーディングが若干楽です。 接頭辞はthisを書かなくていいのが楽なのですが、なんだか気持ち悪いです。 気持ち悪いのですが、デメリットは明確に説明できません。

    • ベストアンサー
    • Java
  • php 自作関数

    PHPでfunctionによって定義される関数を作っているのですが 引数なしで関数をつくることは可能なのでしょうか? 例えば function hello{ print "HelloPhp"; } 理想ではphp側でhello関数を呼び出せばHelloPhpと出力されます 実際の使い道は関数名が使い辛いので別の名前で関数名を定義したいんです 引数を与えてもいいのですがfunction側で引数が固定されるためphp側と毎回同じ変数:引数にならない 説明し辛いのですが 先ほど述べた理由で使いたいのですが、わかる方いらっしゃったらよろしくお願いします

    • 締切済み
    • PHP
  • phpのrequirについてe

    php初心者です。 同じような処理をまとめて、関数にしました。 debug中なので、function()ひとつに ひとつのphpファイル名をつけています。 あとで合体するつもりで。 当然、requireの数が複数になっていますが、requireの行(冒頭)でエラーになってしまいました。 echoで1行ずつ表示して確認しました。原因がわからず順番を変えたりpath指定を変更したりしたのですが、読み込んでくれません。 なので、処理直前で必要な関数を読み込むようにしたりもしたのですが 冒頭で require (dirname(__FILE__)."/include/******.inc"); require (dirname(__FILE__)."/include/******chk.php"); require (dirname(__FILE__)."/../include/******m.inc"); require (dirname(__FILE__)."/m******.php"); require (dirname(__FILE__)."/m******andom.php"); require (dirname(__FILE__)."/m******time_client.php"); require (dirname(__FILE__)."/error_******.php"); require (dirname(__FILE__)."/log******.php"); まではクリアできました。 (path指定が混ざってますがいろいろ試したので。。。) で、ある関数を呼ぶ直前に require (dirname(__FILE__)."/lfunc*****.php"); としたのですが /lfunc*****.php に飛ばないんです。 (echoが出ない) こういうのはどのような原因があるのでしょうか? ちょっと思ったのですが、何か重複してるのでしょうか? 似たような変数名が多くなってますが、requireした中のfunctionの中なら 別の変数として扱われますよね? 一応構文チェックなどはちゃんと no シンタックスエラーを確認しています。 ログにもかかれないし。 すみません、php初心者にアドバイスお願いします。

    • ベストアンサー
    • PHP
  • おすすめのPHPのエディタは?

    表題の通り、PHPのエディタを探しています。 条件としては・・・ ●エクリプスとPHP Editorは却下  (エクリプスは重い。  PHP Editor は、なぜかバグって、ファイルを開いても空白だったり、ほかにも不思議な挙動をするので。。。) ●フリーウェアであること ●英語のソフトでもいいが、DB内のデータに日本語を入れても問題ないこと ●grepができること ○できれば、正規表現をつかったgrepもできるとうれしい ○できれば、関数や変数などを、単語補完(?)してほしいです。   たとえば「fop」とかいたら「fopen」という選択肢がでてくるような。  (Linuxで「da」を書いてタブキーを押すと「date」に変換してくれるみたいな。) ○できれな、関数/変数/クラスを一覧表示させたい ○できれば、PHPの構文チェックをしてほしい。 ○できれば、自分のつかってるPHPのバージョンが「5.1.6」なので、これらに対応してハイライトなどしてほしい  (たとえば5.1から採用されたPDO関連とか) こんなかんじです。 ちょっとでもオススメなら、お教えいただけないでしょうか? 実際にそれぞれ試して決めたいと思います。 以上、よろしくお願いいたします。 p.s. ちなみに、秀丸のマクロでそういうことやってる人はいるでしょうか? もしそういう方がいらっしゃるなら、それも候補として考えます。

    • ベストアンサー
    • PHP
  • javascript変数をPHP変数に渡し,またjavascript変数に渡すには?

    javascriptの変数を、PHP記述のPHP変数に渡し、 またjavascript変数に渡したいのですが、 何か良い方法はありますか? つまり、javascriptに無さそうな関数なので、 PHPで用意されている関数(mb_convert_encoding) を使い、またjavascriptの変数に戻してやりたいのです。 ご存知の方がいましたら、ご教授下さいませ。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPのフレームワークについて

    くだらない質問かも知れませんがどうかお付き合いください。 宜しくお願いします。 10年前にPHPでプログラムを書いた事があり、急遽PHPで開発をしなくてはいけなくなりました。 そこでフレームワーク(CakePHP等)を使用した方がいいのかを調査していますが・・・ お恥ずかしい話なんですがよくわかりませんでした。 私が作成していた時はインクルードファイル(変数や関数等)を作成して、それをPHPファイル内で呼びだしてプログラムを作成していました。 今回、フレームワークをネットで閲覧しても「簡単にできる」みたいな記事を目にしたりします。 ちょっといじってみましたが難しいというか、面倒くさい感じがしました。 わたしだけでしょうか。 些細な事でも何でも構いませんのでアドバイスいただけませんでしょうか。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPの自作関数がよくわかりません

    同じ処理をするときに関数を作ればソースが短くなるのだろうと思うのですがいまいち分かりません。 phpでユーザー登録の確認画面を作っていまして、名前やメールアドレス等によって、POSTの部分と変数が違うだけでほぼ一緒ですので、関数化できないかと考えています。 自作関数事態がよくわかっていません。アドバイスお願い致します if(isset($_POST['fname'])){ $fname=$_POST['fname']; } else{ $fname=""; }

    • ベストアンサー
    • PHP