2009-04-16 35 views
37

Un punto menor sobre las palabras clave de declaración de funciones en PHP: si tiene un método de clase estático, ¿la palabra clave static aparece antes o después de la palabra clave de visibilidad (public, protected, private)? Suponiendo que todos sus métodos, estática o de otra manera, tienen una palabra clave visibilidad, entonces usted querría que la palabra clave visibilidad a permanecer en el mismo lugar en relación con el function palabra clave:"público estático" o "público estático"?

public function foo() {} 

public function bar() {} 

protected function baz() {} 

private function quux() {} 

Ahora pretender un par son estáticos:

public function foo() {} 

static public function bar() {} 

protected function baz() {} 

static private function quux() {} 

Además, si un método es estático, que desea que para ser lo primero visto, ya que tiene más de un impacto sobre qué tipo de método es que incluso la palabra clave visibilidad hace.

Esto es estrictamente un problema de legibilidad, ya que obviamente no tiene consecuencias funcionales o de diseño. (Eso se me ocurre.)

Respuesta

43

lenguajes como Java y C# requieren que el modificador de acceso son lo primero por loEditar: La línea golpeado anterior es completamente falso. Ninguno de los dos idiomas tiene este requisito.


public static 

parece correcto para mí. Los argumentos pueden ser hechas para ambos enfoques y la mía es la siguiente: Desde "estática" califica la función más que el modificador de acceso que tiene más sentido decir

<access_modifier> static 

Si lo usa al revés el significado de "estática "es menos claro.

+1

* Ni * Java * ni * C# requieren esto. Creo que * lo * recomiendan, pero "público estático" es válido en ambos idiomas. (Acabo de compilar un programa de prueba para verificar.) –

+1

(Sin embargo, he quitado mi voto, ya que el resto es justo, y estoy de acuerdo en que "público estático" parece más razonable.) –

+0

¡Yikes! Mi error - ¡tienes razón! –

9

No creo que esta sea una pregunta estrictamente PHP, y por lo poco que vale, siempre he preferido la consistencia de colocar primero el modificador de visibilidad. Me resulta más fácil de escanear.

5

Pongo la visibilidad primero en todos los idiomas que uso que tiene modificadores de tipo.

1

Tiene razón porque no tiene ningún efecto en el código. Por lo tanto, depende de sus propios requisitos de estilo, o de los de su equipo, en cuanto a lo que hace. Consulte con ellos y acuerde un estilo.

Si solo está codificando para usted, entonces debe elegirlo usted mismo. La elección no es importante, pero la consistencia es.

Otra pregunta que puede hacer es: ¿debería usar 'público' o no? Para la compatibilidad con versiones anteriores (PHP4 no tenía información oculta) cualquier cosa sin un modificador de visibilidad es pública por defecto. ¿Deberías molestarte en escribir en público si es público? Una vez más, elección personal: haz una fuerte discusión de cualquier manera y me convencerás de que tu elección es la mejor.

Personalmente, cuando reviso y borro mi propio código, me gusta poner primero el modificador de visibilidad y especificarlo incluso si es público.

+3

He considerado omitir 'public' porque es técnicamente redundante, pero creo que es mejor ser explícito. De esa manera, cuando vuelva a mi código seis meses después, no tengo que preguntarme por qué no hay una palabra clave de acceso en el método foo(); ¿Me olvidé de poner uno allí o quise que fuera público? – dirtside

+0

buen punto ☻ – thomasrutter

5

Prefiero static public ya que de esta manera es más fácil detectar métodos estáticos [generalmente raros] en las clases.

+0

Iba a escribir esto como una respuesta. Estoy totalmente de acuerdo. –

10

Además de Alexei Tenitski's answer.

I prefer static public since this way 
it is easier to spot [usually rare] static methods in classes. 

Todos los métodos deben tener su visibilidad especificada. Por lo tanto, sabemos que cada método va a tener eso mencionado en alguna parte de la definición, la única pregunta es "¿Qué configuración es?".

Solo algunas son estáticas, por lo tanto, para cada pregunta debemos preguntar "¿Hay alguna mención de la palabra clave estática en algún lugar de la definición?". Entonces, ponga estático primero para hacer la respuesta a esa pregunta más obvia.

O, como una regla más amplia, ......... tiendo a poner 'el aspecto más extraordinario primero' para que no omita inconscientemente las cosas al leerlas. ; o)

Pruebe esta prueba.

Muy rápidamente ... ¿Cuántos métodos estáticos hay en la Clase A?

class A { 
public static methodA() { 
    } 
protected static methodB() { 
    } 
private staticlymethodC() { 
    } 
} 

y cuántos métodos estáticos hay en la Clase B?

class B { 
public methodA() { 
    } 
static protected methodB() { 
    } 
static private methodC() { 
    } 
} 

Creo que la clase B es mucho más fácil de entender rápidamente.

+6

Se puede hacer el mismo argumento para los modificadores de acceso ... –

+0

@ aW-k9IdI'-I0llwlg'I - No entiendo a qué se refiere. No puede invertir el argumento para los modificadores de acceso: "Todos los métodos deben tener su visibilidad especificada. Solo algunos métodos tienen una indicación de estado estático". –

33

De PSR-2:

visibilidad deberá ser declarada en todas las propiedades y métodos; resumen y final DEBE declararse antes de la visibilidad; estática DEBE ser declarada después de la visibilidad. [reference]

... si eres de los que te interesan las normas y convenciones de PHP Framework Interop Group.

Así que public static no static public según ellos.

+0

Una cotización más completa: "La visibilidad DEBE declararse en todas las propiedades y métodos; resumen y final DEBE declararse antes de la visibilidad; estática DEBE declararse después de la visibilidad." [fuente] (http://www.php-fig.org/psr/psr-2/) –

+2

quiero decir, ¿no abogan también por poner '' 'en nuevas líneas para ellos mismos? gross .. – Eva

+2

@Eva Solo para declaraciones de métodos y clases. Para bucles y condicionales, etc., recomiendan colocarlos al final de la línea después de un espacio: http: //www.php-fig.org/psr/psr-2/Personalmente encuentro mucho más fácil de leer que colocar todas las llaves al final de la línea. –

Cuestiones relacionadas