2016-11-15 15 views
1

私は次のクラスを持っています。

class User 
    { 
     private $userRoles = array(); 

     //Populate the user object when it's created 
     public function __construct($dbConn,$user_id) 
     { 

       self::loadRoles($dbConn,$user_id);//Initiate the userroles 
     } 

     //Fill the array with this user's roles, it's 
     protected static function loadRoles($dbConn,$user_id) 
     { 
      $fetchRoles = $dbConn->prepare("SELECT tbl_user_role.role_id, tbl_roles.role_name FROM tbl_user_role JOIN tbl_roles ON tbl_user_role.role_id = tbl_roles.id WHERE tbl_user_role.user_id = :user_id"); 
      $fetchRoles->bindParam(':user_id', $user_id); 
      $fetchRoles->execute(); 
        //Populate the array 
      while($row = $fetchRoles->fetch(PDO::FETCH_ASSOC)) 
      { 

       $this->userRoles[$row["role_name"]] = Role::getRole($dbConn,$row["role_id"]); 
(Fatal error: Using $this when not in object context.) 
      } 
     } 
    } 

上記のエラーはfunction protected static function loadRoles($dbConn,$user_id)です。私はロールベースのアクセス制御で作業しています。

私にこれを手伝ってください。

答えて

1

あなたは$ thisを使用していますが、あなたは対象外です。 保護静的関数loadRoles($ dbConn、$ user_idの) 静的関数を使用すると、2回のチャンス持っているので、オブジェクトで実行doesnの: 1)の役割を返し、後でやりたい:

$roles = array(); 
while($row = $fetchRoles->fetch(PDO::FETCH_ASSOC)) 
{ 
    $roles[$row["role_name"]] = Role::getRole($dbConn,$row["role_id"]); 
} 

2 )staticキーワードを削除:

class User { 
private $userRoles = array(); 

//Populate the user object when it's created 
public function __construct($dbConn,$user_id) 
{ 

    $this->loadRoles($dbConn,$user_id);//Initiate the userroles 
} 

//Fill the array with this user's roles, it's 
protected function loadRoles($dbConn,$user_id) 
{ 
    $fetchRoles = $dbConn->prepare("SELECT tbl_user_role.role_id, tbl_roles.role_name FROM tbl_user_role JOIN tbl_roles ON tbl_user_role.role_id = tbl_roles.id WHERE tbl_user_role.user_id = :user_id"); 
    $fetchRoles->bindParam(':user_id', $user_id); 
    $fetchRoles->execute(); 
      //Populate the array 
    while($row = $fetchRoles->fetch(PDO::FETCH_ASSOC)) 
    { 
     $this->userRoles[$row["role_name"]] = Role::getRole($dbConn,$row["role_id"]); 
    } 
} 

}

+0

ありがとう、それは第2のオプションを使用してうまく動作します。 –

2

スタティックオブジェクトと関数は$thisにアクセスできません。あなたは$user = new User()でこれを作成している場合は、あなたがあなたの__construct()方法で呼び出しを変更する必要があります。インスタンス化されたクラス対静的に

public function __construct($dbConn,$user_id) 
{ 
    $this->loadRoles($dbConn,$user_id);//Initiate the userroles 
} 

詳しい情報はthis questionで見つけることができます。

simonが私に思い出させるように、関数自体にはstaticキーワードも削除する必要があります。

+0

loadRolesは() ''まだstatic'ある 'ので、これはまだ失敗するか、または私は何かが足りないのですか? – simon

+0

それでも動作するはずです。クラスがインスタンス化されると、静的関数を静的に呼び出すことができ、正常に動作します。あなたはちょうど反対に行くことはできません。あなたは混乱を取り除くために、静的なキーワードを削除することができます。 – aynber

+0

はい、私が言ったことは、OPが 'loadRoles()'の中で '$ this'を使っていて、' loadRoles() 'が静的である限り動作しないということです。 – simon

関連する問題