canphp小补丁一枚

我在应用中使用多级目录,但按照canphp的解析,函数名字中就带了’/’字符,比如/a/b/c,变成调用a::’b/c’这个函数,而b/c并不能作为一个函数声明,至少我不会 ::问题

通过分析canphp,在执行一步,函数会调用method_exists函数来确定是否存在函数,如果不 存在的话,则抛出异常

解决的方式

在php中存在一个__call函数,可以将函数拦截,转而调用真实的函数,我不精通php,不知 道在php中该如何称呼,我一般成为函数的拦截。

需要修改的地方

canphp文件core/cpApp.class.php中,下面的一处,小修改一下:

throw new Exception(self::$action."操作方法在" . $mo    dule . "模块中不存在");

修改后的代码:

try {
$object->$action();
} catch( Exception $e) {
 throw new Exception(self::$action."操作方法在" . $mo    dule . "模块中不存在");
}

使用的方法

比如/a/b/c,在aMod.class.php函数中,实现如下代码:

class aMod {
function startsWith($haystack, $needle)
         {
                     return $needle === "" || strpos($haystack, $needle) ===     0;
         }

function b_c_fun()
{
echo "call here";
}
function __call($method, $args)
{
if ($this->startsWidth($method, "b/c")) {
$this->b_c_fun();
}
}
}