2010-02-18 10 views
44

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.Usando esto dentro de una función estática falla

¿Cómo puedo hacer que funcione?

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

Respuesta

79

Ésta es la manera correcta

public static function userNameAvailibility() 
{ 
    $result = self::getsomthin(); 
} 

Uso self:: en lugar de $this-> para métodos estáticos.

Ver: PHP Static Methods Tutorial para obtener más información :)

+0

cierto, estaba a punto de publicar esta respuesta. –

+7

También debe recordar que el método getsomthin() también debe ser estático: no puede llamar a no static dentro de un método estático. – thorinkor

+7

@Sarfraz, ¿no debería ser 'static ::' en lugar de 'self ::'? – Pacerier

8

No se puede utilizar $this dentro de una función estática, ya que las funciones estáticas son independientes de cualquier objeto instanciado. Intenta hacer que la función no sea estática.

Editar: Por definición, métodos estáticos puede ser llamado sin ningún objeto instanciado, y por lo tanto no hay ningún uso significativo de $this dentro de un método estático.

+0

No debe haber cuando están tratando de asignar la estática variable a una variable de instancia. ¿No es esto posible? – Jom

2

El descriptor de acceso this hace referencia a la instancia actual de la clase. Como los métodos estáticos no se ejecutan en la instancia, se excluye el uso de this. Entonces uno necesita llamar al método directamente aquí. El método estático no puede acceder a nada en el ámbito de la instancia, pero tiene acceso a todo en el ámbito de la clase fuera del ámbito de la instancia.

1

Sólo funciones estáticas se pueden llamar dentro de la función estática por medio de auto :: si la clase contiene función no estática que desea utilizar entonces se puede declarar la instancia de la misma clase y úsala.

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

Es una pena que PHP no muestre un error descriptivo suficiente. 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

1

Aquí hay un ejemplo de lo que ocurre cuando se llama a un método de una clase una manera incorrecta. Verá algunas advertencias cuando ejecute este código pero funcionará e imprimirá: "Estoy A: imprimiendo propiedad B". (Ejecutado en php5.6)

class A { 
    public function aMethod() { 
     echo "I'm A: "; 
     echo "printing " . $this->property; 
    } 
} 

class B { 
    public $property = "B property"; 

    public function bMethod() { 
     A::aMethod(); 
    } 
} 

$b = new B(); 
$b->bMethod(); 

Se costuras que la variable $ this, utilizada en un método que se llama como un método estático, apunta a la instancia de la clase "llama". En el ejemplo anterior hay $ this-> bienes utilizados en la clase A que apunta a una propiedad de la B.

EDIT:

The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object (usually the object to which the method belongs, but possibly another object, if the method is called statically from the context of a secondary object). PHP > The Basics

Cuestiones relacionadas