質問

これに失敗した:

 define('DEFAULT_ROLES', array('guy', 'development team'));

どうやら、定数を持ちこたえることができなarrays.には、どうするのがベストなのに。

define('DEFAULT_ROLES', 'guy|development team');

//...

$default = explode('|', DEFAULT_ROLES);

このような不要なのです。

役に立ちましたか?

解決

注:これは受け入れ答えている間、それはPHPで5.6+あなたがconstの配列を持つことができることは注目に値します - を見ますの下のアンドレアFaulds'の答え。

あなたはまた、あなたの配列をシリアル化し、その後、一定にそれを置くことができます:

# define constant, serialize array
define ("FRUITS", serialize (array ("apple", "cherry", "banana")));

# use it
$my_fruits = unserialize (FRUITS);

他のヒント

PHP 5.6ので、あなたがconstと配列定数を宣言することができます:

<?php
const DEFAULT_ROLES = array('guy', 'development team');

あなたが期待するように短い構文は、あまりにも機能します:

<?php
const DEFAULT_ROLES = ['guy', 'development team'];

あなたはPHP 7持っている場合、あなたは最終的にあなたが最初にしようとしたのと同様に、define()を使用することができます:

<?php
define('DEFAULT_ROLES', array('guy', 'development team'));

あなたはクラスの静的変数として保存することができます:

class Constants {
    public static $array = array('guy', 'development team');
}
# Warning: array can be changed lateron, so this is not a real constant value:
Constants::$array[] = 'newValue';

あなたは、配列が他の人によって変更することができるという考えが気に入らない場合、ゲッターは役立つかもしれない:

class Constants {
    private static $array = array('guy', 'development team');
    public static function getArray() {
        return self::$array;
    }
}
$constantArray = Constants::getArray();

編集

はPHP5.4ので、中間変数、すなわち、以下の作品を必要とせずに、配列の値にアクセスすることも可能です

$x = Constants::getArray()['index'];

PHP 5.6 以降を使用している場合は、Andrea Faulds の回答を使用してください

こんな感じで使ってます。それが他の人にも役立つことを願っています。

config.php

class app{
    private static $options = array(
        'app_id' => 'hello',
    );
    public static function config($key){
        return self::$options[$key];
    }
}

ファイル内で、定数が必要です。

require('config.php');
print_r(app::config('app_id'));

これは私が使用するものです。それはsoulmergeによって提供された例に似ていますが、この方法は、あなたは完全な配列または配列における単一の値のみを取得することができます。

class Constants {
    private static $array = array(0 => 'apple', 1 => 'orange');

    public static function getArray($index = false) {
        return $index !== false ? self::$array[$index] : self::$array;
    }
}

このようにそれを使用します:

Constants::getArray(); // Full array
// OR 
Constants::getArray(1); // Value of 1 which is 'orange'

あなたは定数でJSON文字列として保存することができます。そして、アプリケーションビューのポイントを、JSONは、他のケースで役立つことができます。

define ("FRUITS", json_encode(array ("apple", "cherry", "banana")));    
$fruits = json_decode (FRUITS);    
var_dump($fruits);

PHP 5.6以降では、

以下のようなconstキーワードを使用して一定の配列を定義することができます
const DEFAULT_ROLES = ['test', 'development', 'team'];

と異なる要素は、以下のようにアクセスすることができます:

echo DEFAULT_ROLES[1]; 
....

PHP 7以降で、一定の配列は、以下のようにdefineを使用して定義することができます。

define('DEFAULT_ROLES', [
    'test',
    'development',
    'team'
]);

と異なる要素には以前と同じ方法でアクセスすることができます。

私はそれが少し古い質問ですが、ここに私の解決策である知ってます:

<?php
class Constant {

    private $data = [];

    public function define($constant, $value) {
        if (!isset($this->data[$constant])) {
            $this->data[$constant] = $value;
        } else {
            trigger_error("Cannot redefine constant $constant", E_USER_WARNING);
        }
    }

