通用YII函数的基类?

通用YII函数的基类?,yii,Yii,我知道如何创建一个类,它将允许我实例化它并在整个项目中使用。我想做的是在没有实例化类的情况下拥有函数。例如,我知道如何做到这一点: $core = new core(); $val = $core->convertToMyNotation($anotherval); 但我想要的是能够在任何视图、任何类别的任何位置执行此操作: $val = convertToMyNotation($anotherval); 要做到这一点,我将把这些函数放在哪里?您可以将静态方法定义为一个选项 class

我知道如何创建一个类,它将允许我实例化它并在整个项目中使用。我想做的是在没有实例化类的情况下拥有函数。例如,我知道如何做到这一点:

$core = new core();
$val = $core->convertToMyNotation($anotherval);
但我想要的是能够在任何视图、任何类别的任何位置执行此操作:

$val = convertToMyNotation($anotherval);

要做到这一点,我将把这些函数放在哪里?

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

class core{
    public static function convertToMyNotation($value){
        //do whatever here
        return $value;
    }
}
那么就这样称呼它:

$val = core::convertToMyNotation($anotherval);
这不需要实例化要使用的对象。唯一的限制是不能在静态方法中使用
$this
属性

或者,只需定义一个包含函数的文件,并在某个时候将该文件包含在public_html/index.php文件中的boostrap脚本中

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


通过将该类包括在protected/components文件夹中,默认情况下可以自动加载该类。

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

class core{
    public static function convertToMyNotation($value){
        //do whatever here
        return $value;
    }
}
那么就这样称呼它:

$val = core::convertToMyNotation($anotherval);
这不需要实例化要使用的对象。唯一的限制是不能在静态方法中使用
$this
属性

或者,只需定义一个包含函数的文件,并在某个时候将该文件包含在public_html/index.php文件中的boostrap脚本中

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


通过将该类包含在protected/components文件夹中,默认情况下可以自动加载该类。

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

public function globalFunction(){
 // do something here.
}
public function globalFunction(){
 // do something here.
}
并且可以在任何地方通过

$this->globalFunction();
$this->globalFunction();

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

public function globalFunction(){
 // do something here.
}
public function globalFunction(){
 // do something here.
}
并且可以在任何地方通过

$this->globalFunction();
$this->globalFunction();

你的答案没有明确的问题,这在很大程度上取决于函数将要做什么

如果函数正在执行特定于模型的某些操作 (获取最后一个用户…)这必须在用户模型中作为 威廉·伦泽马描述:

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.
}
public function globalFunction(){
 // do something here.
}
并且可以在任何地方通过

$this->globalFunction();
$this->globalFunction();
如果函数是助手:执行一些不需要的操作 依赖于模型或用户输入,然后您可以创建一个新类 您将在组件目录中放置:

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


你的答案没有明确的问题,这在很大程度上取决于函数将要做什么

如果函数正在执行特定于模型的某些操作 (获取最后一个用户…)这必须在用户模型中作为 威廉·伦泽马描述:

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.
}
public function globalFunction(){
 // do something here.
}
并且可以在任何地方通过

$this->globalFunction();
$this->globalFunction();
如果函数是助手:执行一些不需要的操作 依赖于模型或用户输入,然后您可以创建一个新类 您将在组件目录中放置:

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


事实上,我认为你在寻找这个答案:

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

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

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

事实上,我认为你在寻找这个答案:

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

require('path/to/globals.php');
然后,该文件中定义的任何函数都可以用作快捷方式。小心,但要享受权力!:-)

创建类似

Class Core extends CApplicationComponent{

    public function doSomething(){}
}
在config main.php中

'components'=>array(
    'core'=>array(
        'class' => 'Core'
    ),
),
现在你可以随时打电话

Yii::app()->core->doSomething();
创建类似于

Class Core extends CApplicationComponent{

    public function doSomething(){}
}
在config main.php中

'components'=>array(
    'core'=>array(
        'class' => 'Core'
    ),
),
现在你可以随时打电话

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

因为不能使用$this->所以要从同一个类调用静态方法,必须使用self::yourStaticFunction($value),因为不能使用$this->所以要从同一个类调用静态方法,必须使用self::yourStaticFunction($value),这将在控制器和视图文件中工作,但不能在任何非控制器的类中工作,例如models.in model可以作为Yii::app()->getController()->globalFunction()访问;没错,但这破坏了以MVC风格分离代码的一些优势,就像Yii一样。如果有人在控制台应用程序中使用您的方法,则getController方法的默认返回值为NULL,因为控制台应用程序中不存在控制器。如果只希望在CWebApplication中使用globalFunction(),则您的解决方案很好,但不如一般解决方案。此外,您现在必须考虑调用globalFunction()方法的位置,因此根据您所处的位置对其进行不同的调用。这将在控制器和视图文件中起作用,但不会在任何非控制器的类(如模型)中起作用。在模型中,可以通过Yii::app()->getController()->globalFunction()进行访问;没错,但这破坏了以MVC风格分离代码的一些优势,就像Yii一样。如果有人在控制台应用程序中使用您的方法,则getController方法的默认返回值为NULL,因为控制台应用程序中不存在控制器。如果只希望在CWebApplication中使用globalFunction(),则您的解决方案很好,但不如一般解决方案。另外,你现在