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 文件中的 boostrap 脚本中。

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

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

于 2012-11-20T08:40:28.647 回答
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();

如果该函数是一个 Helper:执行一些不依赖于模型或用户输入的操作,那么您可以创建一个新类,您将把它放在您的组件目录中:

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

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

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

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

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

于 2012-11-20T21:31:35.923 回答
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 回答