首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:扩展静态成员数组

问PHP:扩展静态成员数组
EN

Stack Overflow用户
提问于 2010-05-24 02:28:04
回答 2查看 1.4K关注 0票数 2

我有以下场景:

代码语言:javascript
复制
class A { public static $arr=array(1,2); }
class B extends A { public static $arr=array(3,4); }

有没有办法将这两个数组组合在一起,使B::$arr成为1,2,3,4

我不需要更改这些数组,但我不能声明它们为als常量,因为PHP不允许常量数组。https://stackoverflow.com/questions/ask PHP手册指出,我只能赋值字符串和常量,所以parent::$arr + array(1,2)不能工作,但我认为应该可以这样做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-24 02:41:22

你是对的,你只能在声明静态变量时赋值文字和常量。解决方法是在声明类后立即在代码中赋值。在Java中,你可以用静态初始化器很好地做到这一点,但PHP也不支持这些,所以我们必须自己定义和调用一个方法:

代码语言:javascript
复制
class A { public static $arr=array(1,2); }
class B extends A {
  public static $arr;
  public static function init() {
    self::$arr = array_merge(parent::$arr, array(3,4));
  }
}; B::init();

还要注意使用array_merge而不是联合(+)运算符-联合运算符不会像您希望的那样组合数组,因为它们具有相同的数字键-第一个是array(0=>1, 1=>2),第二个是array(0=>3, 1=>4);它们的联合将只包含每个键一次,因此您将根据联合的顺序得到(1,2)或(3,4)。

票数 5
EN

Stack Overflow用户

发布于 2010-05-24 02:45:06

是的,你只需要有点想象力,因为你不能定义一个静态变量。

代码语言:javascript
复制
<?php

class A 
{
    public static $arr = array(1, 2);
    public static function getArr(){ return self::$arr; }
}

class B extends A 
{
    public static $arr = array(3, 4);
    public static function getArr(){ return array_merge(parent::$arr, self::$arr); }
}


print_r( A::getArr() );
print_r( B::getArr() );

输出:

代码语言:javascript
复制
Array
(
    [0] => 1
    [1] => 2
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)

这也很好,因为你也可以访问原始数组:

代码语言:javascript
复制
print_r( A::$arr );
print_r( B::$arr );

Array
(
    [0] => 1
    [1] => 2
)
Array
(
    [0] => 3
    [1] => 4
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2892911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档