我试图将数组推入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();
没有工作。
答案 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:
此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。