11

私は今CodeIgniterで遊んでいます。また、学習に利用できるユーザーガイドやその他のサードパーティのチュートリアルを使用しています. 私はプライベート関数の命名に少しこだわっています。ユーザー ガイドに基づいて、_プライベート関数の名前にプレフィックス a を付ける必要があります。ただし、このチュートリアルでは、[ログアウトの追加] セクションを確認してください。その中には、プライベート関数があります: private function check_isvalidated(). ここでは、文字の接頭辞は付けていません_

それも受け入れられている命名規則ですか?同時に、 Processing Output という別のものが_output()あります。これは、プライベート関数の命名規則を持つパブリック関数です!

体系的に学ぼうとすると、少し混乱します。

4

2 に答える 2

32

_プレフィックスは、 で定義されている関数の規則ですCONTROLLER

ユーザーガイドには次のように書かれています。

場合によっては、パブリック アクセスから特定の機能を隠したい場合があります。関数を非公開にするには、名前のプレフィックスとしてアンダースコアを追加するだけで、URL リクエスト経由で提供されなくなります。

http://www.codeigniter.com/user_guide/general/controllers.html#private-methods

を追加する_ことは、ユーザーが直接呼び出すことができないコントローラー (コントローラーのみ) で関数を宣言する CodeIgniter 独自の方法です。

  • Controller関数は URL の一部にマップされます ( controller/function)
  • コントローラーに、URL にマップしてはならない関数があります

    - they are declared as `private` (available since PHP5)
    OR
    - their names start with `_` (works also for PHP4)
    

関数に関して_outputは public ですが、 が含まれているため直接呼び出すことはできません_

なぜ公立なの?

関数はシステムによって呼び出されるため、クラスの外部からアクセスできる必要があり、プライベート関数ではありません。ただし、_URL経由で呼び出されないようにするために含まれています。

要約すると、URL を介して直接呼び出されたくない関数がコントローラーにある場合は、_プレフィックスを追加するか、privateアクセス演算子を使用します。どちらか一つで十分です。

参考までに、Yii や Zend フレームワークなどの他のフレームワークはaction、URL を介して呼び出すことができる (マップされる) すべてのコントローラー関数にプレフィックスを使用します。

于 2012-04-22T08:35:15.877 に答える
4

ユーザーガイドには、コントローラー内のプライベート関数の関数名の前にアンダースコアを付ける必要があると書かれていますが、必須ではありません。ただし、規則に従うことは良い考えであり、そうすることをお勧めします。

アクセス修飾子がpublic. この場合、URL 経由で関数にアクセスしようとすると、404エラーが発生します。ただし、その場合、アクセス修飾子を設定しprivateても、関数名の前にアンダースコアを付けるかどうかは問題ではありません。

ただし、このチュートリアルでは、[ログアウトの追加] セクションを確認してください。その中には、プライベート関数があります: プライベート関数 check_isvalidated()。ここでは、文字 _ を前に付けていません。

そのチュートリアルでは、関数名の前にアンダースコアが付けられていませんが、プライベート関数であると宣言されているためです。したがって、URL 経由でアクセスしようとしても機能しません。

同時に、_output() と呼ばれる別のものがあります: Processing Output。これは、プライベート関数の命名規則を使用したパブリック関数です!

_output()これについては既に説明しましたが、この関数は、スクリプト実行中の特定の時点で呼び出される特別な関数の 1 つであることを指摘しておきます。この場合、CodeIgniter は関数の最後で、ブラウザに何かを出力するときにこの関数を呼び出します。

于 2012-04-22T08:41:55.653 に答える