您的Web主机已禁用register_globals
在php.ini, 因此,每次您想使用变量时,都必须手动“注册”变量。例如:
<?php
global $xavi;
echo $xavi;
?>
另一种方法是使用
$GLOBALS
阵列:
<?php
echo $GLOBALS[\'xavi\'];
?>
但在我看来,你应该避免使用globals。相反,使用一个简单的注册表类,您可以添加/获取您的值。
编辑这不是WordPress特有的解决方案,对于这个简单的问题来说可能有点过头了。注册表模式是一种正式的编程设计模式。我在这里也使用了单例模式。
我们在这里要做的是将内容存储在注册表对象中。它是单例的,因此只创建一个实例。
我知道,这个问题还没有真正解决。我们没有使用$GLOBALS数组,而是使用了一个注册表类,它实际上也是“全局的”,因为我们每次需要时都会调用实例。你没有控制权,你把它叫做什么。此外,单例类的测试可能会有问题。如果您想要更多的控制,只需查看依赖性注入的工厂模式。
class Webeo_Registry {
/**
* Array to store items
*
* @var array
*/
private $_objects = array();
/**
* Stores the registry object
*
* @var Webeo_Registry
*/
private static $_instance = null;
/**
* Get the instance
*
* @return void
*/
public static function getInstance() {
if (is_null(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* Constructor
*
* @access private
* @return void
*/
private function __construct() {}
/**
* Set an item by given key and value
*
* @param string $key
* @param void $value
* @return void
*/
public function __set($key, $value) {
// maybe you want to check if the value already exists
$this->_objects[$key] = $value;
}
/**
* Get an item by key
*
* @param string $key Identifier for the registry item
* @return void
*/
public function __get($key) {
if(isset($this->_objects[$key])) {
$result = $this->_objects[$key];
} else {
$result = null;
}
return $result;
}
/**
* Check if an item with the given key exists
*
* @param string $key
* @return void
*/
public function __isset($key) {
return isset($this->_objects[$key]);
}
/**
* Delete an item with the given key
*
* @param string $key
* @return void
*/
public function __unset($key) {
unset($this->_objects[$key]);
}
/**
* Make clone private, so nobody can clone the instance
*
* @return void
*/
private function __clone() {}
}
在插件/主题中,您只需返回实例,即可使用它:
$registry = Webeo_Registry::getInstance();
// Define some options (just add it after the "->". The magic method __set will do the rest)
$registry->optionA = \'awdawd\';
$registry->optionB = array(1,2,3);
// Check the content
print_r($registry);
// Remove an item
unset($registry->optionA);
// Check if option exists
if(isset($registry->optionA)) {
echo \'option exist\';
} else {
echo \'option does not exist\';
}