    public function __get($constant) {
        if (isset($this->data[$constant])) {
            return $this->data[$constant];
        } else {
            trigger_error("Use of undefined constant $constant - assumed '$constant'", E_USER_NOTICE);
            return $constant;
        }
    }

    public function __set($constant,$value) {
        $this->define($constant, $value);
    }

}
$const = new Constant;

私はまた、私は$ののconst変数スーパーグローバルを作ることができるので、PHPのためには、runkitインストールさせ定数のオブジェクトと配列を格納するのに必要なので、私はそれを定義します。

あなたは$const->define("my_constant",array("my","values"));として使用することができますまたは単に$const->my_constant = array("my","values");

の値を取得するには、単に呼び出す$const->my_constant;

私たちはソリューションを即興することができます爆発や機能を内破使用します:

$array = array('lastname', 'email', 'phone');
define('DEFAULT_ROLES', implode (',' , $array));
echo explode(',' ,DEFAULT_ROLES ) [1]; 

このはemailをエコーされます。

あなたはそれがより多くのそれを最適化したい場合は、

あなたはこのようなあなたのための反復的な事をする2つの機能を定義することができます:

//function to define constant
function custom_define ($const , $array) {
    define($const, implode (',' , $array));
}

//function to access constant  
function return_by_index ($index,$const = DEFAULT_ROLES) {
            $explodedResult = explode(',' ,$const ) [$index];
    if (isset ($explodedResult))
        return explode(',' ,$const ) [$index] ;
}

お役に立てば幸いです。コーディングハッピーます。

SER / deserまたはエンコードのいくつかの並べ替えを行う/デコードトリックは醜いようだとあなたは定数を使用しようとしているとき、正確にあなたが何をしたか覚えておく必要があります。私はアクセサを持つクラスプライベート静的変数はまともな解決策だと思うが、私はあなたに、より良いものをやります。ただ、定数配列の定義を返すのpublic staticのgetterメソッドを持っています。これは、余分なコードの最小値を必要とし、アレイの定義が誤って変更することができない。

class UserRoles {
    public static function getDefaultRoles() {
        return array('guy', 'development team');
    }
}

initMyRoles( UserRoles::getDefaultRoles() );
あなたは本当にそれが定義された定数のように見えるようにしたい場合は、

あなたはそれをすべて大文字の名前を与えることができるが、名前の後に「()」の括弧を追加することを忘れないように混乱することでしょう。

class UserRoles {
    public static function DEFAULT_ROLES() { return array('guy', 'development team'); }
}

//but, then the extra () looks weird...
initMyRoles( UserRoles::DEFAULT_ROLES() );

私はあなたがあなたが求めていた定義()の機能に近づくようにする方法は、グローバル作ることができますが、あなたが本当にとにかくスコープ定数名をすべきであり、グローバルを避けたとします。

あなたはこのように定義することができます。

define('GENERIC_DOMAIN',json_encode(array(
    'gmail.com','gmail.co.in','yahoo.com'
)));

$domains = json_decode(GENERIC_DOMAIN);
var_dump($domains);

PHP7+

としてのPHPの7日ご利用いただける define() 機能を定義する一定の配列:

define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

echo ANIMALS[1]; // outputs "cat"

でもクラスで例えば..連想配列を扱うことができます。

class Test {

    const 
        CAN = [
            "can bark", "can meow", "can fly"
        ],
        ANIMALS = [
            self::CAN[0] => "dog",
            self::CAN[1] => "cat",
            self::CAN[2] => "bird"
        ];

    static function noParameter() {
        return self::ANIMALS[self::CAN[0]];
    }

    static function withParameter($which, $animal) {
        return "who {$which}? a {$animal}.";
    }

}

