Différence entre self et this en PHP

La différence entre self et this en POO PHP est la suivante : les classes PHP peuvent avoir des méthodes statiques et des variables statiques. Déclarer des méthodes ou des variables statiques les rend accessibles sans recourir à une instance de classe ou à un objet.
 
 
Les fonctions statiques et les variables dans les classes ne sont associées à aucun objet, mais à la définition de la classe elle-même. Vous pouvez dire que toutes les instances d’une classe partagent la même variable statique et les mêmes fonctions.

Dans la définition d’une classe, « $this » se réfère à l’objet actuel, tandis que « self » se réfère à la classe actuelle.

« self » n’est pas précédé par « $ » car « self » ne représente pas une variable mais la classe elle-même. « $this » fait référence à une variable spécifique de sorte qu’elle ait un préfixe $.

Il est nécessaire de faire référence à un élément de classe en utilisant « self » et de se référer à un élément d’objet en utilisant « $this », utilisez $this->var pour les variables non statiques, utilisez self::$var pour les variables statiques et idem pour les méthodes.
QCM sur PHPQCM sur PHP – Programmation orientée objet – Partie 1QCM sur PHP avec des réponses pour la préparation des entretiens d’embauche, des tests en ligne, aux examens et aux certifications. Ces questions et réponses…Lire plus

Exemple:
class MaClasse
{
	public $var;
	public static $svar;

	public function rfunction()
	{
		echo $this->var; 
	}

	public static function sfunction()
	{ 
		echo self::$svar; 
	}
}

MaClasse::$svar = "Hello World!";

$obj = new MaClasse();
$obj->var = "Welcome";

echo MaClasse::sfunction();
echo $obj->rfunction();
Remarque
  • Les fonctions statiques ne peuvent utiliser que des variables statiques. La manière dont les fonctions statiques et les variables statiques sont référencées est self::maFunction() ou self::maVariable.
  • Les fonctions et les variables d’une classe nécessitent la référence d’un objet.

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *