• ベストアンサー

PHPのクラス名の付け方

PHPを勉強中です。 タイトルのとおり、クラス名の付け方をどのようにしたらよいでしょうか? ネットで探しても、いい案がないようです。 Javaでは、ドメイン名を逆にしてパッケージをつけます。 これで世界中でユニークになります。 例えばユーザ情報のクラスということでUserとクラス名をすると、 他の人が作ったクラス名と衝突する恐れがあります。 これを回避するのにクラス名のルールがありますでしょうか?

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

  • ベストアンサー
  • inoue_kou
  • ベストアンサー率57% (27/47)
回答No.1

PEARの標準コーディング規約などを参考にしたらどうでしょう? http://pear.php.net/manual/ja/coding-standards.php Zend Framework PHP 標準コーディング規約というのもあります。 http://framework.zend.com/manual/ja/coding-standard.html

zamegazumi
質問者

お礼

参照しました。 ==== クラスには、内容が理解できるような名前を指定するべきです。 略語の使用は 可能なかぎり避けます。 クラス名は、常に大文字で始めるべきです。 PEAR ク ラス階層は、クラス名にも反映され、各階層レベルは、 アンダースコアで区切 られます。良いクラス名の例を以下に示します。 ==== ==== Zend Framework では、クラスの名前が保存先ディレクトリに直接対応するよう な 命名規約を採用しています。ZF 標準ライブラリの最上位レベルのディレクト リは "Zend/" ディレクトリです。一方、ZF 追加ライブラリの最上位レベルのデ ィレクトリは "ZendX/" ディレクトリです。この配下に、すべてのクラスが階層 構造で保存されます。 ==== Javaでの考え方と同じですね。 #拡張ライブラリではjavaxとxをつけるところまで同じ。 適切なご回答、ありがとうございました。 自分のドメインを持っていますので、ドメインと機能分類をつけてクラス名にします。 #ただ勉強し始めたばかりなので、今のところは、このようにきちんとクラス名をつける必要もないのですが....。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHP4、PHP5 1ファイル複数クラスのルール 

    とあるPHP4で書かれたスクリプトを見ていたら、1つのファイルに複数のクラスが書いてありました。 1つのファイルに1つのクラスを推奨という記述は見かけるのですが、 PHPの仕様としてはどんな感じになっているのでしょうか? 「javaで同一ファイル内にpublicなクラスを複数作成できない」てのを見かけたのですが、PHPにはこんなルールはあるのでしょうか? また1ファイル複数クラスの記述に関して、PHP4とPHP5で、違いがあれば 知りたいです

    • ベストアンサー
    • PHP
  • クラス名やモジュール名の競合について

    プログラミング言語のRubyでプログラムを作っていて疑問に思った事がありますので どなたかご存知の方が居れば教えてください。 Rubyにおいては同じクラス名やモジュール名であっても モジュール内に対象クラスやモジュールを定義する事で 「モジュール名::クラス名」等と言う参照が可能になっていますよね そこで気になったのですが、同名のクラスAとモジュールAがある場合に (つまりクラスAの名前=モジュールAの名前) class モジュールA::クラスB  # コンストラクタ  def initialize   @prop = クラスA.new  end end 等と記述すると、コンストラクタの内部の記述において クラスAの名前とモジュールAの名前が競合するので、クラスBの生成時にエラーが発生します。 この様なケースにおいて、コンストラクタの内部でクラスAのインスタンスを 正しく生成する方法はあるのでしょうか? 勿論前提として、クラスAは他のモジュールに含まれたクラスではありません。 Javaの様にパッケージ概念があって、全てのクラスについて何らかのパッケージに所属している等の 仕組みが無いので、時々この様な命名をしてしまい困る事があるので この様なケースを回避する方法についてご存知の方が居れば、教授ください。 よろしくお願いします。

  • クラス名はどうするのですか?

    package ex7; public class Sample { public final static int VALUE = 100; } package ex7; import static ex7.Sample.VALUE; public class Main { private final static int VALUE = 0; public static void main(String[] args) { System.out.println(VALUE); } } 上記のプログラムのクラス名は何をつければいいですか・・・? 同じくプログラム名は何と付ければいいですか・・・? ご多忙中恐れいります・・・。 ご回答の程宜しくお願い申し上げます。 回答者 これが、素人さんには分かりにくいんですね。 mkdir ex7 で、ex7 というディレクトリを作製して、 その中に、 Sample.java を public class Sample { public final static int VALUE = 100; } で、 Main.java を package ex7; import static ex7.Sample.VALUE; public class Main { private final static int VALUE = 0; public static void main(String[] args) { System.out.println(VALUE); } } で作製して、 ex7 の中から出て、 javac ex7/Sample.java javac ex7/Main.java でコンパイルします。 質問者 度々すいません・・・。 ファイル名は何にすればいいですか・・・? ご回答がなかなか来ません。

    • ベストアンサー
    • Java
  • パッケージ化されたクラスより変数を読む

    パッケージ宣言されたクラスから配列変数を読み出す場合、どのように記述すればいいのでしょうか。 ファイル名 Pack.java パッケージ名 package firstPack; クラス定義 public class Pack {   String [] test = {"あ","い","う","え","お"} } ↑これを、TestPack.java から test の内容を 呼び出す場合。よろしくお願いします。

    • ベストアンサー
    • Java
  • 配列クラスのクラス名

    配列クラスのクラス名 配列クラスのクラス名を教えてください。 配列はクラスですよね。そこまでは分かります。 こんなコードを実行しましたが System.out.println((new int[0]).getClass()); System.out.println((new boolean[0]).getClass()); System.out.println((new String[0]).getClass()); System.out.println((new Integer[0]).getClass()); 親切にこのような結果を出力してくれます。 class [I class [Z class [Ljava.lang.String; class [Ljava.lang.Integer; 結果として配列が何というクラスなのかは分かりません。 (もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?) 昔Javaのソースを読んだときに、配列クラスのファイルも 読んだことがあるような気がするのですが、 なんと言うクラスだったか忘れてしまいました。 パッケージ名+クラス名を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • クラス名正しいのにNoClassDefFound:

    TomcatとEclipseでwebアプリ開発を勉強している者です。 jspに持っていく前に、主要なメソッドがちゃんと動作するかどうかをテストしていましたら、 以下のように、コンパイルは出来ても実行時のコマンド結果が上手くいかず、さらに(2)のコマンド結果にも腑に落ちず、とても困ってます。。 以下が問題のコードの構成です。 ・FavoriteSearch.java package mangasearch; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.*; class FavoriteSearch{ public static void main(String[] args) throws IOException{ //メインメソッド } 《コンパイル時》 C:\tomcat7\webapps\mangasearch\WEB-INF\src\mangasearch>javac -classpath C:\tomca t7\webapps\mangasearch\WEB-INF\src FavoriteSearch.java →成功 実行時 (1)C:\tomcat7\webapps\mangasearch\WEB-INF\src>java -classpath C:\tomcat7\webapps\ma ngasearch\WEB-INF\src mangasearch\FavoriteSearch ↓ Exception in thread "main" java.lang.NoClassDefFoundError: mangasearch\FavoriteS earch (wrong name: mangasearch/FavoriteSearch) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 【コマンドの動機】 ・パッケージを宣言しているので、カレントディレクトリをFavoriteSearch.classがあるディレクトリより階層をひとつ上にする。 ・mangasearchパッケージをsrcフォルダから探させる。 ・パッケージ名をクラス名の前に\をつけ、添える。 参考サイト http://javafaq.jp/S003.html でjava.lang.NoClassDefFoundError:については調べたのですが、クラス名もあっていますし、どうしてこのようなエラーが出るのかが分かりません。。 (2)C:\tomcat7\webapps\mangasearch\WEB-INF\src\mangasearch>java -classpath C:\tomcat 7\webapps\mangasearch\WEB-INF\src FavoriteSearch ↓ エラー: メイン・クラスFavoriteSearchが見つからなかったかロードできませんでした 【コマンドの動機】 ・カレントディレクトリにコンパイルしたFavoriteSearch.classがある。 ・mangasearchパッケージをsrcフォルダから探させる。 (2)は恐らく結果的に(1)以前の問題だと思われるのですが、どこが問題なのかイマイチ分かりません。。 稚拙な質問かとは思いますが、ご教授のほど、よろしくお願いいたします。 -参考- 階層図(概略)は以下のようになります。 ■tomcat7 |-■mangasearch(プロジェクトフォルダ) |-■bin |-■src |-■work |-■engine |-■WEB-INF     |-■classes     | |-■mangasearch(パッケージフォルダ) | → Manga.class / MangaMgr.class     |-■lib     |-■src        |-■mangasearch(パッケージフォルダ)          → FavoriteSearch.java / FavoriteSearch.class /Manga.java / TagSearch.java /  *今はテストとしてコマンドプロンプト上でコンパイル・実行をしていますのでsrcフォルダに便宜上FavoriteSearch.classがあります。

    • ベストアンサー
    • Java
  • PHPの名前空間について

    PHP5.3~からの名前空間について質問です。 この名前空間、私は最初JAVAやPerlなどのクラスやパッケージ的な動き・・・・・つまり 実際にディレクトリに分けて分割して管理するようなものだと思っていたのですが foo/bar/hoge.java import foo.bar; で実際に new foo.bar.hoge.(); としないといけない箇所を new hoge(); だけで処理できるという動き・・・。 perlでもパッケージやクラスなんかは似たような動きですよね? でもPHPの名前空間は、ディレクトリにわけたりしないようなのですが、 これは、意味があるのでしょうか? PHPの場合はただ、関数やクラスに別名をつけれるだけですか? 特に、必要とは思えないのですが 識者の方ご教授下さい。

    • ベストアンサー
    • PHP
  • 同一パッケージにあるクラスが見つからないエラー

    Tomcatとeclipseを用いてjspによるウェブアプリ開発の勉強をしているものです。 tagsrch.java内のメソッドに、同一パッケージ(フォルダ名:mangasearch)内のmangalist.javaで定義したmangaクラスというクラスを使いたいのですが、以下のように、シンボルが見つけられないというエラーが出てしまいます。 C:\(中略)\mangasearch>javac tagsrch.java tagsrch.java:11: エラー: シンボルを見つけられません public static List<manga> searchByKey(String k[]) throws IOException{ ^ シンボル: クラス manga 場所: クラス tagsrch tagsrch.java:14: エラー: シンボルを見つけられません manga[] list = new manga[cnum]; 同一パッケージ内に置かれている以上、tagsrch.javaにおいてmangaクラスが使えるはずだと思います。 ですが、いろいろなサイトを参考にして試してもmangaクラスが見つからないまま、tagsrch.javaがコンパイルできません。 初歩的質問で申し訳ありませんが、よろしくお願いいたします。 -参考- 1.いろいろ試したこと  1-1.カレントディレクトリを保存している場所より1つ上の場所でコンパイルする。  eclipseでtomcatプロジェクトを作成したため、どのクラスファイルにもpackage mangasearch;が含まれていました。なので1-1.を行い「javac パッケージ名/ファイル名」でコンパイルしてみました。  1-2.クラスパスを入れてコンパイルしてみる。  同一パッケージ内なので、この必要はないはずですが、  C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。   下記のURLを参考にこの対策を講じましたが、エラーは変わりませんでした。  1-1.1-2.の参考URL:http://okwave.jp/qa/q2520327.html  1-3.メソッドをmangalist.java(mangaクラス)上で定義してしまう。  分割をあきらめ、tagsrch.java上のメソッドをmangalist.javaのmangaクラス上に定義してみました。 publicつけたままだと、 C:\(中略)\mangasearch>javac mangalist.java mangalist.java:76: エラー: クラスtagsrchはpublicであり、ファイルtagsrch.javaで宣 言する必要があります となったため、publicをとりました。するとコンパイルは出来ましたが、おそらく異なるパッケージからは使えないクラスとなったため、jsp上でアクセスできないというエラーが発生しました。 org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.IllegalAccessError: mangasearch/tagsrch このため、分割してtagsrch.javaを宣言する必要があり、1-3.の対策では最初にあげたmangaクラスを認識する問題に帰着すると思われます。 2.mangalist.java/tagsrch.javaについて mangalist.javaのコンパイルはできています。 mangalist.javaは、ただ単にmangaクラスとそれに付随するフィールド、コンストラクタを記述しただけのファイルです。 ■mangalist.java package mangasearch; class manga{ フィールド名 ・・・    manga(){    //コンストラクタ    } } ■tagsrch.java public class tagsrch extends manga{ メソッド{     } }

    • ベストアンサー
    • Java
  • メソッド宣言の戻り値の型にクラス名を使うには?

    メソッドの戻り値の型にクラス名を使ってるプログラムを見かけたのですが、例えばクラス名を public class Player{ とします。そして Playerクラスのメソッド宣言に  private   Player(戻り値の型) startRun(メソッド名) { とあります。 これは戻り値の型にクラス型の変数を使ってユーザー定義してると思うのですが使い方が分かりません。 javaのサイトはできるだけ調べたのですが戻り値の型にクラス名を使うにはどうすればいいか分かりませんでした。 この使い方を教えてくれるサイトを教えてください。 基本型と参照型のStringクラスについて教えてくれるサイトはたくさん見かけたのですが…。 お願いします。

    • ベストアンサー
    • Java
  • postfix 受信時 php スクリプト実行

    ※一部、ドメイン名が隠れてなかったので再度投稿しました。 【環境】 os: freebsd 8.4 php: 5.4.13 postfix:2.9.5 メールの送受信はエラーなくできています。 【やりたいこと】 メール受信時にPHPスクリプトを実行したい!(メールでブログ上げたい!!!!) 【困っていること】 メールログみると、PHPが実行されずに”転送”しようとしている。 <maillog> Jan 22 23:42:31 postfix/qmgr[36840]: from=<送信元>, size=38495, nrcpt=1 (queue active) Jan 22 23:42:31 postfix/virtual[36877]: to=<|php /usr/home/ユーザー名/htdocs/実行したい.php@ドメイン>, orig_to=<送信先>, relay=virtual, delay=0.32, delays=0.31/0/0/0, dsn=5.1.1, status=bounced (unknown user: "|php /usr/home/ユーザー名/htdocs/実行したい.php@ドメイン") ※なぜか PHP 実行したいのに、PHPのパスのあとに@ドメインが! このアドレスはあるわけないので送信元にエラーメールが戻ってきたのでした。 <エラーメール> Undelivered Mail Returned to Sender 中略 <"|php /usr/home/ユーザー名/htdocs/実行したい.php"@ドメイン> (expanded from <送信先>): unknown user: "|php /usr/home/ユーザー名/htdocs/実行したい.php@ドメイン" 【試したこと】 バーチャルメールボックスなので virtual_alias_maps(ファイル名:/usr/local/etc/postfix/virtual_alias) に 下記を記述しました。 blog@ドメイン  | "/usr/local/bin/php /usr/home/ユーザー名/htdocs/実行したい.php" そして、 postmap /usr/local/etc/postfix/virtual_alias として、postfix stop → postfix start してメールを送信すると、上記エラーに…。 ※blog@ドメイン までをバーチャルなユーザー名にしています。 (バーチャルドメインで現在2ドメイン運用しています。今回の「blog@ドメイン」というのはサーバのユーザーにはいなくてvirtual_mailbox_mapsに登録しているバーチャルなユーザーです。) バーチャルなユーザーは ユーザーID:グループID を 5000:5000 としています。 実行したい.php は 持ち主 5000:5000 で、 パーミッション 744 です。 また、このPHPはファイルの書き込みをします。 書きこみ対象のフォルダのパーミッションは777にしてあります。 (持ち主はwww:www になっています) あとで調べてみたらmain.cf の default_privs という項目が気になったので サーバーのユーザーを指定してPHPもそのユーザーのものにしましたが 結果、なんらかわらなかったので元に戻しました…。

PCが固まる
このQ&Aのポイント
  • PC-N1575AAWの固まりに関するお困りごとについて質問させていただきます。ご利用の製品のタイプ・製品名・型番、接続方法、お困りの詳細や表示される内容について教えてください。
  • PC-N1575AAWで画面が固まる問題について質問させていただきます。お困りの詳細や使用中の機器の状況、表示される内容などを教えてください。
  • PC-N1575AAWの画面が固まるトラブルについて質問させていただきます。ご利用の製品のタイプ・製品名・型番、接続方法、お困りの詳細や表示される内容について教えてください。
回答を見る