2016-05-24 4 views
2

PHP OOPコードを書くときは、成功、失敗、エラーメッセージなどを渡すために、様々なクラスに "返品オブジェクト"を使用するのがよい食物連鎖?私が今持っているもののオブジェクトを返す(PHPのベストプラクティス)

例:

"のオブジェクトを返します":

class Jsql{ 

    function connect($host,$username,$password,$database){ #protected? 
     $this->db = new \mysqli($host,$username,$password,$database); 
     if($this->db->connect_errno){ 
      return new JsqlReturn(false,"Connection failed: (".$this->db->connect_errno.") ".$this->db->connect_error); 
     } 
     else{ 
      return new JsqlReturn(true,NULL,"Connection success."); 
     } 
    } 

} 

を実装:

サンプル方式で

class JsqlReturn{ 
    public $response; 
    public $success; 
    public $debug_message; 
    public $mysqli_result_obj; 
    function __construct($bool=false,$debug_message=NULL,$res=NULL,$mysqli_result_obj=NULL){ 
     $this->success = $bool; 
     $this->response = $res; 
     $this->debug_message = $debug_message; 
     $this->mysqli_result_obj = $mysqli_result_obj; 
    } 
} 

メインクラス

$db = new Jsql; $return = $db->connect(...); if($return->success){ echo $return->response; } else{ echo $return->debug_message; } 

私はここで接続例を使用して知っているが、簡単ですが、私の質問は、コーディングの実践に関連しています。

この練習の主な目標は、メソッドからの戻りデータをどのように処理しているかを確実にすることです。

注:慈悲を持ってください。これが私の最初の質問です。 :)私はゆっくりと自分自身を教えてきました。通常のルートをhtml年前に手を振ってから手続き型PHPに移行し、ついにOOPに入りました。

+2

これはおそらく[Programmers.se]に適しています。 [トピックから「ベストプラクティス」質問ですか?](http://meta.stackoverflow.com/q/265928/2747593)を参照してください。 @ScottWeldon、注記: –

+1

;まだここでさまざまなセクションを学んでいます。ありがとう、 – joegrom5

+2

@ joegrom5これはプログラマーの重複する複数の質問があります:いくつかの良い情報のためにそこに検索することをお勧めします。 –

答えて

0

私にとっては完全に合理的なアプローチのようです。

あなたが回答 インタフェースを実装し、その後、あなたが安全にアプリケーション全体で使用できるように応答クラスのすべてのタイプが同じルールを遵守することを知っているよレスポンスクラスを作ることができ being consistent in how I am handling the return data from methodsの面では

interface MyResponseInterface 
{ 
    public function getResponse(); 
    public function getDebugMessage(); 
    public function getSuccess(); 
    public function getMysqliConnection(); 
} 

class JsqlResponse implements MyResponseInterface 
{ 
    // ... 
} 

その後、あなたのオブジェクトは、例えば、彼らはすべてのあなたの応答インターフェイスを実装するもの、および、そのようなあなたの公共ゲッターが利用可能になるようことMemberResponseなど、どちらかを返しJsqlResponseTimeResponseたびことを知っている:

を3210
/** @var MyResponseInterface $return */ 
$return = $db->connect(...); 
if($return->getSuccess()) { 
    echo $return->getResponse(); 
} else { 
    echo $return->getDebugMessage(); 
} 

注:あなたが返すことができます応答の異なる種類の私の例では、私が(仮に)その時を想像すると、メンバーは、MySQLの接続を必要としないかもしれないので、おそらくあなたはMyResponseInterfaceからこれを省略して作成することができますデータベース接続のための新しいインタフェース、例えばMyDatabaseInterface。一般的な応答クラスは、応答、デバッグメッセージ、および成功メソッドを提供します。

関連する問題