php - createform - formularios en symfony 4
Cómo comprobar si no hay instancia de alguna clase en symfony2 (6)
Dales una interfaz común y luego
if (!$entity instanceof ShopEntity)
o quedarse con
if (!$entity instanceof User && !$entity instanceof Product && !$entity instanceof Order)
Evitaría crear funciones arbitrarias solo para guardar algunos caracteres en un solo lugar. Por otro lado, si lo necesita "con demasiada frecuencia", ¿puede tener un error de diseño? (En el sentido de "demasiados casos de borde" o tal)
Quiero ejecutar algunas funciones si la entidad es miembro de pocas clases pero no algunas.
Hay una función llamada instanceof
.
Pero hay algo como
if ($entity !instanceof [User,Order,Product])
El manual de PHP dice: http://php.net/manual/en/language.operators.type.php
!($a instanceof stdClass)
Esto es solo una sintaxis escrita lógica y gramaticalmente correcta.
!$class instanceof someClass
Sin embargo, la sintaxis sugerida anteriormente es complicada porque no estamos especificando cuál es exactamente el alcance de la negación: la variable en sí misma o toda la construcción de $class instanceof someclass
. Solo tendremos que confiar en la prioridad del operador aquí [Editado, gracias a @Kolyunya].
Esta función debe hacerlo:
function isInstanceOf($object, Array $classnames) {
foreach($classnames as $classname) {
if($object instanceof $classname){
return true;
}
}
return false;
}
Así que tu código es
if (!isInstanceOf($entity, array(''User'',''Order'',''Product'')));
O puedes probar estos
$cls = [GlobalNameSpace::class,/GlobalNameSpaceWithSlash::class,/Non/Global/Namespace::class];
if(!in_array(get_class($instance), $cls)){
//do anything
}
instanceof
operator es justo antes de la negación, entonces esta expresión:
!$class instanceof someClass
es justo en PHP y este haz lo que esperas.
function check($object) {
$deciedClasses = [
''UserNameSpace/User'',
''OrderNameSpace/Order'',
''ProductNameSpace/Product'',
];
return (!in_array(get_class($object), $allowedClasses));
}