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


Unset child object static variable from abstract parent class php

我正在使用Laravel,它是Validators。

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

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'
    );  
}

下面是基本的验证器类:

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;
    }
}

ResellerControllerstatic::$rules[$key]的不安是行不通的。

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

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

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

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

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

愚蠢的错误:)