2017-03-16 26 views
0

memberという名前のテーブルがあるデータベースがあります。メンバはmem_id mem_image、mem_thumbnail、mem_phone、mem_email、city_nameなどのような異なるカラムを持ちます。このテーブルには200個以上のmem_idsに相当するエントリがあります。 私はmysqlクエリを実行するために使用するクラスの中にphp関数を持っています。フロントエンドでPHP関数を使用してグローバル変数を使用せずに取得されたデータを表示

class myClass{ 

    public function __construct(){} 

    public function memDetails($conn,$cityName) 
    { 

     global $memId; 
     global $memImage; 
     global $memThumb; 
     global $memPhone; 
     global $memEmail; 


     $sql = "SELECT * FROM member WHERE mem_id=$memId"; 

     $mem_details = $this->query($conn,$sql); 

     foreach ($mem_details as $setValue) { 
      $memId= $setValue->mem_id; 
      $memImage= $setValue->mem_image; 
      $memThumb= $setValue->mem_thumbnail; 
      $memPhone= $setValue->mem_phone; 
      $memEmail= $setValue->mem_email; 

    } 
} 

は今、私はデータを表示したいPHPフロントエンドページでは、私が最初にmyClassクラスのオブジェクトを作成し、私はこれをやっている理由は、機能memDetails

<html> 
    <head> 
    </head> 
    <body> 
     // database connection code here 
     $obj = new myClass(); 
     $obj->memDetails($conn, $memId); 
     <p>Image URL= <?PHP echo $memImage ?></p> 
     <p>Thumb URL= <?PHP echo $memThumb ?></p> 
     <p>Phone= <?PHP echo $memPhone ?></p> 
     <p>Email= <?PHP echo $memEmail ?></p> 
    </body> 
</html> 

を呼び出しますなぜなら、メンバーのデータを取り出すには、この機能を別のページで使用する必要があるからです。そして、それは私がその関数を呼び出した後、すべてのページで変数を使用できるように、変数をグローバルとして宣言した理由です。しかし、私が聞いたように、すべてのグローバル変数を把握することが困難になるとともに、その名前の変更にはすべてのページにわたって変更する必要があるため、グローバルを使用することは賢明ではありません。

これは、私がこれをより効率的に行うことができ、フロントエンドのPHPページでPHPコードを必要としない方法です。

答えて

0

あなたの質問にはいくつかの緩みがありますが、単純にするためにmemDetailsメソッドから何かを返すことをお勧めします。例えば

class myClass{ 

    public function __construct(){} 

    public function memDetails($conn,$memId) 
    { 

     $result=[]; 

     $sql = "SELECT * FROM member WHERE mem_id=$memId"; 

     $mem_details = $this->query($conn,$sql); 

     foreach ($mem_details as $setValue) { 
      $result['memId'] = $setValue->mem_id; 
      $result['memImage'] = $setValue->mem_image; 
      $result['memThumb'] = $setValue->mem_thumbnail; 
      $result['memPhone'] = $setValue->mem_phone; 
      $result['memEmail'] = $setValue->mem_email; 
     } 

     return $result; 
    } 
} 

は、連想配列を返しますので、あなたは後で

<html> 
    <head> 
    </head> 
    <body> 
     // database connection code here 
     $obj = new myClass(); 
     $result = $obj->memDetails($conn, $memId); 
     <p>Image URL= <?PHP echo $result['memImage'] ?></p> 
     <p>Thumb URL= <?PHP echo $result['memThumb'] ?></p> 
     <p>Phone= <?PHP echo $result['memPhone'] ?></p> 
     <p>Email= <?PHP echo $result['memEmail'] ?></p> 
    </body> 
</html> 

その方法を行うことができ、MyClassのは、全く外またはグローバルスコープでVARSについて何を知っている必要はありません。

これについては別の方法があります。代わりに、各$ setValue属性をメンバー変数に割り当てることができますが、結果を混合しないようにmyClassの異なるインスタンスを保持する必要があります。このソリューションでは、myClassを一度だけインスタンス化してから、別の$ memIdを使ってmemDetailsを何度も再利用することができます。

+0

ありがとう@amenadiel。今これを試してみましょう。 – Gaurav

関連する問題