簡體   English   中英

從抽象父類php取消設置子對象靜態變量

[英]Unset child object static variable from abstract parent class php

我正在使用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;
    }
}

的的unsettting static::$rules[$key]ResellerController不起作用。

我可以在XDEBUG會話(執行此行之后)中看到, static::$rules['company']仍作為屬性存在於UserCreateValidator中。

我認為后期靜態綁定應該可以解決此問題? 怎么了?

問題已經解決了。 它在以下內容的評論部分:

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

我取消注釋return false后,unsetting正常工作。

愚蠢的錯誤:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM