解析错误,预期在 activecollab 模型类中出现“T_PAAMAYIM_NEKUDOTAYIM”错误


parse error, expecting `T_PAAMAYIM_NEKUDOTAYIM' error in activecollab model class

我正在研究activecollab自定义模块的权限,并且在尝试调用静态方法的函数时收到此错误消息不知道为什么; 请做帮助将是非常合适的..

Parse error: parse error, expecting `T_PAAMAYIM_NEKUDOTAYIM' in D:'wamp'www'activecollab'public'activecollab'3.0.9'modules'projectcomrequest'models'Projectcomrequests.class.php on line 130

我在模型文件中执行的代码是:

  class Projectrequests extends DataManager {
   ...
   ....
        function getPermissionValue($name){
            $roles = Roles::find();
            foreach($roles as $role) {
                if($role->getPermissionValue($name))
                    return true;
                else
                    return false;
        }
        static function canAccess() {
          if(self::getPermissionValue('can_use_project_request')) return true;
            return false;
        } // canAccess
  ...
  ..
  }

通过以下方式调用控制器:

echo Projectrequests::canAccess();
    foreach($roles as $role) {
        if($role->getPermissionValue($name))
            return true;
        else
            return false;

你在那里缺少一个结束}。 所以它应该是:

  class Projectrequests extends DataManager {
   ...
   ....
        function getPermissionValue($name){
            $roles = Roles::find();
            foreach($roles as $role) {
                if($role->getPermissionValue($name))
                    return true;
                else
                    return false;
            } // <-- here
        }
        static function canAccess() {
          if(self::getPermissionValue('can_use_project_request')) return true;
            return false;
        } // canAccess
  ...
  ..
  }

静态方法没有类上下文$this,因为您尝试在canAccess()的第一行中调用。您应该调用self::而不是$this->来访问类上下文,然后只能调用其他静态字段和方法。您还必须使getPermissionValue也是静态的。

还有一些错误:

  • 你忘了你的前{。为您修复了此问题(仅在循环内返回 true,else 构造是无用的,否则您的 foreach 只会循环一次(。
  • 您可以立即将调用的值返回到canAccessgetPermissionValue,因为它无论如何都是布尔值(if-else 构造有点无用(。

更正的代码:

static function getPermissionValue($name){
    $roles = Roles::find();
    foreach($roles as $role) {
        if($role->getPermissionValue($name))
            return true;
    }    
    return false;
}
static function canAccess() {
    return self::getPermissionValue('can_use_project_request');
} // canAccess

我也想建议使用访问修饰符,如publicprivate,因为这是很好的做法。

<?php
class Projectrequests extends DataManager {
   ...
   ....
        function getPermissionValue($name){
            $roles = Roles::find();
            foreach($roles as $role) {
                if($role->getPermissionValue($name))
                    return true;
                else
                    return false;
            } // <!---- YOUR ERROR IS HERE
        }
        static function canAccess() {
          if($this->getPermissionValue('can_use_project_request')) return true;
            return false;
        } // canAccess
  ...
  ..
  }

此外,静态方法无法访问您需要使用self:: $this