編集:
私はあなたの問題に対する最も簡単で最も冗長でない解決策を含めるのを忘れました。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
に、何も設定されていない新しいインスタンスが作成されます。
グローバル変数を使用する必要がありますか?
いいえ、本当に必死でない限り、グローバルを使用しないでください
これは問題に対する正しいアプローチですか?
いいえ、機能しない場合は正しくありません(IMHO)。
さて、何ですか、あなたは尋ねるかもしれません。これを行うにはいくつかの方法があります。
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;