Usar $this dentro de una función estática falla

2 minutos de lectura

avatar de usuario
Jom

Tengo este método en el que quiero usar $this pero todo lo que obtengo es: Error fatal: usar $this cuando no está en el contexto del objeto.

¿Cómo puedo hacer que esto funcione?

public static function userNameAvailibility()
{
     $result = $this->getsomthin();
}

Solo se pueden llamar funciones estáticas dentro de la función estática usando self:: si su clase contiene una función no estática que desea usar, entonces puede declarar la instancia de la misma clase y usarla.

<?php
class some_class{
function nonStatic() {
    //.....  Some code ....   
    }
 Static function isStatic(){
    $someClassObject = new some_class;
    $someClassObject->nonStatic();
    } 
}
?>

  • Debería haberlo cuando intente asignar la variable estática a una variable de instancia. ¿No es esto posible?

    – Jom

    18 de febrero de 2010 a las 6:27

  • self::staticMethod() o $self = new self(); y $self->nonStaticMethod();

    – javier bs

    6 de diciembre de 2020 a las 15:51

En el método estático, las propiedades son para la clase, no para el objeto. Esta es la razón por la que es posible acceder a métodos o características estáticas sin crear un objeto. $this se refiere a un objeto hecho de una clase, pero $self solo se refiere a la misma clase.

avatar de usuario
Kangkán

el descriptor this se refiere a la instancia actual de la clase. Como los métodos estáticos no se ejecutan fuera de la instancia, usando this está prohibido. Así que hay que llamar al método directamente aquí. El método estático no puede acceder a nada en el ámbito de la instancia, pero acceder a todo en el ámbito de la clase fuera del ámbito de la instancia.

avatar de usuario
Midas Mtileni

Es una pena que PHP no muestre un error lo suficientemente descriptivo. No puede usar $this-> dentro de una función estática, sino usar self:: si tiene que llamar a una función dentro de la misma clase

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad