class Bitwise {
private $bw;
private $firstBw;
// valor inicial del resultado
public function __construct($init = null) {
if (gettype($init) === gettype($this))
$this->bw = $init->get(); // puedo pasar un objeto del mismo tipo.
else if (is_numeric($init))
$this->bw = $init; // o un valor entero
else
$this->bw = 0; // y sino lo inicializo a 0, sin flags.
$this->firstBw = $this->bw;
}
private function handle($newval) {
$tmp = $this->bw;
$this->bw = $newval;
return $tmp == $this->bw;
}
private function arg_flags($argv) {
$tmp = 0;
foreach ($argv as $arg) $tmp |= $arg;
return $tmp;
}
// añado un flag. Devuelve true o false si ha cambiado el resultado o no.
public function add() {
return $this->handle( $this->bw | $this->arg_flags(func_get_args()) );
}
// quito un flag. Devuelve true o false si ha cambiado el resultado o no.
public function remove($flag) {
return $this->handle( $this->bw & ~$this->arg_flags(func_get_args()) );
}
// compruebo si hay un flag en el resultado.
public function has() {
return ($this->bw & $this->arg_flags(func_get_args())) ? true: false;
}
// obtengo el resultado
public function get() {
return $this->bw;
}
// pone a 0 el resultado.
public function reset() {
$this->bw = $this->firstBw;
}
}
Un ejemplo básico sería el de dar permisos a un usuario. Teniendo la clase cargada, con un require/include, o directamente en el código donde pongamos nuestro script, podemos hacer una bateria de pruebas como esta:
// tipos de acciones
define('LISTAR', 1);
define('EDITAR', 2);
define('BORRAR', 4);
define('CREAR', 8);
echo "nINSTANCIASn";
// intancia por defecto
$test1 = new Bitwise();
var_dump($test1);
// instancia predefinida
$test2 = new Bitwise(5);
var_dump($test2);
// instancia absurda
$test3 = new Bitwise('hola');
var_dump($test3);
// instancia "copia"
$test4 = new Bitwise($test2);
var_dump($test4);
echo "nTESTSn";
// añadimos un par de flags por separado
$test1->add(LISTAR);
$test1->add(EDITAR);
$test1->add(CREAR);
var_dump($test1);
// lo mismo pero del tirón
$test1->reset(); // reinicio el resultado anterior
$test1->add(LISTAR | EDITAR | CREAR);
var_dump($test1);
// otra vez pero con varios argumentos, se pueden alternar los dos métodos
$test1->reset();
$test1->add(LISTAR, EDITAR, CREAR);
var_dump($test1);
// reasigno un flag, el resultado no varía (como es normal)
$test1->add(EDITAR);
var_dump($test1);
// pregunto si está añadido el flag, igualmente se pueden pasar varios como antes
var_dump($test1->has(EDITAR));
// quito flags, método similar
$test1->remove(LISTAR);
var_dump($test1);
// quito varios, el que no existe pasa de él
$test1->remove(LISTAR | EDITAR);
var_dump($test1);
// pregunto de nuevo por flags alternando métodos, si alguno existe será true
var_dump($test1->has(LISTAR, EDITAR, BORRAR | CREAR));
Espero no tener que volver a "estudiarme" este tema... con esto ya me da igual cómo funcione, simplemente lo reutilizaré. __autoload(), la cual carga un archivo automáticamente cuando hacemos $a = new Clase();. Ella solita buscará Clase.php (donde nosotros le digamos). Si queremos hacer una aplicación chachi piruli de la muerte y lanzar una excepción desde el __autoload()... CUAK!! no se puede.
Así de simple.
Y no, no es un bug, estaba todo premeditado... por el señor Derick. Más bien creo que ese día no le apetecía comerse los sesos pensando cómo solucionarlo y dijo que eso estaba bien así, que se documentaba ese "pero" y fuera.
De todos modos se puede hacer una ñapa para lanzar una especie de excepción desde el __autoload()
Otra cosa curiosa, si lanzas una excepción no puedes relanzar otra excepción desde ella, algo que tampoco me parece bien (dejando a un lado el "para qué quieres eso"). Desde mi escritorio a todo el planeta Tierra....Y como en todo, no hay que generalizar, pero si que el asunto está muy extendido ya hoy en día. También lo ha habido siempre, pero como digo, hoy en día más. Yo donde más lo noto es en el metro, los jóvenes son lo peor... educación 0. Y tampoco es que sea mucho mayor eh, pero no empujo en las puertas para no quedarme en el andén, me levanto si hay gente mayor, intento no molestar... y por descontado que no increpo a la gente. Pero la verdad es que es imposible que salga nada bueno cuando por ejemplo los padres tampoco lo hacen cuando sus hijos están delante, si hay poca comunicación con ellos, si quien los educa es la televisión, o se educa el grupo de amigos solos, si no se les castiga, o se les pega un cachete, si los profesores no tienen autoridad alguna freste a los chavales proque los padres no se lo permiten... es un cúmulo de cosas que al final dan este resultado. Incluso los inmigrantes se contagian de ellos, vienen aquí porque han pasado dificultades en su pais y aquieren que sus hijos sean lo más libres y menos oprimidos posible, y lo que están haciendo es criar igualmente maleducados, como los de aquí. Uh, mejor dejémoslo... es tan solo una opinión.
He vuelto a veros, en escenarios, en vuestras radios, en vuestros barrios....
Que pasa ahí fuera con esos niños?
Con miradas de adultos sin ilusion y sin sueños... El niño quiso conocer,
Y nadie supo responder,
El niño no encontró el cariño que el creía merecer,
Y asi comenzo a crecer, a desobeder,
A aparecer frente a su almohada ebrio a cada amanecer,
El chico es mediocre al parecer y no destaca que hacer
Si cada vez mas a menudo saca sus dientes y ataca,
Si ya no es un chico tranquilo,
Anda demasiado rápido en el filo
Y pende de un hilo muy fino,
No ve a nadie detrás en su defensa
Entonces piensa que diez golpes por un beso no compensan,
Inocente adolescente, se siente confuso,
Y se comporta nervioso ante los intrusos,
Conozco a muchos de estos muchachos, en sus corros fuman porros,
Y andan siempre borrachos, hechos diarios en tu barrio y en el mío,
Como quieres resolver el odio con mas odio, tío,
Como pretendes que te tome en serio alguien actuando con violencia
Solo para que te miren, importándote una mierda que los demás se lastimen,
Si tus colegas lo viven ellos te aplauden y ríen,
Es el deporte que en las calles se practica, medallitas, chándales y eso parece la villa olímpica,
Cada noche en cada parque son escenas típicas, tonitas,
De esas vidas claustrofobias, para chicos herméticos, lunáticos,
El ocaso del fracaso les ha vuelto problemáticos
No quiero causar pánico
Con las cosas que explico,
Ni que me entienda el presidente, el siempre ha sido rico,
Tan solo practico atípicos registros líricos
Predico el rape pacifico en estos paisajes árticos.
Es lo único que os queda,
En cualquier país cualquier lugar, sobre cualquier acera,
No dejéis que el amor muera es lo único que os queda
Y lo sabéis lanzar la moneda,
aguantad la espera y lo veréis,
que no se siente el cebo asta que por fin se muerde,
ni se echa de menos algo hasta que se pierde,
que lo recuerde.... [Coro]
Dime porque se duermen, porque se pierden?
Crecen demasiado rapido y no entienden
Que se les pasa la vida, que no hay salida,
Cuando quieren rectificar ya estan perdidas
Dime porque se duermen, porque se pierden?
Crecen demasiado rapido y no entienden
Que se les pasa la vida, que no hay salida ,
cuando quieren rectificar.... Si ayer fue el signo de la Paz y hoy es el logo del mercedes
Y en los parque ya no hay niños internet los atrapo en sus redes,
Ahora el chico cometerá delitos leves debe parar su obsesión
Por todo aquello que no tiene, no tiene capacidad, teme la responsabilidad,
Y asi perderlo todo al no afrontar su realidad.
Y la verdad no se si es un problema de la LOGSE
De un gobierno que os quita el futuro y luego os vende un Porche,
Por eso el chico sigue sumido en su crisis,
Pistolitas, Mitsubishis comieron su materia gris.
Parálisis mental, ciclo vital, en espiral,
Solo ancianos y jóvenes, locos, colapsan el hospital,
Y no es casual, esta desesperación
A causa de una educación que inspira desmotivación,
Esta de moda ser el malo el mas villano el mas cabron,
Y hacer la mayor locura para llamar la atención.
Triste confusión entre el miedo
Y el respeto pero el chico se siente grande cuando pasa y los demás se quedan quietos,
El chico que jamás encontró afecto
En una sociedad infecta que solo afecta a hombres perfectos.
Detesto, que me tachéis de reverendo,
Tan solo estoy respondiendo
Viendo lo que esta pasando, a todos los oídos, que me estáis escuchando,
A todos los niños perdidos que me estáis buscando,
Seguir andando, soñando con tener el mando,
Mequetrefes creen ser jefes traicionando asta a su propio bando,
Formando mafias absurdas no hay control entre esas curvas en las que circulas,
Porque no respiras, porque miras perdonando vidas
Porque te suicidas porque tienes el diablo en tu saliva,
¿Por qué? [Coro]
Dime porque se duermen, porque se pierden?
Crecen demasiado rapido y no entienden
Que se les pasa la vida, que no hay salida,
Cuando quieren rectificar ya estan perdidas
Dime porque se duermen, porque se pierden?
Crecen demasiado rapido y no entienden
Que se les pasa la vida, que no hay salida ,
Cuando quieren rectificar....
Todo el contenido bajo el dominio XERGIO.NET está sujeto a la licencia Creative Commons con las condiciones BY-SA. Web estandarizada en XHTML 1.0, CSS 2, RSS 2 y Atom 1.0.