LF00
Sé la diferencia entre estos dos, y he revisado el manual.
Todavía tengo algo de confusión. Puedo usar __FUNCTION__
en método de clase, esto representa el nombre de este método. Cuando lo hago eco, solo muestra el nombre. Aquí está claro.
Pero por qué puedo usar __METHOD__
en un método no calss. Esto también solo representa el nombre de la función normal. ¿La función normal está en algún contenedor? y cuando eco __METHOD__
en la función normal, el contenedor no es nada?
Código:
<?php
class dog {
private $name="dog";
public static function name() {
echo __METHOD__;
echo"\n";
echo __FUNCTION__;
echo"\n";
}
}
function test() {
echo __FUNCTION__;
echo"\n";
echo __METHOD__;
}
dog::name();
test();
producción:
ei@localhost:~$ php test.php
dog::name
name
test
test
Cualquier ayuda será apreciada. Gracias.
saito
“Método” es básicamente el nombre de una función dentro de una clase (o función de clase). Por lo tanto __METHOD__
consiste en el nombre de la clase y el nombre de la función llamada (dog::name
), tiempo __FUNCTION__
solo le da el nombre de la función sin ninguna referencia a la clase en la que podría estar.
Cuando __METHOD__
se llama fuera de una clase es lo mismo que __FUNCTION__
porque no hay una parte de clase para usar como prefijo. Puedes usar __METHOD__
fuera de una clase porque es una constante mágica y siempre están disponibles (en el peor de los casos, devolverán una cadena vacía).
-
En su respuesta si mal uso no tiro exceptios, volvio a leer rapidamente el manual, y no lo encontre. Si echo de menos algo.
– LF00
28 de diciembre de 2016 a las 3:41
-
El mal uso de las constantes arroja excepciones si desea usar constantes que se definieron como no públicas dentro de una clase desde el exterior. Las constantes mágicas cambian dependiendo de dónde se usen, pero son accesibles globalmente.
– saito
28 de diciembre de 2016 a las 3:55
Subrat Kumar Palhar
dejame aclarar tu duda..
-
Primero explicaré sobre CLASE Y OBJETO (cuál es la diferencia …)
-
Luego aclararé sobre FUNCIÓN Y MÉTODO (cuál es la diferencia …)
hablando de Clase :: Es una implementación lógica …
objeto :: Es una instancia de tu clase (instancia ~ COPY ~ clon ~ …)
cuando está utilizando el operador –NUEVO– —> está creando un OBJETO (nada más que la COPIA) DE SU CLASE.
CLASE =============> ~NUEVO~ =======> OBJETO (Nueva copia de tu clase..) similarmente
FUNCIÓN ==========> ~NUEVO~ =======> MÉTODO (Pertenece al Objeto, no a la Clase)
La clase es el programa que está escribiendo, mientras que el objeto es la copia de su clase que se está ejecutando.
la clase reside en la ROM (permanente) mientras que el objeto reside en la RAM (área de memoria temporal…)
& cuando está declarando una función como estática, pertenece solo a la clase, no al objeto & puede llamar a la misma (función estática) usando ClassName::staticFunctionName()
¡Es por eso que no existe STATIC_METHOD sino STATIC_FUNCTION!
ejemplo de código::
<?php
class Dog extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function index($params="") {
}
private $name="dog";
public static function name() {
echo 'Inside static function & inside class' . '<br>';
echo __METHOD__ . '<br>';
echo __FUNCTION__ . '<br>';
}
public function test2() {
echo 'Inside NON STATIC function & inside class' . '<br>';
echo __FUNCTION__ . '<br>';
echo __METHOD__ . '<br>';
}
}
function test() {
echo 'Inside NON STATIC function & OUTSIDE class' . '<br>';
echo __FUNCTION__ . '<br>';
echo __METHOD__ . '<br>';
}
Dog::name();
test();
$somevar = new Dog;
$somevar->test2();
PRODUCCIÓN::
Inside static function & inside class
Dog::name //Class::function
name
Inside NON STATIC function & OUTSIDE class
test
test
Inside NON STATIC function & inside class
test2
Dog::test2 //Object::method
En su caso, ya que está utilizando MÉTODO EN un contexto estático, muestra el nombre de la clase si no fuera estático (función simple), solo mostraría el nombre de la función.
en todos los lenguajes de programación.. Método siempre corresponde a Objeto. Método Objeto mientras que Función siempre corresponde tanto a la clase como al Objeto (Función estática).
y finalmente no existe la existencia del Método Estático
&
En este caso..
MÉTODO => incluye el nombre de la clase
FUNCIÓN => Solo se refiere al nombre de la función
si alguna aclaracion contactame..
-
Como se puede ver en mi código yo el
__METHOD__
en una función que no está en una clase, no muestra el nombre de la clase.– LF00
18 de diciembre de 2017 a las 9:06
-
sí, su función test () reside fuera de la clase y si hubiera dentro de la clase [NON STATIC ] Habría devuelto el nombre de la clase y el método (No confundir con la función) Nombre..
– Subrat Kumar Palhar
18 de diciembre de 2017 a las 12:40
ambos son iguales fuera de la clase. Puedes usar cualquiera de ellos pero personalmente uso
__FUNCTION__
.– Aabir Hussein
28 de diciembre de 2016 a las 5:57