php常量数组

php常量数组,php,Php,这是在php中将数组作为常量的唯一方法,还是这段错误代码: class MyClass { private static $myArray = array('test1','test2','test3'); public static function getMyArray() { return self::$myArray; } } 您的代码很好—在5.6版之前的PHP中,数组不能声明为常量,因此静态方法可能是最好的方法。您应该考虑通过以下注

这是在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(...);

我偶然发现了这条线索,自己在寻找答案。经过思考,我必须将数组传递给它需要的每个函数。我对数组和mysql的经验让我怀疑序列化是否有效。当然有

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

function something() {
    $myarray= unserialize(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) }

我建议使用以下方法:

class MyClass
{
    public static function getMyArray()
    {
       return array('test1','test2','test3');
    } 
}
这样,您就有了一个常量数组,并且可以保证没有人可以更改它,甚至类本身中的方法也不能更改

可能的微观优化(不确定PHP编译器目前优化了多少):

从PHP 5.6.0(2014年8月28日)开始,可以定义数组常量(请参阅)

使用PHP 7.0.0(2015年12月3日),可以使用define()定义数组常量。在PHP5.6中,它们只能用const定义。(见附件)


您已经创建了一个静态数组,而不是一个常量数组。静态变量是可变的;常数是不可变的。你的代码还不错,但它没有达到你想要的效果

在PHP5.6中,可以声明
const
数组。请看

也许你想要这样的东西:

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

    public function getMyArray()
    {
       return MY_ARRAY;
    } 
}

请注意,常量没有前缀
$
,这表示它们的不变性
$foo
是一个变量<代码>FOO不是。此外,常量名称总是大写的,至少在我接触过的编程语言中是这样。这不是由编译器强制执行的;它只是一个(几乎?)通用的编码风格约定。可见性关键字
public
protected
private
不适用于常量。最后,
static
可能适用,也可能适用,这取决于您是否希望函数是
static

从PHP5.6开始,可以将常量定义为标量表达式,也可以定义数组常量

class foo {
   const KEYS = [1, 3, 6, 7];
}
//
echo foo::KEYS[0]; // 1

它不是常数?它只是静止的。。。如果你通过方法指向数组,你可以如何操作它。。。我认为在php中不可能将非原语类型声明为常量……我知道它不是常量,这就是我的问题所在。是模拟具有常量行为的数组的唯一方法从PHP 5.6.0(2014年8月28日)开始,可以定义数组常量(注意变量$myArray本身是可以更改的,从这个意义上讲,它不如常量安全。如果您不能使用private或protect,那么我认为在数组上的php中没有安全解决方案。只有在密钥为常量时才有效。但是,当密钥来自定义为在全局范围内使用它,而不是在类上下文中。在某些情况下,它是有用的,但是,我以前使用过这种行为。仅供参考:这并不会使变量保持常量。它只是使它看起来更像代码中的变量。虽然它可能会让开发人员感觉更好,但它并不比其他任何答案更安全ant以防止读者认为这实际上在任何方面都是常量。我的代码将添加到已接受的答案中以封装数组。您的回答有些正确,因为数组仍然可以在同一个类内修改。我要强调的是,您可以在类外访问数组,但不能更改它。
define('MYARRAY', array('test1','test2','test3'));
class MyClass
{
    const MY_ARRAY = array('test1','test2','test3');

    public function getMyArray()
    {
       return MY_ARRAY;
    } 
}
class foo {
   const KEYS = [1, 3, 6, 7];
}
//
echo foo::KEYS[0]; // 1