65

これはphpで配列を定数として持つ唯一の方法ですか、それともこの悪いコードですか:

class MyClass
{
    private static $myArray = array('test1','test2','test3');

    public static function getMyArray()
    {
       return self::$myArray;
    } 
}
4

7 に答える 7

80

コードは問題ありません。バージョン5.6より前のPHPでは配列を定数として宣言できないため、静的なアプローチがおそらく最善の方法です。コメントを使用して、この変数を定数としてマークすることを検討する必要があります。

/** @const */
private static $myArray = array(...);

PHP 5.6.0以降では、配列を定数として宣言できます。

const myArray = array(...);
于 2012-08-26T10:08:33.763 に答える
19

PHP 5.6.0 (2014 年 8 月 28 日) から、配列定数を定義できるようになりました ( PHP 5.6.0 の新機能を参照)。

class MyClass
{
    const MYARRAY = array('test1','test2','test3');

    public static function getMyArray()
    {
        /* use `self` to access class constants from inside the class definition. */
        return self::MYARRAY;
    } 
}

/* use the class name to access class constants from outside the class definition. */
echo MyClass::MYARRAY[0]; // echo 'test1'
echo MyClass::getMyArray()[1]; // echo 'test2'

$my = new MyClass();
echo $my->getMyArray()[2]; // echo 'test3'

PHP 7.0.0 (2015 年 12 月 3 日) では、配列定数は define() で定義できます。PHP 5.6 では、const でしか定義できませんでした。( PHP 7.0.0 の新機能を参照)

define('MYARRAY', array('test1','test2','test3'));
于 2015-05-04T13:53:25.213 に答える
9

私は自分で答えを探してこのスレッドに出くわしました。配列が必要なすべての関数に配列を渡す必要があると考えた後、配列とmysqlの経験から、シリアライズが機能するかどうか疑問に思いました。もちろんそうです。

define("MYARRAY",     serialize($myarray));

function something() {
    $myarray= unserialize(MYARRAY);
}
于 2013-10-24T07:38:24.353 に答える
2

以下を使用することをお勧めします。

class MyClass
{
    public static function getMyArray()
    {
       return array('test1','test2','test3');
    } 
}

このようにして const 配列があり、クラス自体のメソッドでさえ、誰もそれを変更できないことが保証されます。

可能なマイクロ最適化 (最近の PHP コンパイラがどの程度最適化するかはわかりません):

class MyClass
{
    public static function getMyArray()
    {
       static $myArray = array('test1','test2','test3');
       return $myArray;
    } 
}
于 2015-02-15T19:15:17.240 に答える
1

静的とマークすることは、良い代替手段です。これは、静的配列をカプセル化して一定の動作を取得する例です。

class ArrayConstantExample {

    private static $consts = array(
        'CONST_MY_ARRAY' => array(
            1,2,3,4
        )
    );

    public static function constant($name) {
        return self::$consts[$name];
    }

}

var_dump( ArrayConstantExample::constant('CONST_MY_ARRAY') );

版画:

array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
于 2014-10-10T20:00:37.107 に答える
1

PHP 5.6 以降では、定数をスカラー式として定義できるようになりました。また、配列定数を定義することもできます。

class foo {
   const KEYS = [1, 3, 6, 7];
}
//
echo foo::KEYS[0]; // 1
于 2016-01-06T11:01:12.800 に答える