编辑:
我忘了为您的问题提供最简单、最不冗长的解决方案。AFAIK,您正在寻找一种方法来检查您所在的页面。常量将做到这一点:
defined('MY_CURRENT_PAGE') || define('MY_CURRENT_PAGE','My Value');
//use anywhere like so:
echo 'Currently on page: '.MY_CURRENT_PAGE;
我的班级忘记了我设置的值。这是为什么?
很简单:您的page
成员函数不是静态的,但您将其称为:get::page()
. 即使您要解决此问题,您也会在page
方法中创建一个新实例,但您并没有在任何地方保留引用,因此每次page
调用都会创建一个globals
没有设置的新实例。
我必须使用全局变量吗?
不,除非你真的很绝望,否则永远不要使用全局变量
这是解决问题的正确方法吗?
不,如果它不起作用,那是不正确的(恕我直言)。
好吧,你可能会问,是什么。有几种方法可以解决这个问题:
class globals
{
public static $page = null;//make this static, meaning all instances will share this var
public function set_page($value)
{
self::$page = $value; // Maybe from a database
}
}
class get
{
private $_globalsInstance = null;
public function __construct(globals $instance = null)
{
$this->_globalsInstance = $instance;
}
private function _getGlobals()
{
if (!$this->_globalsInstance instanceof globals)
{
$this->_globalsInstance = new globals();
}
return $this->_globalsInstance;
}
public function page()
{
return $this->_getGlobals()::$page;
}
}
然而,就我个人而言,我不会这样工作,我只是将我的实例传递到我需要它们的任何地方(作为函数/方法的参数,或者只是在可访问的范围内实例化它们:
class globals
{
public $page = null;//make this static, meaning all instances will share this var
public function set_page($value)
{
$this->page = $value; // Maybe from a database
}
}
$page = new globals();
$page->set_page('foobar');
someFunction($page);
$someObject->renderPage($page);
require_once('specificScript.php');
//inside required script:
echo $page->page;