这是在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;
}
}
你的代码没问题 - 在PHP 5.6之前,数组无法声明为常量,因此静态方法可能是最好的选择。你应该考虑通过注释将此变量标记为常量:
/** @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');
}
}
class MyClass
{
public static function getMyArray()
{
static $myArray = array('test1','test2','test3');
return $myArray;
}
}
const
数组。请参见我之前的解释。class MyClass
{
const MY_ARRAY = array('test1','test2','test3');
public function getMyArray()
{
return MY_ARRAY;
}
}
$
前缀,这表示它们是不可变的。 $foo
是一个变量; FOO
不是。此外,常量名称始终大写,至少在我接触过的编程语言中是如此。这不是由编译器强制执行的;它只是一种(几乎?)普遍的编码样式约定。可见性关键字public
、protected
和private
不适用于常量。最后,static
可能会或可能不会应用,这取决于您是否希望该函数是static
。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) }
class foo {
const KEYS = [1, 3, 6, 7];
}
//
echo foo::KEYS[0]; // 1