簡體   English   中英

使用面向對象的php調用函數內的會話

[英]Call a session inside a function with object oriented php

我是oop的新手,我的代碼中的某些行僅是近似的,以表明我想要實現的目標。

我想在一個類中的函數內用php創建一個會話,然后在另一個函數中調用它。

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

我只想了解一個概念:這樣,我的代碼可以工作,但另一方面,它將執行在函數索引中找到的所有內容,在我的其他函數中找到另一個函數。 因此,如果我用相同的名稱調用兩個變量,我可能會遇到問題。

我想從理論上講,我可以用另一種方式來處理該問題,例如,我可以創建一個變量調用sessionone並使用索引函數將其發送一些值:

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'] );
        }
    }

$_SESSION變量在PHP中稱為超級全局變量: http ://php.net/manual/zh/language.variables.superglobals.php這為它們提供了一些獨特的特征。

首先,可以在應用程序中的任何位置訪問Superglobals,而不管其范圍如何。 在一個函數中設置超全局鍵的值將使該值可在您要引用的應用程序中的任何其他位置訪問。

舉例來說,我們要創建一個類來管理會話。 該類可能看起來像這樣。

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.

由於會話是超全局性的,因此一旦您在會話上設置了值,就可以在應用程序中任何位置(在類本身之內或之外)進行評估。

您必須在課程開始時調用session_start() 如果您包含此類示例,您也可以在代碼的開頭開始會話。

請記住,您只能調用一次session_start

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM