dozug64282 2018-04-18 13:59
浏览 64
已采纳

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

I'm trying to push an array into a variable in php7. My code is:

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',
);

Instead of the harded code part I wish to push my array that I've obtain in this way

public function easypost_database()
    {

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

       }

       return $carriers;
   }

My array $carriers looks like that;

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

The problem is that when I associate my variable with my array my code breaks.

public $services = $carriers;

and

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

won't work.

  • 写回答

1条回答 默认 最新

  • duanhai4046 2018-04-18 14:38
    关注

    What you are doing wont work, and it is basically poorly designed.

    If you need to use $carriers inside the class where you define easypost_database(), you should probably inject this dependency when creating this object.

    You'd have:

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

    Without knowing more about your system it's not possible to guess how are you resolving your dependencies or if you are using any type of container or service locator. But putting it simply, to instantiate this object you'd need to do something like:

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

    And now you'd be able to access $this->services from within your class.

    But properties definition need to be able to be resolved at compile time, so the kind of expression you want to use would never work.

    From the manual:

    This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch