Вызовите сеанс внутри функции с объектно-ориентированным php - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в oop, и некоторые строки моего кода являются лишь приблизительными, чтобы указать, чего я хочу достичь.

Я хочу создать сессию с php внутри функции внутри класса и вызвать еев другой функции.

class My_beautiful_class
{
public function index()
    {
        $_SESSION['ciao'] = 'ciao';
        var_dump($_SESSION);
    }
public function anotherfunction()
    {
        $this->index();
        var_dump($_SESSION);
    }
}

Я просто хочу понять концепцию: таким образом мой код будет работать, но, с другой стороны, он выполнит все, что найдет в моем индексе функций, в моемдругая функция другая функция.Поэтому, если я вызову две переменные с одним и тем же именем, у меня может возникнуть проблема.

Я предполагаю, что теоретически я мог бы решить проблему другим способом, а именно, что я мог бы создать сеанс вызова переменной, напримери отправить ему некоторые значения с помощью моей индексной функции:

class My_beautiful_class
{

public sessionone = [];

public function index()
    {
        $_SESSION['ciao'] = 'ciao';
        $this->sessionone = $_SESSION['ciao'];

    }
public function anotherfunction()
    {
        $this->sessionone;
        var_dump($_SESSION);
    }
}

, но мне было интересно, есть ли способ, например, вызвать только одну переменную, которая живет в одной функции с моим первым подходом.

Что-то вроде: (Мой код намеренно неверен, он только указывает на то, чего я хочу достичь)

public function index()
        {
            $_SESSION['ciao'] = 'ciao';
        }
public function anotherfunction()
        {
           $this->index( $_SESSION['ciao'] );
        }
    }

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Переменная $_SESSION - это то, что в PHP называется Superglobal: http://php.net/manual/en/language.variables.superglobals.php Это дает им несколько уникальных характеристик.

Во-первых, суперглобальные элементы доступны в любом месте вашего приложения независимо от области действия.Установка значения суперглобального ключа в одной функции сделает это значение доступным в любом месте вашего приложения, на которое вы хотите сослаться.

Скажем, например, что мы хотим создать класс для управления нашим сеансом.Этот класс может выглядеть примерно так.

class SessionManager 
{
    public function __construct()
    {
        session_start();   //We must start the session before using it.
    }

    //This will set a value in the session.
    public function setValue($key, $value)
    {
        $_SESSION[$key] = $value;
    }

    //This will return a value from the session
    public function getValue($key)
    {
        return $_SESSION[$key];
    }

    public function printValue($key)
    {
        print($_SESSION[$key]);
    }
}

Когда у нас есть класс для управления им, происходит несколько вещей.Мы можем использовать этот новый класс для добавления информации к сеансу, а также для ее извлечения.

Рассмотрим следующий код:

$session = new SessionManager();
$session->setValue('Car', 'Honda');

echo $session->getValue('Car'); // This prints the word "Honda" to the screen.
echo $_SESSION['Car']; //This also prints the word "Honda" to the screen.
$session->printValue('Car'); //Again, "Honda" is printed to the screen.

Поскольку сеанс является суперглобальным, после установкизначение в сеансе, которое будет оцениваться в любом месте вашего приложения, как внутри, так и за пределами самого класса.

0 голосов
/ 30 мая 2018

Вы должны позвонить session_start() в начале вашего класса.Вы также можете начать сеанс в начале кода, если включите свой класс , как в этом примере

Помните, что вы можете вызывать session_start только один раз

...