web-dev-qa-db-ja.com

すべてのファイルで利用できるPHPでグローバル定数を定義する最良の方法は何ですか?

グローバルな、つまりすべてのPHPファイルで利用可能な)定数を定義する最良の方法は何ですか?

PDATE:定数とクラス定数の違いは何ですか?それらは交換可能に使用できますか?

21
cldy1020

他のすべてのスクリプトに含まれるtop .phpファイルで定数を定義します。それはあなたのフロントコントローラー、あなたの設定ファイル、またはこの単一の目的のために作成されたファイルかもしれません。

!defined('MY_CONST') && define('MY_CONST', 'hello');
23
Samy Dindane

以下をせよ:

define("CONSTANT_NAME","value");

他のphpファイルからこの定数にアクセスする場合は、それを含める必要があります。

include_once("thefilewiththeconstant.php");
8
Sebastian Breit

PHPファイル全体でグローバル定数を使用する場合、オブジェクト指向の原則を使用し、関連するクラスでこれらを定義することをお勧めします。PHPに組み込まれたspl_autoload_register()関数を使用すると、後のすべてのクラスを定義して、関連する「グローバルクラス」を拡張し、どこにでも手動でファイルを含めることを心配する必要はありません。そのグローバルクラスの後のすべての子クラスは、常に関連するグローバル変数にアクセスできます。クラス内のグローバル定数は、韻や理由なしにすべてをグループ化するのではなく、何らかの方法で関連しています

1
user6659166

より良い方法は、定数が何かに割り当てられているかどうかを確認し、何にも割り当てられていない場合はそれを割り当て、それ以外の場合はNULLに割り当ててから定数に割り当てます

defined("FOO") ? null : define("FOO", "BAR");
0
Rust

定数を作成するファイルに関係なく、定数を使用するファイルにそれを要求/含める必要があります。

それ以外の場合は$ _SESSIONグローバルを使用できますが、これらの各ファイルのコードの先頭でsession_start()によるセッションの初期化が必要です。

0
inhan

これをチェックして

<?php
//Global scope variables
$a = 1;
$b = 2;

 function Sum()
 {
global $a, $b;

$b = $a + $b;
 } 

Sum();
echo $b;
?>
0

場合によります。あなたの状況では、define()を使用します。これは、使用する構文がよりコンパクトになるためです。しかしdefine()は、PHP <7.0の場合にのみスカラー値を保持できます。つまり、連想配列が必要な場合、つまり、$GLOBALSまたはPHP> = 7.0。

// Storing a single value works fine with define
define( 'ROOT_DIR', dirname(dirname(__FILE__)) . '/' );

// But not for complex data types like this array
$USERPIC_PARAMS = array(
            "user_root"       => "images/users",
            "padding_length"    => 8,
            "split_length"      => 4,
            "hash_length"         => 12,
            "hide_leftover"     => false
    );

// Then you need $GLOBALS
$GLOBALS['USERPIC_PARAMS']  = $USERPIC_PARAMS;
// Or in PHP >=7.0
define( 'USERPIC_PARAMS', $USERPIC_PARAMS );

// output your define
echo ROOT_DIR;
// output your $GLOBALS var
echo $GLOBALS['USERPIC_PARAMS'];
// output in PHP >=7.0 your constant
echo USERPIC_PARAMS;
0
Hexodus