从抽象父类php中取消设置子对象静态变量

从抽象父类php中取消设置子对象静态变量,php,laravel,abstract-class,static-variables,late-static-binding,Php,Laravel,Abstract Class,Static Variables,Late Static Binding,我正在使用Laravel和它的验证器 我的控制器中有以下代码: class ResellerController extends BaseController{ public function add() { //some code before $userValidator = new App\Services\Validators\UserCreateValidator(); //HERE I WANT TO REMOVE TH

我正在使用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扩展父验证程序类:

namespace App\Services\Validators;

class UserCreateValidator extends Validator {

    public static $rules = array(
        'firstName' => 'required',
        'lastName' => 'required',
        'email' => 'required|email|unique:users',
        'company' => 'required'
    );  
}
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;
    }
}
下面是基本验证器类:

namespace App\Services\Validators;

class UserCreateValidator extends Validator {

    public static $rules = array(
        'firstName' => 'required',
        'lastName' => 'required',
        'email' => 'required|email|unique:users',
        'company' => 'required'
    );  
}
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;
    }
}
在经销商控制器中取消设置静态::$rules[$key]无效

我可以在执行这一行后的XDEBUG会话中看到静态::$rules['company']仍然作为属性存在于UserCreateValidator中

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

问题解决了。这是在评论部分在:

if(!array_key_exists($ruleKey, static::$rules)) //return false;
在我取消注释返回false之后,未设置的工作正常


愚蠢的错误:

只是为了测试。。。如果将removeRule函数放入UserCreateValidator中,它会工作吗?