在面向对象的PHP中将数组关联并推送到变量中

时间:2018-04-18 13:59:31

标签: php arrays oop push

我试图将数组推入php7中的变量。我的代码是:

public $services = array(
    '01' => 'Canada Post - Priority',
    '02' => 'Canada Post - Regular Parcel',
    '03' => 'Canada Post - Xpresspost',
    '04' => 'Purolator Express 9AM',
    '05' => 'Purolator Express 1030AM',
    '06' => 'Purolator Express',
    '07' => 'Purolator Ground',
);

我希望推动我以这种方式获得的数组,而不是受损的代码部分

public function easypost_database()
    {

        \EasyPost\EasyPost::setApiKey('mykey');
        $cas = \EasyPost\CarrierAccount::all();
        $carriers = array();
        foreach($cas as $key=>$value) {
            $carriers[] = $value['type'];

       }

       return $carriers;
   }

我的数组$运营商看起来像那样;

Array ( [0] => CanadaPostAccount 
[1] => PurolatorAccount )

问题在于,当我将变量与我的数组相关联时,我的代码会中断。

public $services = $carriers;

public $services = $this->easypost_database();

没有工作。

1 个答案:

答案 0 :(得分:1)

你在做什么不会工作,而且它的设计基本上很差。

如果您需要在定义$carriers的类中使用easypost_database(),则应该在创建此对象时注入此依赖项。

你有:

class MyClass {

   protected $services;

   public function __construct(array $services) {
     $this->services = $services;
   }
}

在不了解您的系统的情况下,您无法猜测如何解析依赖关系,或者您是否正在使用任何类型的容器或服务定位器。但简单地说,为了实例化这个对象,你需要做类似的事情:

\EasyPost\EasyPost::setApiKey('mykey');
$cas = \EasyPost\CarrierAccount::all();
$carriers = [];
foreach($cas as $key=>$value) {
    $carriers[] = $value['type'];
}

$foo = new MyClass($carriers);

现在,您可以在班级内访问$this->services

但是属性定义需要能够在编译时解析,因此您想要使用的表达式永远不会起作用。

来自manual

  

此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。