2009-09-15 17 views

Respuesta

81

Seguro, quieres las constantes mágicas.

function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; } 

busque más información en the php manual

+32

y solo ser descarado, la constante mágica del método name is: '__METHOD__' – Anthony

+24

Tarde en el juego, pero me sorprendió encontrar que' __METHOD__' en realidad devuelve 'Class :: method' así que' __FUNCTION__' específicamente devuelve solo el nombre del método ... para cualquier otra persona * todavía * no me gusta RTFM – Chords

-4

¿Por qué no puedes hacer esto?

public function something() { 
    $thisMethodName = "something"; 
} 
+8

Completamente innecesario cuando '__FUNCTION__' está disponible. –

+1

Lo suficientemente justo, pero con el mismo espíritu podría contentarme con que '__FUNCTION__ es innecesario :) –

+4

Peligroso si el método recibe un nuevo nombre, el desarrollador puede olvidarse de actualizar el contenido var –

1

hacker, pero también probablemente podría sacarlo del valor de retorno debug_backtrace().

19

Mientras que usted puede usar el magic constant "__METHOD __", le recomendaría revisar php's reflection. Esto es compatible con PHP5.

$modelReflector = new ReflectionClass(__CLASS__); 
$method = $modelReflector->getMethod(__METHOD__); 

A continuación, puede hacer cosas patear el culo como inspeccionar la firma, etc.

+0

Cuando dices "inspeccionar la firma", ¿te refieres a esto? http://www.php.net/manual/en/function.openssl-verify.php –

+0

@MrMe No, una firma de método (que no debe confundirse con una firma de autenticación) como esta: http: //en.wikipedia. org/wiki/Type_signature – thesmart

+0

Oh bien, básicamente es Type Hinting http: // stackoverflow.com/questions/2161040/is-method-signature-in-php-a-must-or-should ¡Gracias! –

10

Como sugirió smartj puede probar la constante mágica __METHOD__, pero recuerda que esto devolverá una cadena que contiene también el nombre de la clase, es decir, 'MyClass :: algo'. El uso de __FUNCTION__ en su lugar devolverá 'algo'.

2

Usando __FUNCTION__ es el camino a seguir en lugar de:

public function something() { 
    $thisMethodName = "something"; 
} 

que está viciado de varias maneras añadiendo una variable y la memoria para almacenar el nombre del método como una cadena y la duplicación de lo que ya existe, por lo tanto innecesaria la adición de recursos usado, (si haces esto para una biblioteca grande con muchos métodos, es muy importante).

Se garantiza que las constantes mágicas en PHP no cambien, mientras que este enfoque requeriría una edición aplicable si se cambiara el nombre del método, presentando la posibilidad de una inconsistencia (nota, dije potencialmente, significando simplemente que es innecesario editar si la constante mágica se usó en su lugar).

El tiempo y esfuerzo para nombrar una variable, volver a escribir el nombre del método como una cadena asignada a esa variable innecesaria y, por supuesto, referenciar adecuadamente el nombre de la variable, que es la motivación para que PHP proporcione constantes mágicas (y refutar cualquier reclamo __FUNCTION__ es innecesario).

Cuestiones relacionadas