簡體   English   中英

在方法 A 中更改類屬性值並在方法 B 中訪問更新的值

[英]Change class property value in method A and access updated value in method B

我正在使用一個主要基於 CodeIgniter 的自定義 PHP 框架。

在我的一個控制器文件中,我設置了一個名為 $orderId 的類屬性。 用戶填寫完表格並提交后,我會做一個數據庫插入,獲取訂單號。 並使用該訂單號覆蓋 $orderId 類屬性值。

然后我將重定向到提交頁面,我想在其中訪問更新后的 $orderId 類屬性值。 這最后一部分不起作用,提交類為屬性 $orderId 獲取一個空白值。

請問我哪里錯了? 下面是基本示例。 也許我因為重定向而不能這樣做,應該改用會話變量?

謝謝!

[編輯] 或者我可以將 orderId 作為重定向中的第三個 URL 參數傳遞。 EG redirect('orders/submit/'.self::$orderId); 在這種情況下,我會將所有self::實例轉換為類級別范圍的$this->

class Orders extends Controller {
    private static $orderId;

    public function __construct() {
        // assign db model
    }

    public function index() {
        if($_SERVER['REQUEST_METHOD'] == 'POST') {

            $data = [
                // form data to pass to db model
            ];

            self::$orderId = 12345; // example order no. return from db model
            if(!empty(self::$orderId)) {
                redirect('orders/submit');
            }
        }
    }

    public function submit() {
        $data = [
            'orderId' => self::$orderId
        ];
        $this->view('orders/submit', $data);
    }
}

這個問題本身是一個基本的架構問題。 static 僅在您使用同一實例時才有效。 但是由於您正在重定向,因此框架正在重新初始化。 失去靜態財產的價值。 執行此操作的最佳方法是將訂單 ID 存儲在會話變量中,然后讀取該變量。 只要瀏覽器窗口打開,會話就會持續

暫無
暫無

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

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