常见YII功能的基类?

时间:2012-11-20 08:29:35

标签: yii

我知道如何创建一个类,允许我实例化它并在我的项目中使用。我希望能够做的是没有实例化类的函数。例如,我知道如何做到这一点:

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

但我想要的是能够在任何视图中随时随地进行此操作,无论如何:

$val = convertToMyNotation($anotherval);

为了能够做到这一点,我会在哪里放置这些功能?

5 个答案:

答案 0 :(得分:3)

最好的方法,在components / Controller.php中创建一个公共函数

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

并通过

随处访问它
$this->globalFunction();

答案 1 :(得分:2)

您可以将静态方法定义为选项。

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

然后这样称呼它:

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

这不需要实例化要使用的对象。唯一的限制是您不能在静态方法中使用$this属性。

或者,只需定义一个包含函数的文件,并在早期的某个时刻包含文件,就像在public_html / index.php文件中的boostrap脚本中一样。

编辑:darkheir提出了一些很好的建议。在protected / components文件夹中包含这样的类,并使其扩展CComponent以获得一些可能有用的增强功能。

默认情况下,通过将类包含在protected / components文件夹中,您可以获得自动加载类的优势。

答案 2 :(得分:0)

你的答案没有明确的问题,这在很大程度上取决于函数的作用!

如果该功能正在执行特定于模型的某些操作    (获得最后的用户,...)这必须在用户模型中    Willem Renzema描述:

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();

如果函数是帮助程序:执行一些不执行的操作    依赖于模型或用户inoput然后你可以创建一个新的类    你将放入你的组件目录:

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

并且

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

答案 3 :(得分:0)

实际上,我认为你正在寻找这个答案: http://www.yiiframework.com/wiki/31/use-shortcut-functions-to-reduce-typing/

本质上,在您的输入脚本中,在加载Yii之前,请包含一个全局函数文件:

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

然后,该文件中定义的任何函数都可以用作快捷方式。小心,但享受力量! : - )

答案 4 :(得分:0)

创建类似

的内容
Class Core extends CApplicationComponent{

    public function doSomething(){}
}

并在config main.php中

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

现在您可以随时拨打电话

Yii::app()->core->doSomething();