我知道如何创建一个允许我实例化它并在我的项目中使用的类。我想要做的是在没有实例化类的情况下拥有函数。例如,我知道如何做到这一点:
$core = new core();
$val = $core->convertToMyNotation($anotherval);
但我想要的是能够在任何地方在任何地方做这件事,不管是什么类别:
$val = convertToMyNotation($anotherval);
为了能够做到这一点,我会将这些功能放在哪里?
我知道如何创建一个允许我实例化它并在我的项目中使用的类。我想要做的是在没有实例化类的情况下拥有函数。例如,我知道如何做到这一点:
$core = new core();
$val = $core->convertToMyNotation($anotherval);
但我想要的是能够在任何地方在任何地方做这件事,不管是什么类别:
$val = convertToMyNotation($anotherval);
为了能够做到这一点,我会将这些功能放在哪里?
最好的方法是在 components/Controller.php 中创建一个公共函数
public function globalFunction(){
// do something here.
}
并通过
$this->globalFunction();
您可以将静态方法定义为选项。
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 文件夹中,您可以获得默认情况下自动加载类的优势。
您的答案没有明确的问题,这在很大程度上取决于该功能将做什么!
如果该函数正在执行特定于模型的某些操作(获取最后一个用户,...),这必须在用户模型中,如 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);
实际上,我认为您正在寻找这个答案: http ://www.yiiframework.com/wiki/31/use-shortcut-functions-to-reduce-typing/
本质上,在你的入口脚本中,在你加载 Yii 之前,包含一个全局函数文件:
require('path/to/globals.php');
然后,该文件中定义的任何函数都可以用作快捷方式。小心,但享受力量!:-)
创建类似的东西
Class Core extends CApplicationComponent{
public function doSomething(){}
}
并在配置 main.php
'components'=>array(
'core'=>array(
'class' => 'Core'
),
),
现在你可以随时打电话
Yii::app()->core->doSomething();