如何继承雄辩对纯PHP对象的功能(How to inherit Eloquent's fun

2019-10-21 10:01发布

怎样才可以有从第三方包装的纯PHP对象继承Laravels雄辩模型的所有的善良? 见下文:


下面的模型类是由第三方软件包 。 它是框架和ORM无关 ,写在普通PHP。 我不能改变它,只能延长它。 (仅举例)

class APlainPHPModelFromLibrary {

    protected $someAttribute;

    protected $someOtherAttribute;

    //...

    public function someFunction()
    {
        // ...
    }
}

这里是我的这个模型类的Laravel雄辩版本。 我需要从这个类扩展侃侃而谈 。 此外,我需要从上述VanillaPHPModel延伸,以便它能够继承雄辩的方法。 我看不出解决的办法。

class MyEloquentModelVersion extends Eloquent ... extends APlainPHPModelFromLibrary { // ??

    $guarded = [
        'EloquentGoodness',
        'EloquentGoodness'
    ];

    public function belongsTo()
    {
        //...Eloquent goodness
    }

    public function hasMany()
    {
        //,..Eloquent Goodness
    }
}   

Answer 1:

这仅仅是一个建议。 你可能会能够解决它在其他多个方面。

ThirdPartyServiceProvider.php

<?php
    class ThirdPartyServiceProvider extends \Illuminate\Support\ServiceProvider {
        public function register() {
            $this->app->bind('ThirdPartyService', function($app, $third_party_model) {
                return new ThirdPartyService($third_party_model, new MyEloquentModelVersion());
            });
        }
    }

ThirdPartyService.php

<?php
    class ThirdPartyService {
       public $third_party_model         = null;
       public $my_eloquent_model_version = null;

       function __construct(APlainPHPModelFromLibrary $third_party_model, MyEloquentModelVersion $my_eloquent_model_version) {
          $this->third_party_model         = $third_party_model;
          $this->my_eloquent_model_version = $my_eloquent_model_version;
        }

        function translate() {
            // conversion code

            return $this;
        }
    }

在你的控制器:

$tpsp = App::make('ThirdPartyServiceProvider', $third_party_model);

$tpsp->translate()->my_eloquent_model_version;


文章来源: How to inherit Eloquent's functionality on plain PHP objects