用什么方式自定义一个公用函数比较合理?

我想自定义一个公用函数能被各控制器使用,比如这个生成目录的函数:




function mkpath($path){

    $dirs=array();

    $path=preg_replace('/(\/){2,}|(\\\){1,}/','/',$path);

    $dirs=explode("/",$path);

    $path="";

    foreach ($dirs as $element)

    {

        $path.=$element."/";

        if(!is_dir($path)){

            if(!mkdir($path,0777)){

                return false;

            }else{

                chmod($path,0777);

            }

        }

    }

    return true;

}



当然我可以把它放在每个需要用到的控制器内部,但是这样就违背了yii框架的可重用原则。我查看了手册好像要创建扩展才能被各处程序访问,但是这这只是个小函数没必要弄成扩展这么庞大,请问yii里有没有存放公用函数的位置或者方法?比如我之前用的ci里面有helpers目录。

我无意中搜到了这个帖子,解决了问题:http://www.yiiframework.com/forum/index.php?/topic/4175-公用函数问题/

就是自定义一个静态类放在components目录下,然后就可以直接调用了,看我的例子:

Tool.php放在components下




<?php

class Tool {

    public static function mkpath($path) {

        $dirs = array();

        $path = preg_replace('/(\/){2,}|(\\\){1,}/', '/', $path);

        $dirs = explode("/", $path);

        $path = "";

        foreach ($dirs as $element) {

            $path.=$element . "/";

            if (!is_dir($path)) {

                if (!mkdir($path, 0777)) {

                    return false;

                } else {

                    chmod($path, 0777);

                }

            }

        }

        return true;

    }

    public static function test() {

        echo('tetts');

    }

}



在控制器里面直接使用Tool::test();或Tool::mkpath(‘xx/xx/xx’);即可。

楼上正解

-,-直接在index.php里将函数文件includ进来就行了,自己方便就行了,何必去死套模式?

每个框架都有自己的开发规范嘛,要不然的话,不如自己直接裸写代码~

恩,我就是这个意思。

每个框架在有他特色的同时肯定有让人别扭的地方,要不然某一个框架早就一统天下了,我们是用框架,不是被框架用,你纠结这种根本不是问题的问题根本没意义。。。。

遵循规范可以让其他人更加容易理解你的代码。

框架提供了这个方便为什么不用呢?

我觉得

Tools::mkpath($path)

要比

require_once ‘tools.php’;

mkpath($path);

更加简洁优雅