【问题标题】:PHP Trait Override Protected Trait MethodPHP Trait 覆盖受保护的 Trait 方法
【发布时间】:2016-09-11 23:26:08
【问题描述】:

我正在处理的作曲家包有问题。它实现了一个特征 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 类的行为。

任何帮助将不胜感激。

【问题讨论】:

  • 您还应该将subscriptions 作为参数传递。如果你保持原样,它可能会在你使用 trait 的地方抛出错误,而你还有其他东西而不是 subscriptions 数组。

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


【解决方案1】:

在您的课程中,您可以执行以下操作,注意函数名称前的 T 您可以将其更改为真正的别名。

use billable {
    updateSubscriptionsToPaymentMethod as tUpdateSubscriptionsToPaymentMethod;
}

然后只需在类中添加所需的功能:

    public function updateSubscriptionsToPaymentMethod(){
      ...
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多