Maison >développement back-end >tutoriel php >PHP `self` vs `$this` : quand utiliser chacun ?

PHP `self` vs `$this` : quand utiliser chacun ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-24 01:17:10182parcourir

PHP `self` vs. `$this`: When to Use Each?

Quand utiliser 'Self' et '$This' en PHP

En PHP, comprendre la distinction entre 'self' et '$ ceci est crucial. « Self » fait référence à la classe actuelle, tandis que « $this » fait référence à l'objet actuel.

Quand utiliser « Self » :

  • Accès aux membres statiques (variables ou méthodes) :

    class MyClass {
        static $static_member = 10;
    }
    echo MyClass::$static_member; // Output: 10
  • Appel de la classe parent méthodes :

    class ChildClass extends ParentClass {
        public function myMethod() {
            self::parentMethod(); // Calls the parent class method
        }
    }

Quand utiliser '$This' :

  • Accès aux membres non statiques :

    class MyClass {
        private $instance_member = 20;
    }
    $obj = new MyClass();
    echo $obj->instance_member; // Output: 20
  • Instance appelante méthodes :

    class MyClass {
        public function myMethod() {
            echo $this->instance_member; // Accesses the instance member
        }
    }
  • Polymorphisme : appel de méthodes d'instance à partir de classes dérivées :

    class BaseClass {
        public function myMethod() {
            echo 'BaseClass::myMethod()';
        }
    }
    class DerivedClass extends BaseClass {
        override public function myMethod() {
            echo 'DerivedClass::myMethod()';
        }
    }
    $baseObj = new BaseClass();
    $derivedObj = new DerivedClass();
    $baseObj->myMethod(); // Output: 'BaseClass::myMethod()'
    $derivedObj->myMethod(); // Output: 'DerivedClass::myMethod()'
  • Suppression du polymorphisme : appel de méthodes de classe parent à l'aide de ' soi' dans les classes dérivées :

    class BaseClass {
        public function myMethod() {
            echo 'BaseClass::myMethod()';
        }
    }
    class DerivedClass extends BaseClass {
        override public function myMethod() {
            parent::myMethod(); // Calls the BaseClass's myMethod() using self::
        }
    }
    $derivedObj = new DerivedClass();
    $derivedObj->myMethod(); // Output: 'BaseClass::myMethod()'

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn