Using $this inside a static function fails

PhpOopThisStatic Methods

Php Problem Overview


I have this method that I want to use $this in but all I get is: Fatal error: Using $this when not in object context.

How can I get this to work?

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

Php Solutions


Solution 1 - Php

This is the correct way

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

Use self:: instead of $this-> for static methods.

See: PHP Static Methods Tutorial for more info :)

Solution 2 - Php

You can't use $this inside a static function, because static functions are independent of any instantiated object. Try making the function not static.

Edit: By definition, static methods can be called without any instantiated object, and thus there is no meaningful use of $this inside a static method.

Solution 3 - Php

Only static functions can be called within the static function using self:: if your class contains non static function which you want to use then you can declare the instance of the same class and use it.

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

Solution 4 - Php

The accessor this refers to the current instance of the class. As static methods does not run off the instance, using this is barred. So one need to call the method directly here. The static method can not access anything in the scope of the instance, but access everything in the class scope outside instance scope.

Solution 5 - Php

It's a pity PHP doesn't show a descriptive enough error. You can not use $this-> inside a static function, but rather use self:: if you have to call a function inside the same class

Solution 6 - Php

Here is an example of what happens when a method of a class is called in a wrong way. You will see some warnings when execute this code but it will work and will print: "I'm A: printing B property". (Executed in 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();

It seams that the variable $this, used in a method which is called as a static method, points to the instance of the "caller" class. In the example above there is $this->property used in the A class which points to a property of the 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

Solution 7 - Php

In the static method,properties are for the class, not the object. This is why access to static methods or features is possible without creating an object. $this refers to an object made of a class, but $self only refers to the same class.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJomView Question on Stackoverflow
Solution 1 - PhpSarfrazView Answer on Stackoverflow
Solution 2 - PhpcatchmeifyoutryView Answer on Stackoverflow
Solution 3 - PhpGouravView Answer on Stackoverflow
Solution 4 - PhpKangkanView Answer on Stackoverflow
Solution 5 - PhpMidas MtileniView Answer on Stackoverflow
Solution 6 - PhpNicolai NitaView Answer on Stackoverflow
Solution 7 - PhpAbbas RahmatiView Answer on Stackoverflow