Почему переменная, определенная во включенном скрипте, не имеет значения? - PullRequest
1 голос
/ 21 июня 2011

У меня есть этот код в 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 ]

3 голосов
/ 21 июня 2011

Читать о переменная область действия .Переменная $id не существует вне функции.Если вы хотите, чтобы функция возвращала $ id, напишите return $id в ветке условия if ($stmt -> fetch()) {.Затем вы можете написать:

include 'script.php';
$val = new check_sess();
$id = $val-> check_id_session($user_session, $db);
echo $id;
1 голос
/ 21 июня 2011

ваш идентификатор находится в классе и, следовательно, в другой области видимости.

Вы можете либо написать для него геттер, либо объявить его статическим, а затем получить к нему доступ без экземпляра:

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

Теперь вы можете получить к нему доступ в любом месте своего кода через * 1006.*

check_sess::$id
1 голос
/ 21 июня 2011

Вам необходимо вернуть значение для доступа к нему следующим образом:

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

За исключением того, что оно не будет работать, как вы предполагали.

Сначала нужно назначить $id - и похоже, что вы используете какую-то платформу;поэтому вам следует сначала присвоить значение $id, как результат, скажем, fetch(), а затем вернуть это значение из метода, что позволит вам получить к нему доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...