0

クラスをインスタンス化してプロジェクト全体で使用できるようにするクラスを作成する方法を知っています。私ができるようにしたいのは、クラスをインスタンス化せずに関数を持つことです。たとえば、私はこれを行う方法を知っています:

$core = new core();
$val = $core->convertToMyNotation($anotherval);

しかし、私が望むのは、任意のビュー、クラスでこれをどこでも実行できるようにすることです。

$val = convertToMyNotation($anotherval);

それを可能にするために、これらの機能をどこに配置しますか?

4

5 に答える 5

3

それを行う最善の方法は、components/Controller.php にパブリック関数を作成することです。

public function globalFunction(){
 // do something here.
}

どこからでもアクセスできます

$this->globalFunction();
于 2012-11-20T08:56:49.527 に答える
2

オプションとして静的メソッドを定義できます。

class core{
    public static function convertToMyNotation($value){
        //do whatever here
        return $value;
    }
}

次に、次のように呼び出します。

$val = core::convertToMyNotation($anotherval);

これには、使用するオブジェクトのインスタンス化は必要ありません。$this唯一の制限は、静的メソッド内でプロパティを使用できないことです。

または、関数を含むファイルを定義し、そのファイルを public_html/index.php ファイルのブースト スクリプト内のように、早い段階でインクルードします。

編集: darkheir はいくつかの良い提案をします。そのようなクラスを protected/components フォルダーに含め、それを拡張CComponentして、潜在的に有用な拡張機能を取得します。

クラスを protected/components フォルダーに含めることにより、デフォルトでクラスを自動ロードするという利点が得られます。

于 2012-11-20T08:40:28.647 に答える
0

あなたの答えの決定的な質問はありません。関数が何をするかに大きく依存します!

関数がモデルに固有のいくつかのことを実行している場合 (最後のユーザーを取得するなど)、Willem Renzema が説明したように、これは User モデルに含まれている必要があります。

class theModelClass {
    public static function convertToMyNotation($value){
        //do whatever here
        return $value;
    }
}

そして、あなたはそれを次のように呼びます

$val = theModelClass::convertToMyNotation($anotherval);

関数がユーザー入力を処理している場合 (入力のサニタイズ、値のチェックなど)、コントローラーに移動する必要があり、Hemc ソリューションを使用します。

components/Controller.php にパブリック関数を作成します

public function globalFunction(){
 // do something here.
}

どこからでもアクセスできます

$this->globalFunction();

関数がヘルパーの場合: モデルやユーザー入力に依存しないいくつかのアクションを実行する場合、コンポーネント ディレクトリに配置する新しいクラスを作成できます。

class core extends CComponent{
    public static function convertToMyNotation($value){
        //do whatever here
        return $value;
    }
}

$val = core::convertToMyNotation($anotherval);
于 2012-11-20T09:51:13.473 に答える
0

次のようなものを作成します

Class Core extends CApplicationComponent{

    public function doSomething(){}
}

そして設定main.phpで

'components'=>array(
    'core'=>array(
        'class' => 'Core'
    ),
),

そして今、あなたはいつでも電話をかけることができます

Yii::app()->core->doSomething();
于 2013-02-21T19:51:45.553 に答える
0

実際、代わりにこの答えを探していると思います: http://www.yiiframework.com/wiki/31/use-shortcut-functions-to-reduce-typing/

要するに、エントリ スクリプトに、Yii をロードする前に、グローバル関数ファイルを含めます。

require('path/to/globals.php');

次に、そのファイルで定義されている任意の関数をショートカットとして使用できます。気をつけて、でもパワーを楽しみましょう!:-)

于 2012-11-20T21:31:35.923 に答える