PHP特征覆盖受保护的特征方法

时间:2016-09-11 23:26:08

标签: php laravel laravel-5.2 traits laravel-cashier

我正在处理我正在处理的作曲家包。它实现了一个特性Billable。

trait Billable
{
/**
     * Update the payment method token for all of the user's subscriptions.
     *
     * @param  string  $token
     * @return void
     */
    protected function updateSubscriptionsToPaymentMethod($token)
    {
        foreach ($this->subscriptions as $subscription) {
            if ($subscription->active()) {
                BraintreeSubscription::update($subscription->braintree_id, [
                    'paymentMethodToken' => $token,
                ]);
            }
        }
    }
}

我试图在我的班级中重写这个方法

class Organisation extends Model
{

    use Billable;

    /**
     * Update the payment method token for all of the user's subscriptions.
     *
     * @param  string  $token
     * @return void
     */
    protected function updateSubscriptionsToPaymentMethod($token)
    {
        foreach ($this->subscriptions as $subscription) {
            if ($subscription->active()) {
                BrntreeSubscription::update($subscription->braintree_id, [
                    'paymentMethodToken' => $token,
                ]);
            }
        }
    }
}

但该方法未被覆盖。作为一个测试我覆盖了一些公共功能,他们工作正常,这是一个特点的限制?我试图在网上找到答案但是做得很短。

我试图覆盖此函数,因为我需要自定义BraintreeSubscription类的行为。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

在你的班级中,你可以在功能名称之前做以下通知T,你可以改变它作为任何真正的别名。

use billable {
    updateSubscriptionsToPaymentMethod as tUpdateSubscriptionsToPaymentMethod;
}

然后只需在类中添加所需的函数:

    public function updateSubscriptionsToPaymentMethod(){
      ...
   }