私はこのようなコードを持っています:
<?
$a="localhost";
function body(){
global $a;
echo $a;
}
function head(){
global $a;
echo $a;
}
function footer(){
global $a;
echo $a;
}
?>
グローバル変数を1か所で定義し、変数$a
をすべての関数で同時にアクセス可能にする方法はありますか?もっとglobal $a;
を使わずに?
$GLOBALS
配列を代わりに使用できます。
$GLOBALS['a'] = 'localhost';
function body(){
echo $GLOBALS['a'];
}
マニュアルから :
スクリプトのグローバルスコープで現在定義されているすべての変数への参照を含む連想配列。変数名は配列のキーです。
一般的な変数を必要とする一連の関数がある場合は、グローバルではなくプロパティを持つクラスが適しています。
class MyTest
{
protected $a;
public function __construct($a)
{
$this->a = $a;
}
public function head()
{
echo $this->a;
}
public function footer()
{
echo $this->a;
}
}
$a = 'localhost';
$obj = new MyTest($a);
変数が変わらない場合は、 define
を使用できます。
例:
define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!');
function footer()
{
echo FOOTER_CONTENT;
}
変数を$ GLOBALSスーパーグローバル配列に追加します。
$GLOBALS['variable'] = 'localhost';
そして世界的にそれを使う
あるいは、スクリプト全体を通してアクセス可能な定数を使用することもできます。
define('HOSTNAME', 'localhost');
変数が関数の外側で宣言されている場合、その変数はすでにグローバルスコープ内にあります。宣言する必要はありません。しかし、この変数を呼び出す場所からこの変数へのアクセス権が必要です。あなたが関数の中から呼び出しているならば、あなたはglobal
キーワードを使わなければなりません:
$variable = 5;
function name()
{
global $variable;
$value = $variable + 5;
return $value;
}
関数外でglobalキーワードを使用してもエラーにはなりません。このファイルを関数内に含めたい場合は、変数をglobal
として宣言できます。
config.php
global $variable;
$variable = 5;
other.php
function name()
{
require_once __DIR__ . '/config.php';
}
$GLOBALS
も使えます。スーパーグローバルなので、どこからでもアクセスできます。
$GLOBALS['variable'] = 5;
function name()
{
echo $GLOBALS['variable'];
}
選択に応じてどちらかを選択できます。
この答えは非常に遅れていますが、私がしていることは、グローバルスコープの静的変数として、ブール値、配列、および整数の初期値を保持するクラスを設定することです。任意の定数文字列はそのように定義されます。
define("myconstant", "value");
class globalVars {
static $a = false;
static $b = 0;
static $c = array('first' => 2, 'second' => 5);
}
function test($num) {
if (!globalVars::$a) {
$returnVal = 'The ' . myconstant . ' of ' . $num . ' plus ' . globalVars::$b . ' plus ' . globalVars::$c['second'] . ' is ' . ($num + globalVars::$b + globalVars::$c['second']) . '.';
globalVars::$a = true;
} else {
$returnVal = 'I forgot';
}
return $returnVal;
}
echo test(9); ---> The value of 9 + 0 + 5 is 14.
echo "<br>";
echo globalVars::$a; ----> 1
static
キーワードはクラスに存在しなければなりません、そうでなければvars $ a、$ b、および$ cはグローバルにスコープされません。
あなたは質問を書いた方法でこれに答えました - 'define'を使ってください。しかし一度設定すると、定義を変更することはできません。
あるいは、class :: constantのように、クラス内に定数を使ったトリックがあります。静的プロパティを変更したい場合は、そのプロパティを設定する関数を使用して、クラスに静的プロパティを宣言することによって変数を可変にすることもできます。
少し違うと思いましょう。
class globe{
static $foo = "bar";
}
そして、あなたは好きなようにそれを使い、修正することができます。
function func(){
echo globe::$var;
}
もしあなたが変数の代わりに手続き型関数を利用して、あなたがどこにいようとも呼んだ場合はどうなるでしょう。
私はたいてい設定値の集合を作り、それらをreturn文を使って関数の中に入れます。私はグローバルな価値を利用し、特定の機能を呼び出す必要があるところにそれを含めるだけです。
function Host()
{
return "localhost";
}