2017-10-13 5 views
0

ユーザーに従業員のアクセス許可があるかどうかをチェックしたいと思います。PHPの関数に対して論理エラーを返すベストプラクティスは何ですか

function hasEmployeePermission($employeeID, $userKey) 
{ 
    $usersID = DB::table('users')->where('key', $userKey)->value('id'); 

    if($userID != null) { 
     $employeeID = DB::table('employees')->where('user_id', $userID)->value('id'); 

     if($mployeeID != null) 
      return true; 
     else 
      return false; 
    } 
    return false; 
} 

私は、戻り値は例外を投げるような、より表現力になりたいです。論理的なエラーで例外を投げるのはベストプラクティスではないと思います。私はエラーを返すようにコードを修正する方法を知りたがりません。

+0

'リターン "のエラーメッセージ";'? error_logでレポートしたい場合は、returnの前に 'error_log(" ERROR MESSAGE ");を実行することもできます。そして、あなたはまた、何のリターンもせずにページを殺すことができます。 'die(" ERROR MESSAGE ");' – GrumpyCrouton

+5

'hasEmployeePermission'はyes/noのように聞こえるので、ブール値はおそらくあなたがこの関数を返すことができる最も表現力のあるものです。間違った引数が渡された場合、それは例外です – apokryfos

+0

@GrumpyCroutonそれは危険でしょうか?コーダーが(hasEmployeeAccess())を使用する場合、エラー状況を渡します。 –

答えて

0

単純なエラークラスを作成します。あなたはこのような何かを行うことができます

Class myError{ 
    public $error = true; 
    public $message = null; 
    function __construct($error,$message) { 
     $this->error = $error; 
     $this->message = $message; 
    } 
} 

その後、

if($mployeeID != null) 
     return new myError(true,"no permission"); 
    else 
     return new myError(false,"has permission"); 

は、例えば、クラスに追加、より多くの機能があるかもしれませんエラーのどこかにログを記録する

0

あなたの関数が失敗した理由を知りたいのであれば、enumを使うことをお勧めします。ここで

は一例です:

abstract class EmployeeErrors 
{ 
    const WrongID = 1; 
    const NoPermissions = 2; 
    // etc. 
} 

function hasEmployeePermission($employeeID, $userKey) 
{ 
    $usersID = DB::table('users')->where('key', $userKey)->value('id'); 

    if($userID != null) { 
     $employeeID = DB::table('employees')->where('user_id', $userID)->value('id'); 

     if($mployeeID != null) 
      return 0; 
     else 
      if ($userKey == null) 
       return EmployeeErrors::WrongKey; 
      else ... 
    } 
    return EmployeeErrors::WrongID; 
} 
関連する問題