pasar múltiples definiciones o const como parámetro a un método de clase

¿Puedo hacer algo como esto?

class Test
{
    const FLAG1 = 'flag1.';
    const FLAG2 = 'flag2.';

    public function __construct() {}

    public function myMethod($flags)
    {
        echo $flags
    }
}

entonces úsalo como

$test = new Test();
$test->myMethod(Test::FLAG1|Test::FLAG2);

Traté de usar este ejemplo pero obtengo 2 como mi echo. Solo tenía curiosidad por ver cómo puedo usar CONST or DEFINE como parámetros de un método.

Pregunto porque encontré este script que usa esta técnica y me pareció curioso

http://www.pgregg.com/projects/php/preg_find/preg_find.php.txt

preguntado el 10 de marzo de 12 a las 05:03

si elimina el operador bit a bit | y simplemente pase una bandera, eso funcionará. -

sí, pero lo mío era que quería ver cómo este tipo hacía su magia: pgregg.com/projects/php/preg_find/preg_find.php.txt -

Sí, pero no está pasando parámetros, está haciendo operaciones bit a bit. php.net/manual/en/language.operators.bitwise.php -

1 Respuestas

Sí, esto es posible, pero no con los valores de bandera que tiene ahora.

Los operadores bit a bit funcionan en ... bueno, los bits. Si lo hago 1001 OR 0110, Yo obtengo 1111. Por lo tanto, si desea poder usar constantes como esta, sus valores deben ser potencias de dos.

const FLAG1 = '1';
const FLAG2 = '2';
const FLAG3 = '4';

Luego puede probar el método AND-convertir el valor del parámetro de su función en una máscara. Por ejemplo, si alguien pasa FLAG1|FLAG2, puede probar la bandera 2: 0011 AND 0010 = 0010 que es igual a FLAG2. En PHP, esto sería ($flags & FLAG2) == FLAG2 para obtener un valor booleano de si se pasó o no FLAG2 en

Puede ver todos los operadores bit a bit aquí: http://php.net/manual/en/language.operators.bitwise.php

También debo señalar que esto generalmente se consideraría una forma deficiente para la programación PHP. ¿Por qué hacer esto cuando hay formas mucho mejores de pasar múltiples parámetros? Personalmente, solo aceptaría una matriz.

¿Esto tiene sentido? Si no es así, haga preguntas más detalladas y haré un seguimiento.

respondido 10 mar '12, 05:03

Entiendo, por lo general acepto una matriz como mi parámetro, pero estaba tratando de crear algo único y ateístamente diferente. Pero le agradecería que me explicara un poco más por qué necesito comprobar ($flags & FLAG2) == FLAG2 no puedo simplemente comprobar FLAG2? - Eli

@Eli, No, porque FLAG2. Cuando usted AND FLAG2 y $flags juntos, obtienes un valor que será igual a todos 0s, o obtendrás un valor igual a FLAG2. De nuevo, 1 AND 1 = 1y 0 AND 1 = 0. Básicamente usas el AND operación como un filtro, para filtrar todas las otras banderas que puede haber establecido que se pasaron en $flags a su función. - Brad

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.