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

时间:2012-05-22 12:49:28

标签: php permissions module controller activecollab

我正在使用activecollab自定义模块的权限,并在尝试调用静态方法的函数时收到此错误消息不知道原因;请帮助将是真正的appericiatable ..

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();

3 个答案:

答案 0 :(得分:5)

    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

  ...
  ..

  }

答案 1 :(得分:3)

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

还有一些错误:

  • 你在foreach中忘记了{。为你修复了这个问题(只在循环内部返回true,否则构造没用,因为否则你的foreach只循环一次)。
  • 您可以立即将调用的值返回getPermissionValue中的canAccess,因为无论如何它都是布尔值(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之类的访问修饰符,因为这是一种很好的做法。

答案 2 :(得分:2)

<?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

  ...
  ..

  }

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