2011-06-21 7 views
1

私はscript.phpにこのコードを持っている:私は持っているインクルードされたスクリプトで定義された変数に値がないのはなぜですか?

<?php 
session_start(); 

$user_session = $_SESSION['u_name']; 

class check_sess { 
    public function check_id_session($user_session, $db) { //email 
     $stmt = $db->prepare('select id_user from users where email=?'); 
     $stmt->bind_param('s', $user_session); 

     $stmt->execute(); 

     $stmt->bind_result($id); 

     if ($stmt -> fetch()) { 
      $id; 
      echo $id; // here shows 20 for example 
      return true; 
     } 
     else 
     return false; 

     $stmt->close(); 
     $db->close(); 
    } 
} 
?> 

とdemo.phpで:

include 'script.php'; 
$val = new check_sess(); 
$val-> check_id_session($user_session, $db); 
echo $id; //problem here. It is supposed echo 20 

は、なぜ私はecho $idを行うことはできませんか? demo.phpには出力がありません。

答えて

3

variable scopeについて読んでください。変数$idは関数外には存在しません。関数が$ idを返すようにするには、if ($stmt -> fetch()) {条件ブランチにreturn $idと書いてください。その後、書き込むことができます。

include 'script.php'; 
$val = new check_sess(); 
$id = $val-> check_id_session($user_session, $db); 
echo $id; 
1

あなたはこの方法でそれをアクセスするために、値を返す必要があります:あなたが意図したように、その除き

if ($stmt -> fetch()) { 
    return $id; 
} 

が動作しません。

$idを先に割り当てる必要があります。これは、フレームワークを使用しているようです。まずの結果として$idに値を割り当ててから、その値をメソッドから返して、その値にアクセスできるようにする必要があります。

1

あなたのIDはクラス内にあり、したがって異なるスコープにあります。あなたはそれのためにゲッターを書いたり、静的として宣言し、その後、あなたはインスタンスなしでそれにアクセスすることができますすることができますいずれか

class check_sess { 
    static $id; 
... 
    if ($stmt -> fetch()) { 
     self::$id = $id; 
     echo self::$id; // here shows 20 for example 
     return true; 
    } 
... 
} 

あなたは今

check_sess::$id 
を経由して、あなたのコード内の任意の場所にアクセスすることができます