簡體   English   中英

會話開始無效

[英]Session start doesn't work

有人能幫我嗎? 會話開始無效。 我究竟做錯了什么? 錯誤消息是致命錯誤:未捕獲的錯誤:在null上調用成員函數crement_index()

這是我的index.php

<?php

require 'config/bootstrap.php';

get_header();

$_SESSION = get_session_start_values();

dd($_SESSION['quiz']->increment_index());

render_fragment( 'quiz' );

get_footer();

這是我的引導文件

<?php
session_start();
require 'quiz.php';
require 'helpers.php';
require 'database.php';

在助手中,我使用的是:

function get_session_start_values() {
    if ( ! isset( $_SESSION['quiz'] ) ) {
        return  [
            'quiz' => new Quiz(),
            'yes_no_questions' => 'yes_no_questions',
            'end_game' => false
        ];
    }
}

由於此行,它只能工作一次:

if ( ! isset( $_SESSION['quiz'] ) ) {

第二次

$_SESSION = get_session_start_values();

$_SESSION設置為null

這應該解決它:

function get_session_start_values() {
    if ( ! isset( $_SESSION['quiz'] ) ) {
        return  [
            'quiz' => new Quiz(),
            'yes_no_questions' => 'yes_no_questions',
            'end_game' => false
        ];
    }
    return $_SESSION;
}

$_SESSION是一個超級全局$_SESSION 也就是說,您可以隨處使用它來訪問會話。 這包括在其中設置會話初始值的函數:

function get_session_start_values() {
    if ( ! isset( $_SESSION['quiz'] ) ) {
        return  [
            'quiz' => new Quiz(),
            'yes_no_questions' => 'yes_no_questions',
            'end_game' => false
        ];
    }
}

無需詢問起始值,僅在需要時進行初始化:

function init_session_values(): void {
    if ( ! isset( $_SESSION['quiz'] ) ) {
        $_SESSION['quiz'] = new Quiz();
    }
    ...
}

然后,在需要時調用該函數。 您不需要照顧任何返回值。

<?php

require 'config/bootstrap.php';

init_session_values();

get_header();

使用$_SESSION可以更直接地使用它(用於輕松的全局全局訪問)。

暫無
暫無

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

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