因此,我有一个名为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();
我敢肯定这可能只是一个简单的答案-例如变量使用,但这是我目前不知道的答案.
解决方法:
例:
call_user_func(array($class, 'getPerms'), $this->action);
如果您使用的是PHP 5.2.3,也可以通过以下方式进行操作:
call_user_func($class . '::getPerms', $this->action);
标签:oop,php
来源: https://codeday.me/bug/20191024/1920295.html