これはphpで配列を定数として持つ唯一の方法ですか、それともこの悪いコードですか:
class MyClass
{
private static $myArray = array('test1','test2','test3');
public static function getMyArray()
{
return self::$myArray;
}
}
これはphpで配列を定数として持つ唯一の方法ですか、それともこの悪いコードですか:
class MyClass
{
private static $myArray = array('test1','test2','test3');
public static function getMyArray()
{
return self::$myArray;
}
}
コードは問題ありません。バージョン5.6より前のPHPでは配列を定数として宣言できないため、静的なアプローチがおそらく最善の方法です。コメントを使用して、この変数を定数としてマークすることを検討する必要があります。
/** @const */
private static $myArray = array(...);
PHP 5.6.0以降では、配列を定数として宣言できます。
const myArray = array(...);
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'));
私は自分で答えを探してこのスレッドに出くわしました。配列が必要なすべての関数に配列を渡す必要があると考えた後、配列とmysqlの経験から、シリアライズが機能するかどうか疑問に思いました。もちろんそうです。
define("MYARRAY", serialize($myarray));
function something() {
$myarray= unserialize(MYARRAY);
}
以下を使用することをお勧めします。
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;
}
}
静的とマークすることは、良い代替手段です。これは、静的配列をカプセル化して一定の動作を取得する例です。
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) }
PHP 5.6 以降では、定数をスカラー式として定義できるようになりました。また、配列定数を定義することもできます。
class foo {
const KEYS = [1, 3, 6, 7];
}
//
echo foo::KEYS[0]; // 1