Hola a todos. Estoy creando un sistema de validacion como parte del proceso de aprendizaje (ya se que los frameworks lo hace pero necesito saber como funciona). Para eso Tengo una carpeta llamada
class dentro de mi proyecto donde obviamente guardo las clases y dentro una carpeta llamada
Validations donde dentro las clases
ValidationClass, isTextValidationClass y isNumerosValidationClass por el momento. Cada una de las clases se llama igual que el archivo. Pues la clase ValidationClass es la clase padre y el resto son hijas. El código de la clase
ValidationClass es el siguiente:
<?php
/**
* User: Dark_Stone
* Date: 12/06/2017
* Time: 23:50
*/
class ValidationClass
{
protected static function canBeValidated($dato)
{
/*
* Este metodo devuelve false y la clase hija que se haga cargo entonces retornará true
* Indicando que se puede hacer cargo de la validacion.
* */
return false;
}
public static function validar($datos)
{
//Instancia la clase
$validate = new ValidationClass();
//Obtener los hijos en un array
$childs = $validate->getChilds();
//Recorrer el array buscando a ver quien puede validar el dato
foreach ($childs as $child) {
if ($child::canBeValidated($datos))
return $child::validar($datos);
}
}
private function getChilds()
{
//Metodo para determinar los hijos
/*Un array vacio para guardar los nombres de las clases que retornen true
* a la clase padre
*/
//Obtener la direccion de los archivos de validacion
//recorrer la carpeta buscando quien coincida con la clase
while (false !== ($entry = $folder->read()))
if ($entry != '..' && $entry != '.' && $entry != 'ValidationClass.php') {
include $entry; //Incluimos cada archivo
$ischildren = false;
foreach ($parents as $campo => $valor)
if ($valor == 'ValidationClass') {
$ischildren = true;
break;
}
if ($ischildren)
$array[] = $className;
}
return $array;
}
}
Y la clase
isTextValidationClass por ejemplo, tiene el código de la siguiente forma (aun está en construccion)
<?php
/**
* User: Dark_Stone
* Date: 14/06/2017
* Time: 17:53
*/
class isTextValidationClass extends ValidationClass
{
protected static function canBeValidated($datos)
{
}
public static function validar($dato)
{
{
return "Es un string"; //Es un ejemplo de que hacer si es string
}
}
}
Eso me permite hacer algo como esto
$datos = "Esto es un String" //Ejemplo de string
$validar = ValidationClass::validar($datos);
echo $validar;
Pero mi pregunta (ya era hora de que hiciera una despues de tanta explicacion) es: Como puedo validar en 2 métodos a la vez? o sea, saber por ejemplo si es string y si tiene mas de 15 caracteres? Usando 2 clases
isTextValidationClass y
MaxLengthValidationClass. Pense en pasarlo como parametros
$datos = "Esto es un String" //Ejemplo de string
$anotherValidation = "MaxLengthValidationClass";
$validar = ValidationClass::validar($datos,$anotherValidation);
echo $validar;
Pero no estoy seguro de cómo hacerlo. ¿Alguna idea por favor?