2009-11-30 18 views
7

¿Qué significa cuando el nombre de una función PHP comienza con un guión bajo?subrayado en la función php

por ejemplo: __construct()

sé lo que significa la construcción pero he visto otros lugares en los que la función comienza con un guión, o un doble subrayado y yo no estoy seguro del significado.

+0

Gracias, a todos, por sus respuestas. – Stepppo

Respuesta

16

Significa que PHP lo llama implícitamente.

Se llama un 'método mágico'

Además, se trata de dos guiones bajos, no uno.

Más información aquí: PHP Magic Methods

+4

Ah. Magia en PHP. ¿Lo que sea después? –

+1

Todo el mundo odia php, y estoy considerando aprenderlo :( – Amarghosh

+2

Citando al Rey León: "¡Hay MAGIA en el aire!" –

5

En PHP, funciones comenzar con dos subrayados por lo general tienen un significado especial. Del manual:

PHP reserva todos los nombres de funciones empezando por __ como mágico. Es recomienda que no utilice nombres de funciones con __ en PHP a menos que desee alguna funcionalidad mágica documentada.

Por ejemplo __construct() es un método especial que se llama automáticamente al inicializar un objeto.

Se también: http://php.net/manual/en/language.oop5.magic.php

1

Como se ha señalado en otras respuestas, el doble guión se utiliza para los métodos "mágicos". La idea es que el usuario nunca use intencionalmente dos guiones bajos para un nombre de método, por lo que hay poco riesgo de colisión. La razón por la que no es un solo guión bajo, creo, es que el guión bajo individual era una popular convención para métodos privados en los malos (antiguos) días, antes de que la palabra clave 'privada' apareciera para hacer cumplir la privacidad de OO.

0

En codeigniter, si inicia un método en un controlador con un guión bajo, el enrutador sabrá que no se permite el acceso desde la url.

2

También hay un nombre común "estilo de codificación" que utiliza un guion bajo inicial para indicar que los métodos o las propiedades son privados/protegidos. Creo que está bastante extendido.

+0

Sí, he usado esto en C# – dmeehan