2011-03-14 16 views

Respuesta

21

No, youcan't. Gracias a Dios.

+2

Podría ser bastante útil, para ejemplo, observe los controladores de rieles – Alexcp

+1

@Alexcp: podría ser muy útil si su objetivo es destruir su base de código, confundir los resaltadores de sintaxis de todos y volver locos a sus compañeros desarrolladores. –

+0

@Alexcp: Quería hacer esto en CodeIgniter, imitando mis controladores Rails. Llamé a mis métodos de controlador new_() y enrutado */nuevo a mis métodos new_(): $ route ['([A-Za-z _.-] +)/(new)'] = "$ 1/new_"; –

1

De manera predeterminada no es posible, son palabras reservadas y no puede usarlas.

http://www.php.net/manual/en/reserved.keywords.php

puede ser usted puede recompilar PHP o algo así para lograr su objetivo, pero creo que (como las otras personas que contestaron) que no es una buena idea :)

HTH !

16

En realidad, mientras que la definición un método que resulta en un error de análisis, utilizando no lo hace, lo que permite algún tipo de soluciones:

class A { 
    function __call($method, $args) { 
     if ($method == 'new') { 
      // ... 
     } 
    } 
} 

$a = new A; 
$a->new(); // works! 

un relacionada feature request que data de 2004 todavía está abierto.

edición de enero de 2016

A partir de PHP 7, ahora es posible para nombrar sus métodos utilizando palabras clave que fueron restringidos hasta ahora, gracias a la Context Sensitive Lexer:

class Foo { 
    public function new() {} 
    public function list() {} 
    public function foreach() {} 
} 

todavía se puede' t, sin embargo, nombre su clase Case me temo.

+2

Todos sabemos lo que dice el documento * actualmente *, sin embargo, las conversaciones están siempre en curso, y no todas las personas son tan virulentas como usted sobre este tema. El hecho es que actualmente hay una gran inconsistencia entre tener un error de análisis generado cuando un método se define con una palabra clave reservada, mientras que el uso de este método no genera ningún error. Por lo tanto, este tipo de uso de palabras clave reservadas podría estar permitido en el futuro, porque el contexto en el que se usan las hace distinguibles de su significado original, desde el punto de vista del analizador. – Benjamin

+0

[email protected] incluso proporcionó un parche como prueba de concepto (ver el enlace en mi respuesta), y ofrece un argumento sobre por qué el comportamiento actual a veces puede ser problemático: "a medida que se introducen nuevas palabras reservadas, tienden a chocar con los nombres de método de la clase existente ". No digo que este sea el camino a seguir, pero sí creo que es bueno mantener la mente abierta. – Benjamin

+0

Sí, es posible que se permitan en el futuro. Del mismo modo, es posible que nunca se les permita en el futuro. Esto puede convertirse en un error de análisis en el futuro. "Mantener la mente abierta" implica prepararse para ambos escenarios, lo que significa seguir los dictados del lenguaje lo mejor que pueda. –

0

En la línea de lo que Benjamin se ha mencionado, hay un uso interesante de "clon", (el cual está reservado) en este class, la línea 545

public function __call($method, $args) 
{ 
    if ('clone' == $method) { 
     return call_user_func_array(array($this, 'cloneRepository'), $args); 
    } else { 
     $class = get_called_class(); 
     $message = "Call to undefined method $class::$method()"; 
     throw new \BadMethodCallException($message); 
    } 
} 
Cuestiones relacionadas