When to Use self and $this in PHP
In the given tutorial, we have chosen the most common and handy ways of using self and $this in PHP.
Check out the examples below and enrich your PHP arsenal with these simple and useful tricks.
Using self and $this for Non-static and Static Member Variables
Let’s start at representation of the correct usage of self and $this for static and non-static member variables. Here is an example:
<?php
class X
{
private $non_static_member = 1;
private static $static_member = 2;
function __construct()
{
echo $this->non_static_member . ' ' . self::$static_member;
}
}
new X();
?>
For the comparison, we demonstrate a wrong method of using self and $this for static and non-static member variables below:
<?php
class X
{
private $non_static_member = 1;
private static $static_member = 2;
function __construct()
{
echo self::$non_static_member . ' ' . $this->static_member;
}
}
new X(); ?>
Polymorphism with $this
An example of polymorphism with $this for member functions will look as follows:
<?php
class X
{
function foo()
{
echo 'X::foo()';
}
function bar()
{
$this->foo();
}
}
class Y extends X
{
function foo()
{
echo 'Y::foo()';
}
}
$x = new Y();
$x->bar();
?>
Suppressing Polymorphic Behavior with self
An example of suppressing polymorphic behavior by applying self for member function is demonstrated below:
<?php
class X
{
function foo()
{
echo 'X::foo()';
}
function bar()
{
self::foo();
}
}
class Y extends X
{
function foo()
{
echo 'Y::foo()';
}
}
$x = new Y();
$x->bar(); ?>
About $this in PHP
In PHP, $this is considered a pseudo-variable that is a reference to the current object. Most of the time, it is implemented in object-oriented codes. The variable $this is used for calling non-static methods. In case one is attempting to call a static method, then an error will occur. It means that the variable $this is now available within a static method.
The Difference Between self and $this in PHP
In PHP, the self, generally, belongs to the class members, but never for any exact object. The reason is that the static members (functions or variables) are class members that are shared by all the objects of the class. Whereas, $this refers to the member variables and function for a particular instance. The $ sign is not used for self as it doesn’t connote a variable, but the class construct. As $this doesn’t reference a particular variable, it includes a $ sign.