echo Test::noParameter() . "s " . Test::CAN[0] . ".<br>";
echo Test::withParameter(
    array_keys(Test::ANIMALS)[2], Test::ANIMALS["can fly"]
);

// dogs can bark.
// who can fly? a bird.

はい、あなたは定数として配列を定義することができます。以降ののPHP 5.6から、スカラー式として定数を定義することが可能であり、一定の配列をを定義することものことが可能です。それは予期しない結果を引き起こす可能性がありますように、リソースとして定数を定義することが可能であるが、それは避けるべきである。

<?php
    // Works as of PHP 5.3.0
    const CONSTANT = 'Hello World';
    echo CONSTANT;

    // Works as of PHP 5.6.0
    const ANOTHER_CONST = CONSTANT.'; Goodbye World';
    echo ANOTHER_CONST;

    const ANIMALS = array('dog', 'cat', 'bird');
    echo ANIMALS[1]; // outputs "cat"

    // Works as of PHP 7
    define('ANIMALS', array(
        'dog',
        'cat',
        'bird'
    ));
    echo ANIMALS[1]; // outputs "cat"
?>

このリンクするの基準と

幸せなコーディングを持っています。

あなたは2009年からこれを見ている、とあなたはAbstractSingletonFactoryGeneratorsが気に入らない場合は、

、ここではいくつかの他のオプションがあります。

割り当てられたときに

、配列は「コピー」しているのを忘れないでください、またはこのような場合には、返されたので、あなたは実質的に毎回同じ配列を取得しています。 (PHPで配列のコピー・オン・ライト動作を参照してください。)

function FRUITS_ARRAY(){
  return array('chicken', 'mushroom', 'dirt');
}

function FRUITS_ARRAY(){
  static $array = array('chicken', 'mushroom', 'dirt');
  return $array;
}

function WHAT_ANIMAL( $key ){
  static $array = (
    'Merrick' => 'Elephant',
    'Sprague' => 'Skeleton',
    'Shaun'   => 'Sheep',
  );
  return $array[ $key ];
}

function ANIMAL( $key = null ){
  static $array = (
    'Merrick' => 'Elephant',
    'Sprague' => 'Skeleton',
    'Shaun'   => 'Sheep',
  );
  return $key !== null ? $array[ $key ] : $array;
}

定数はスカラー値のみを含めることができ、私はあなたが、配列のシリアライズ(またはJSONエンコードされた表現)を格納勧めます。

私はeyzeに同意し、定数は、アプリケーションの全体の生命のために必要な単一の値値になる傾向があります。あなたはこの種のもののために代わりに定数の設定ファイルを使用して考えるかもしれません。

あなたが本当に一定の配列が必要な場合は、多少模倣アレイへの命名規則を使用することができます。例えばDB_NAME、DB_USER、DB_HOSTなどのための

これが正しい、あなたは一定の、唯一のスケーラーとヌルのための配列を使用することはできません。定数のための配列を使用してのアイデアは、私には少し後方に見える。

私がやることをお勧めは何の代わりに、独自の定数クラスを定義し、定数を取得するためにそれを使用されます。

define('MY_ARRAY_CONSTANT_DELIMETER', '|');       
define('MY_ARRAY',implode(MY_ARRAY_CONSTANT_DELIMETER,array(1,2,3,4)));

//retrieving the array
$my_array = explode(MY_ARRAY_CONSTANT_DELIMETER, MY_ARRAY);

また、定数のシリーズに配列を爆発することがあります。 (かなり古い学校のソリューション)は、すべての後、配列はの定数の、あなたは、あるのグローバル、速い、検索の特定のキーのためにそれを必要とする唯一の理由そう。

したがって、この

define('DEFAULT_ROLES', array('guy', 'development team'));

に変わります。

define('DEFAULT_ROLES_0', 'guy');
define('DEFAULT_ROLES_1', 'development team');

はい、名前空間の汚染(と、それを防ぐために、接頭辞のロット)を考慮に入れてあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top