4

我正在处理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();
4

3 回答 3

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

  ...
  ..

  }
于 2012-05-22T12:52:18.353 回答
3

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

还有几个错误:

  • {你在你的 foreach 中忘记了一个。为您解决了这个问题(仅在循环内返回 true,else 构造是无用的,否则您的 foreach 只会循环一次)。
  • 您可以立即返回对getPermissionValuein的调用值,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因为它是一种很好的做法。

于 2012-05-22T12:52:48.900 回答
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::使用

于 2012-05-22T12:52:46.007 回答