从抽象父类php中取消设置子对象静态变量
我正在使用Laravel和它的验证器 我的控制器中有以下代码:从抽象父类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
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中,它会工作吗?