Skip to content

Commit

Permalink
Static variables where possible to reduce memory usage
Browse files Browse the repository at this point in the history
  • Loading branch information
Nil Portugués committed Sep 18, 2015
1 parent 96cd438 commit 86f4c75
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 30 deletions.
23 changes: 13 additions & 10 deletions examples/basic_validation.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class UserValidator
/**
* @var NilPortugues\Validator\Validator
*/
private $validator;
private static $validator;

/**
* @var array
Expand All @@ -61,11 +61,13 @@ class UserValidator
private $isValid = true;

/**
* @param \NilPortugues\Validator\Validator $validator
*
*/
public function __construct(\NilPortugues\Validator\Validator $validator)
public function __construct()
{
$this->validator = $validator;
if(!isset(self::$validator)) {
self::$validator = new \NilPortugues\Validator\Validator();
}
}

/**
Expand Down Expand Up @@ -98,7 +100,7 @@ public function getErrors()
*/
private function validateGender(Request $request)
{
$gender = $this->validator->isInteger('gender');
$gender = self::$validator->isInteger('gender');

$result = $gender
->isRequired()
Expand All @@ -117,7 +119,7 @@ private function validateGender(Request $request)
*/
private function validateEmail(Request $request)
{
$email = $this->validator->isString('email');
$email = self::$validator->isString('email');

$result = $email
->isRequired()
Expand All @@ -135,7 +137,7 @@ private function validateEmail(Request $request)
*/
private function validatePassword(Request $request)
{
$password = $this->validator->isString('password');
$password = self::$validator->isString('password');

$result = $password
->isRequired()
Expand All @@ -156,7 +158,7 @@ private function validatePassword(Request $request)
*/
private function validateUsername(Request $request)
{
$username = $this->validator->isString('username');
$username = self::$validator->isString('username');

$result = $username
->isRequired()
Expand All @@ -169,8 +171,9 @@ private function validateUsername(Request $request)
}
}

$validator = new \NilPortugues\Validator\Validator();
$userValidator = new UserValidator($validator);


$userValidator = new UserValidator();

$request1 = new Request('nilportugues', 'password', 'hello@world.com', '1');
$request2 = new Request('nil', 'password', 'not-an-email.com', '');
Expand Down
20 changes: 10 additions & 10 deletions src/AbstractValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ abstract class AbstractValidator
/**
* @var Validator
*/
protected static $validator;
protected $validator;

/**
* @var ValidatorFunctionMap
*/
protected static $functionMap;
protected $functionMap;

/**
* @var array
Expand All @@ -39,7 +39,7 @@ abstract class AbstractValidator
/**
* @var array
*/
protected static $errorArray = [];
protected $errorArray = [];

/**
* @param Validator $validator
Expand All @@ -48,9 +48,9 @@ abstract class AbstractValidator
*/
public function __construct(Validator $validator, array &$errorMessages, array &$functionMap)
{
self::$validator = $validator;
self::$functionMap = new ValidatorFunctionMap($this, $functionMap);
self::$errorArray = $errorMessages;
$this->validator = $validator;
$this->functionMap = ValidatorFunctionMap::getInstance($this, $functionMap);
$this->errorArray = $errorMessages;
}

/**
Expand Down Expand Up @@ -99,12 +99,12 @@ public function validate($value, $stopOnError = false)
$arguments = array_merge([$value], $condition['arguments']);
}

$isValid = $isValid && self::$functionMap->get(
self::$validator->getPropertyName(),
$isValid = $isValid && $this->functionMap->get(
$this->validator->getPropertyName(),
$condition['key'],
$arguments,
$condition['values'],
self::$errorArray
$this->errorArray
);

if (false === $isValid) {
Expand Down Expand Up @@ -143,7 +143,7 @@ private function getErrorsForValidatorsAsArguments($arguments)
*/
public function setError($error, $propertyName)
{
$this->errors[self::$validator->getPropertyName()][$propertyName] = $error;
$this->errors[$this->validator->getPropertyName()][$propertyName] = $error;

return $this;
}
Expand Down
24 changes: 22 additions & 2 deletions src/ValidatorFunctionMap.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,35 @@ class ValidatorFunctionMap
*/
private $validator;

/**
* @var self
*/
private static $instance;

/**
* @param AbstractValidator $abstractValidator
* @param array $functionMap
* @param array $functionMap
*/
public function __construct(AbstractValidator $abstractValidator, array &$functionMap)
private function __construct(AbstractValidator $abstractValidator, array &$functionMap)
{
$this->validator = $abstractValidator;
$this->functionMap = $functionMap;
}
/**
* @param AbstractValidator $abstractValidator
* @param array $functionMap
* @return ValidatorFunctionMap
*/
public static function getInstance(AbstractValidator $abstractValidator, array &$functionMap)
{
if (!isset(self::$instance)) {
self::$instance = new self($abstractValidator, $functionMap);
}
$i = self::$instance;
$i->validator = $abstractValidator;

return self::$instance;
}

/**
* Gets the function from the function map and runs it against the values.
Expand Down
2 changes: 1 addition & 1 deletion tests/Resources/DummyFileUpload.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class DummyFileUpload
*
* @throws \NilPortugues\Validator\Validation\FileUpload\FileUploadException
*/
public static function isBetween($uploadName)
public static function isBetween($minSize, $maxSize, $format = 'B', $inclusive = false)
{
throw new FileUploadException($uploadName);
}
Expand Down
14 changes: 7 additions & 7 deletions tests/ValidatorFunctionMapTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public function itShouldInvalidArgumentExceptionWhenFunctionNoInMap()
->getMock();

$functionMapArray = [];
$functionMap = new ValidatorFunctionMap($abstractValidator, $functionMapArray);
$functionMap = ValidatorFunctionMap::getInstance($abstractValidator, $functionMapArray);
$errors = [];
$errorValues = [];

Expand All @@ -51,15 +51,15 @@ public function itShouldThrowExceptionWhenErrorMessageDoesNotExist()
->getMock();

$functionMapArray = ['String::isAlpha' => '\NilPortugues\Validator\Validation\String\StringValidation::isAlpha'];
$functionMap = new ValidatorFunctionMap($abstractValidator, $functionMapArray);
$functionMap = ValidatorFunctionMap::getInstance($abstractValidator, $functionMapArray);
$errors = [];
$values = ['@'];

$this->setExpectedException(
'\InvalidArgumentException',
'Validator key \'string.is_alpha\' not found in error file'
);
$functionMap->get('property', 'String::isAlpha', $values, $values, $errors);
$functionMap->get('property', 'StringAttribute::isAlpha', $values, $values, $errors);
}

/**
Expand All @@ -83,13 +83,13 @@ public function itShouldFileUploadException()
->getMock();

$functionMapArray = [
'FileUpload::isBetween' => '\Tests\NilPortugues\Validator\Resources\DummyFileUpload::isBetween',
'FileUploadAttribute::isBetween' => '\Tests\NilPortugues\Validator\Resources\DummyFileUpload::isBetween',
];

$functionMap = new ValidatorFunctionMap($abstractValidator, $functionMapArray);
$values = ['image'];
$functionMap = ValidatorFunctionMap::getInstance($abstractValidator, $functionMapArray);
$values = ['image', 0, 2, 'MB', true];
$errors = ['FileUpload::UPLOAD_ERR_INI_SIZE' => 'error message'];

$this->assertFalse($functionMap->get('image', 'FileUpload::isBetween', $values, $values, $errors));
$this->assertFalse($functionMap->get('image', 'FileUploadAttribute::isBetween', $values, $values, $errors));
}
}

0 comments on commit 86f4c75

Please sign in to comment.