您的问题与 MVC 关系不大,更多与使用全局变量或全局值有关。
许多此类,通常每个类需要一个实例(“单例”),并且在某些情况下,无法避免单例,在您的情况下,可以拥有它们。
许多书籍,教程没有教什么,它应该如何在何时何地初始化单例。它从编程语言变为编程语言。
而且,在网站的情况下,变量在更改到另一个页面时会丢失它们的值,这变得很复杂。
有一个称为“会话变量”的概念,它与单例一起工作,允许在从一页切换到另一页时保留值:
http://php.net/manual/en/session.examples.basic.php
假设您有一个网站。它有几个文件和几个页面。其中一些 php 文件被直接调用并被视为“网页”,例如“index.php”。
其他 php 文件,是库文件,被其他文件“必需”或“包含”,它们本身不被视为“网页”。
当用户单击 wbe 页面中的链接,并且浏览器调用另一个网页时,所有这些值都可能丢失。它不像在桌面应用程序中打开另一个表单。
想想,当用户第一次进入网站时(例如:“index.php”):主文件“包含”或“需要”其他文件,并初始化全局变量或单例:
<?php
// filename: "config.php"
// another includes or requires here
class Config
{
// begin data section
public static $UserName;
public static $UserPassword;
// end data section
// begin singleton section
private static $_instance;
public static function getInstance()
{
if (!self::$_instance instanceof self)
{
self::$_instance = new self;
}
return self::$_instance;
}
// end singleton section
// start session section
public static function SaveSession()
{
$_SESSION['config_username'] = Config::$UserName;
$_SESSION['config_password'] = Config::$UserPassword;
}
public static function RestoreSession()
{
Config::$UserName = $_SESSION['config_username'];
Config::$UserPassword = $_SESSION['config_password'];
}
// end session section
} // class Config
?>
<?php
// filename: "index.php"
include ("config.php");
// another includes or requires here
class Application
{
public static function main()
{
// prepare session variables
session_start();
// prepare singletons here
$instance = Config::getInstance();
// this code its an example
$instance->UserName = "johndoe";
$instance->UserPassword = "123";
$instance->SaveSession();
// all the page construction goes here
// ...
}
} //
// program starts here:
Application::main();
?>
当用户更改到另一个页面时,应用程序必须将会话数据重新加载到单例中。
<?php
// filename: "customers.php"
include ("config.php");
// another includes or requires here
class Application
{
public static function main()
{
// copy data from session to singletons
$instance->RestoreSession();
// all the page construction goes here
// ...
}
} //
// program starts here:
Application::main();
?>
单例之间没有关系,通常它们是独立的值。
干杯。