所以我有一个名为router的PHP类,它接受URL并将其展开以查找所请求的组件,操作和任何给定的值。然后它加载负责的类,运行动作等等。我现在通过用户类将用户访问集成到类中。
对于每个组件(它是一个类),我有一个名为“perms”的静态类数组变量,它将每个操作保存为索引,将数字保存为运行操作所需的最小权限。每个组件还有一个静态函数来获取传递的操作名称的权限值。
我遇到的问题是让静态函数与存储在变量中的类的名称一起正常工作。在路由器中,我使用变量来保存组件的名称。
$this->controller // cms, calendar ,etc
然后我添加'Controller'来获取类的名称
$class = $this->controller.'Controller'; // cmsController, calendarController, etc
但是,当我尝试使用它来访问静态函数时,我收到错误
$minActionPerm = $class::getPerms( $this->action ); // No go, parse error
当我输入类名时,我没有收到任何错误,但这不是一个真正的解决方案。
$minActionPerm = cmsController::getPerms( $this->action ); // Good, but literal
当我创建类的对象以运行操作时,该变量也有效。
$object = new $class();
我确信它可能只是一个简单的答案 - 例如变量使用,但它是我现在不知道的那个。
答案 0 :(得分:5)
您需要使用call_user_func
功能。
示例:
call_user_func(array($class, 'getPerms'), $this->action);
如果您使用的是PHP 5.2.3+,您也可以这样做:
call_user_func($class . '::getPerms', $this->action);