【问题标题】:Unset child object static variable from abstract parent class php从抽象父类php取消设置子对象静态变量
【发布时间】:2014-12-03 11:10:25
【问题描述】:

我正在使用 Laravel,它是验证器。

我的控制器中有以下代码:

class ResellerController extends BaseController{

    public function add() {

        //some code before

        $userValidator =  new App\Services\Validators\UserCreateValidator();
        //HERE I WANT TO REMOVE THE company KEY FROM THE RULES IN THE USERS CREATE VALIDATOR
        $userValidator->removeRule('company');      

        //code execution continues      
    }
}

UserCreateValidator 扩展了一个父 Validator 类:

namespace App\Services\Validators;

class UserCreateValidator extends Validator {

    public static $rules = array(
        'firstName' => 'required',
        'lastName' => 'required',
        'email' => 'required|email|unique:users',
        'company' => 'required'
    );  
}

这里是基本的 Validator 类:

namespace App\Services\Validators;

abstract class Validator {

    /**
     * Validation rules
     * @var array
     */
    public static $rules;

    //THIS CODE DOES NOT WORK IN THE CONTROLLER UP
    public static function removeRule($ruleKey){

        if(is_array($ruleKey))
        {
            foreach($ruleKey as $key)
            {
                if(!array_key_exists($key, static::$rules)) continue;

                unset(static::$rules[$key]);
            }

            return true;
        }

        if(!array_key_exists($ruleKey, static::$rules)) //return false;

        unset(static::$rules['company']);

        return true;
    }
}

ResellerController 中取消设置static::$rules[$key] 不起作用。

我可以在 XDEBUG 会话中(在执行此行之后)看到 static::$rules['company'] 仍然作为属性存在于 UserCreateValidator 中。

我认为后期静态绑定应该可以解决这个问题? 怎么了?

【问题讨论】:

  • 只是为了测试...如果你把removeRule函数放在UserCreateValidator里面可以吗?

标签: php laravel abstract-class static-variables late-static-binding


【解决方案1】:

问题解决了。它在以下的评论部分:

if(!array_key_exists($ruleKey, static::$rules)) //return false;

取消return false 的注释后,取消设置工作正常。

愚蠢的错误:)

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 2011-08-05
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多