我有以下问题。我有一个包含login.php的Index.php。 在login.php中,我包含了一个registry.php。在login.php中,我将我的连接对象添加到注册表类(Registry :: add($ Conn));连接类的名称是' conn'。
因此,在显示页面(index.php)之后,用户可以单击按钮打开另一个页面(clients \ index.php)。在client \ index.php中我想使用相同的连接。我怎么做?当我使用Registry :: get(' conn')时,我收到对象不存在的消息。
<?php
class Registry {
/**
* @var array The store for all of our objects
*/
static private $_store = array();
/**
private static $instance = null;
public static function getInstance() {
if(self::$instance === null) {
self::$instance = new Registry();
}
return self::$instance;
}
private function __construct() {}
private function __clone() {}
*/
/**
* Add an object to the registry
*
* If you do not specify a name the classname is used
*
* @param mixed $object The object to store
* @param string $name Name used to retrieve the object
* @return void
* @throws Exception
*/
static public function add($object, $name = null)
{
// Use the classname if no name given, simulates singleton
$name = (!is_null($name)) ?: get_class($object);
$name = strtolower($name);
if (isset(self::$_store[$name])) {
throw new Exception("Object already exists in registry");
}
echo 'Connection name:' . $name;
self::$_store[$name]= $object;
//Undefined offset: 61
}
/**
* Get an object from the registry
*
* @param string $name Object name, {@see self::set()}
* @return mixed
* @throws Exception
*/
static public function get($name)
{
if (!self::contains($name)) {
throw new Exception("Object does not exist in registry");
}
return self::$_store[$name];
}
/**
* Check if an object is in the registry
*
* @param string $name Object name, {@see self::set()}
* @return bool
*/
static public function contains($name)
{
if (!isset(self::$_store[$name])) {
return false;
}
return true;
}
/**
* Remove an object from the registry
*
* @param string $name Object name, {@see self::set()}
* @returns void
*/
static public function remove($name)
{
if (self::contains($name)) {
unset(self::$_store[$name]);
}
}
}
?>
答案 0 :(得分:0)
因此,有几种方法可以做到。
First
:(因为代号不是很好的变种):
client/index.php
上您需要重新设置连接。 Registry::add($Conn)
。
Second
:如果您使用某个框架,则只需在脚本运行client/index
控制器或文件之前添加它(这取决于您使用的是什么)。
因此,如果您想从Registry
获取连接对象,则需要根据每个请求设置它。
此外,对于连接,您可以使用静态方法,例如app::getConnection()
,在其中您可以检查连接是否已经存在,如果没有,则返回,创建一个新方法,而不使用注册表模式。