通过变量访问类静态函数

Rob*_*oer 3 php oop

所以我有一个名为router的PHP类,它接受URL并将其展开以查找所请求的组件,操作和任何给定的值.然后它加载负责的类,运行动作等等.我现在通过用户类将用户访问集成到类中.

对于每个组件(它是一个类),我有一个名为"perms"的静态类数组变量,它将每个操作保存为索引,将数字保存为运行操作所需的最小权限.每个组件还具有静态函数,以获取传递的操作名称的权限值.

我遇到的问题是使静态函数与存储在变量中的类的名称一起正常工作.在路由器中,我使用变量来保存组件的名称.

$this->controller // cms, calendar ,etc
Run Code Online (Sandbox Code Playgroud)

然后我添加'Controller'来获取类的名称

$class = $this->controller.'Controller'; // cmsController, calendarController, etc
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用它来访问静态函数时,我收到一个错误

$minActionPerm = $class::getPerms( $this->action ); // No go, parse error
Run Code Online (Sandbox Code Playgroud)

当我输入类名时我没有错误,但这不是一个真正的解决方案.

$minActionPerm = cmsController::getPerms( $this->action ); // Good, but literal
Run Code Online (Sandbox Code Playgroud)

当我创建类的对象来运行操作时,该变量也有效.

$object = new $class();
Run Code Online (Sandbox Code Playgroud)

我敢肯定这可能只是一个简单的答案 - 例如变量使用,但它是我现在不知道的那个.

Mit*_*aro 5

您需要使用该call_user_func功能.

例:

call_user_func(array($class, 'getPerms'), $this->action);
Run Code Online (Sandbox Code Playgroud)

如果您使用的是PHP 5.2.3+,您也可以这样做:

call_user_func($class . '::getPerms', $this->action);
Run Code Online (Sandbox Code Playgroud)