2011-06-14 13 views
17

me veo haciendo el siguiente código para assigment por defecto todo el tipo en PHP¿Cómo puedo crear un nuevo operador en PHP?

$variable = $variable ? $variable : 'default value'; 

Sé que con 5.3 Puedo hacer

$variable = $variable ?: 'default value'; 

me gustaría simplificar aún más que por ser capaz de simplemente haga

$variable ?= 'default value'; 

y tenga la variable reasignada en caso de que se evalúe como falsa. ¿Es posible crear esa tarea? ¿Debo compilar mi propia versión de php para hacer eso?

+4

Estoy bastante seguro de que tiene que preparar su propia versión de PHP para hacer eso. – GWW

+0

Recuérdele que solo usted puede ejecutar código, que se basa en tales características personalizadas. Por lo general, no ganas nada, sino un grupo de personajes y quizás algunos clientes molestos;) Ponte en contacto con la lista de correo php-internals. Tal vez es algo bueno para el núcleo php. – KingCrunch

+0

¿Hay algún lugar en el que podamos abrir una "petición" para llamar la atención? – dynamic

Respuesta

18

No puede crear nuevos operadores en PHP sin cambiar la fuente de PHP.

Y no quiere cambiarlo, créame. Claro, sería bastante fácil: PHP es de código abierto y usa un straightforward LALR(1) parser que puedes modificar fácilmente, pero eso haría que tu código sea incompatible con la implementación estándar de PHP. Por lo tanto, restringiría mucho quién puede ejecutar el código, que probablemente no sea nadie aparte de usted, ya que a nadie más le importará modificar su motor PHP solo para ejecutar su código.

Actualización: escribí un pequeño tutorial sobre cómo agregar una nueva sintaxis (como operadores) para PHP: http://nikic.github.com/2012/07/27/How-to-add-new-syntactic-features-to-PHP.html

+0

Mierda, temí tanto. Me acostumbré demasiado con LUA por eso. De todos modos, gracias por la respuesta clara. –

1

En PHP, no se puede crear operadores o sobrecargar los operadores existentes, tales como =.

Puede consultar el paquete Operator, pero su código no se podrá ejecutar sin él.

0

Se podría utilizar una función:

<?php 
    function defvar(&$var) { 
     if (empty($var)) { $var = 'default value'; } 
    } 

    // testing 
    $set = 'test'; 
    defvar($set); 
    echo $set; 

    defvar($notset); 
    echo $notset; 
?> 

Salida:

test 
default value 

O si lo prefiere asignación:

<?php 
    function setdefvar($var) { 
     if (empty($var)) { return 'default value'; } 
     else { return $var; } 
    } 

    // testing 
    $set = 'test'; 
    $set = setdefvar($set); 
    echo $set; 

    $notset = setdefvar($notset); 
    echo $notset; 
?> 

salida:

test 
default value 
0

Usted no puede hacer esto en PHP, no con esta sintaxis.

<? 
$test = array("3 is 5", "3 is not 5"); 
$r = $teste [+(3 != 5)]; 
echo $r; //return "3 is not 5" 
?> 
0

Parece que este es el único ejemplo que surge cuando nos preguntamos si es posible crear nuevas operaciones. Personalmente creo que? = Sería bastante útil.

Dado que la creación de nuevos operadores implicaría la creación de su propia versión de PHP, y puede no ser muy útil para otros si decide empaquetar su código, puede crear fácilmente una función para emular el mismo efecto.

/** 
* Global function to simplify the process of 
* checking to see if a value equates to true 
* and setting it to a new value if not. 
* 
* @param mixed $var the original variable to 
* check and see if it equates to true/false 
* @param mixed $default the default value to 
* replace the variable if it equates to false 
* 
* @return mixed returns the variable for 
* either further processing or assignment. 
*/ 
function _d(&$var, $default) { 
    return $var = $var ?: $default; 
} 

A continuación, puede llamar a la función, asignarla a otra variable según sea necesario, o incluso anidan en las condiciones establecidas para asignar valores por defecto por una jerarquía de las variables.

_d($variable, 'default value'); 
// $variable = $variable ?: 'default value'; 

$variable1 = _d($variable, 'default value') . 's'; 
// $variable1 = ($variable = $variable ?: 'default value') . 's'; 

_d($variable, _d($variable1, 'default value')); 
// $variable = $variable ?: ($variable1 = $variable1 ?: 'default value'); 

EDIT:

Como nota al margen, la función también le asignará el valor predeterminado para la variable incluso si aún no ha sido definida.

Puede crear una función similar o modificar la función anterior a la siguiente, si prefiere actualizar solo la variable si no está definida.

return $var = isset($var) ? $var : $default;} 
0

su simple, PHP es un preprocesador php, simplemente preprocesar el archivo PHP que contiene su operador de traducir todos los operadores que desee en su representación subyacente.

lo contrario tristemente PHP no es Perl/Lisp por lo que no se puede simplemente extender el lenguaje en tiempo de ejecución en esa medida

Cuestiones relacionadas