我知道如何创建一个类,允许我实例化它并在我的项目中使用。我希望能够做的是没有实例化类的函数。例如,我知道如何做到这一点:
$core = new core();
$val = $core->convertToMyNotation($anotherval);
但我想要的是能够在任何视图中随时随地进行此操作,无论如何:
$val = convertToMyNotation($anotherval);
为了能够做到这一点,我会在哪里放置这些功能?
答案 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();