使用面向对象的php调用函数内的会话

时间:2018-05-30 19:26:03

标签: php variables session

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

2 个答案:

答案 0 :(得分:2)

$_SESSION变量是PHP中的超级全局:http://php.net/manual/en/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.

由于会话是一个超级全局,一旦你在会话上设置了一个值,它就可以在你的应用程序的任何地方评估,无论是在类本身内部还是外部。

答案 1 :(得分:1)

您必须在课程开始时致电session_start()。 如果您加入了课程like this sample

,也可以在代码的开头开始会话

请记住,您只能召开一次session_start