suchen
HeimPHP-FrameworkLaravelWas ist die Verwendung von self in Laravel?

In Laravel wird das Schlüsselwort self verwendet, um den Klassennamen zu ersetzen. Es kann auf die statischen Mitgliedsvariablen und statischen Funktionen der aktuellen Klasse verweisen class anstelle der überschriebenen Implementierung in der Unterklasse self verweist immer auf die aktuelle Klasse und Klasseninstanz.

Was ist die Verwendung von self in Laravel?

Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.

Was ist die Verwendung von self in Laravel?

Sie können this nicht verwenden, um Nicht-Member-Funktionen innerhalb einer statischen Member-Funktion aufzurufen, aber Sie können self verwenden, um statische Funktionen aufzurufen Mitgliedsfunktionen/Variablen/Konstanten; Andere Mitgliedsfunktionen können self verwenden, um statische Mitgliedsfunktionen und nicht statische Mitgliedsfunktionen aufzurufen. Als sich die Diskussion vertiefte, stellte ich fest, dass self nicht so einfach ist. Vor diesem Hintergrund vergleicht und differenziert dieser Artikel zunächst mehrere Schlüsselwörter und fasst dann die Verwendung von self zusammen. this 调用非成员函数,但可以用 self 调用静态成员函数/变量/常量;其他成员函数可以用 self 调用静态成员函数以及非静态成员函数。随着讨论的深入,发现 self 并没有那么简单。鉴于此,本文先对几个关键字做对比和区分,再总结 self 的用法。

与 parent 、 static 以及 this 的区别

要想将彻底搞懂 self ,要与 parent 、 static 以及 this 区分开。以下分别做对比。

parent

self 与 parent 的区分比较容易: parent 引用父类/基类被隐盖的方法(或变量), self则引用自身方法(或变量)。例如构造函数中调用父类构造函数:

class Base {
    public function __construct() {
        echo "Base contructor!", PHP_EOL;
    }
}

class Child {
    public function __construct() {
        parent::__construct();
        echo "Child contructor!", PHP_EOL;
    }
}

new Child;
// 输出:
// Base contructor!
// Child contructor!

static

static 常规用途是修饰函数或变量使其成为类函数和类变量,也可以修饰函数内变量延长其生命周期至整个应用程序的生命周期。但是其与 self 关联上是PHP 5.3以来引入的新用途:静态延迟绑定。

有了 static 的静态延迟绑定功能,可以在运行时动态确定归属的类。例如:

class Base {
    public function __construct() {
        echo "Base constructor!", PHP_EOL;
    }

    public static function getSelf() {
        return new self();
    }

    public static function getInstance() {
        return new static();
    }

    public function selfFoo() {
        return self::foo();
    }

    public function staticFoo() {
        return static::foo();
    }

    public function thisFoo() {
        return $this->foo();
    }

    public function foo() {
        echo  "Base Foo!", PHP_EOL;
    }
}

class Child extends Base {
    public function __construct() {
        echo "Child constructor!", PHP_EOL;
    }

    public function foo() {
        echo "Child Foo!", PHP_EOL;
    }
}

$base = Child::getSelf();
$child = Child::getInstance();

$child->selfFoo();
$child->staticFoo();
$child->thisFoo();

程序输出结果如下:

Base constructor!
Child constructor!
Base Foo!
Child Foo!
Child Foo!

在函数引用上, self 与 static 的区别是:对于静态成员函数, self 指向代码当前类, static 指向调用类;对于非静态成员函数, self 抑制多态,指向当前类的成员函数, static 等同于 this ,动态指向调用类的函数。

parent 、 self 、 static 三个关键字联合在一起看挺有意思,分别指向父类、当前类、子类,有点“过去、现在、未来”的味道。

this

self 与 this 是被讨论最多,也是最容易引起误用的组合。两者的主要区别如下:

  1. this 不能用在静态成员函数中, self 可以;
  2. 对静态成员函数/变量的访问, 建议 用 self ,不要用 $this:: 或 $this-> 的形式;
  3. 对非静态成员变量的访问,不能用 self ,只能用 this ;
  4. this 要在对象已经实例化的情况下使用, self 没有此限制;
  5. 在非静态成员函数内使用, self 抑制多态行为,引用当前类的函数;而 this 引用调用类的重写(override)函数(如果有的话)。

self 的用途

看完与上述三个关键字的区别, self 的用途是不是呼之即出?一句话总结,那就是: self

Der Unterschied zwischen parent, static und this🎜🎜Um self vollständig zu verstehen, müssen Sie mit parent , static und this werden unterschieden. Nachfolgend werden Vergleiche angestellt. 🎜

parent

🎜self und parent sind leichter zu unterscheiden: parent bezieht sich auf die übergeordnete Klasse /Die Methode (oder Variable) der Basisklasse ist ausgeblendet und self verweist auf seine eigene Methode (oder Variable). Rufen Sie beispielsweise den Konstruktor der übergeordneten Klasse im Konstruktor auf: 🎜rrreee

static

🎜static Der allgemeine Zweck besteht darin, die zu erstellende Funktion oder Variable zu ändern Es handelt sich um eine Klassenfunktion und Klassenvariablen, die auch geändert werden können, um den Lebenszyklus von Variablen innerhalb einer Funktion auf den Lebenszyklus der gesamten Anwendung auszudehnen. Aber seine Verknüpfung mit self ist eine neue Verwendung, die seit PHP 5.3 eingeführt wurde: statische verzögerte Bindung. 🎜🎜Mit der statischen verzögerten Bindungsfunktion von static kann die zugehörige Klasse zur Laufzeit dynamisch ermittelt werden. Zum Beispiel: 🎜rrreee🎜Die Programmausgabe lautet wie folgt: 🎜rrreee🎜In Bezug auf Funktionsreferenzen ist der Unterschied zwischen self und static: für statische Memberfunktionen self code> zeigt auf die aktuelle Klasse des Codes, static zeigt auf die aufrufende Klasse für nicht statische Memberfunktionen, self unterdrückt Polymorphismus und zeigt auf Die Mitgliedsfunktion der aktuellen Klasse, static code>, entspricht <code>this und zeigt dynamisch auf die Funktion der aufrufenden Klasse. 🎜🎜parent, self und static sind zusammen sehr interessant zu betrachten. Sie verweisen jeweils auf die übergeordnete Klasse, die aktuelle Klasse und die Unterklasse . Es hat ein bisschen ein Gefühl von „Vergangenheit, Gegenwart, Zukunft“. 🎜

this

🎜self und this sind die am meisten diskutierten und am wahrscheinlichsten missbrauchten Kombinationen. Der Hauptunterschied zwischen den beiden ist wie folgt: 🎜
  1. this kann nicht in statischen Memberfunktionen verwendet werden, self kann
  2. für statische Member Für den Funktions-/Variablenzugriff wird empfohlen, self anstelle von $this:: oder $this->;
  3. Um auf nicht statische Mitgliedsvariablen zuzugreifen, kann self nicht verwendet werden, sondern nur this;
  4. this ist erforderlich. Bei Verwendung, wenn das Objekt instanziiert wurde, unterliegt self dieser Einschränkung nicht.
  5. Bei Verwendung innerhalb einer nicht statischen Member-Funktion gilt: self unterdrückt polymorphes Verhalten und this bezieht sich auf die übergeordnete Funktion der aufrufenden Klasse (falls vorhanden).
🎜Der Zweck von self🎜🎜Ist der Zweck von self nach dem Lesen der Unterschiede zu den oben genannten drei Schlüsselwörtern sofort offensichtlich? Um es in einem Satz zusammenzufassen: self zeigt immer auf „die aktuelle Klasse (und Klasseninstanz)“. Die Details sind: 🎜
  1. Ersetzen Sie den Klassennamen, beziehen Sie sich auf die statischen Mitgliedsvariablen und statischen Funktionen der aktuellen Klasse.
  2. Unterdrücken Sie das polymorphe Verhalten. Verweisen Sie auf die Funktionen der aktuellen Klasse anstelle der in der Unterklasse abgedeckten Implementierung
  3. Dies sind die wichtigsten Punkte. Unter den Zeichen muss nur dies mit dem Symbol $ hinzugefügt werden, was bedeutet, dass es sehr unangenehm ist

Sie können $this-> ruft eine nicht-statische Member-Funktion auf, aber sie kann über self:: aufgerufen werden und sogar reibungslos laufen wenn $this-> nicht in der aufrufenden Funktion verwendet wird. Dieses Verhalten scheint sich in verschiedenen PHP-Versionen unterschiedlich zu verhalten.

    self wird in statischen Funktionen und nicht statischen Funktionen ausgegeben. Beide sind string(4) "self" und verwirren die Ausgabe; Schreiben sind normal:
  1. $class = static::class;this 要加 $ 符号且必须加,强迫症表示很难受;
  2. 静态成员函数中不能通过 $this-> 调用非静态成员函数,但是可以通过 self:: 调用,且在调用函数中未使用 $this-> 的情况下还能顺畅运行。此行为貌似在不同PHP版本中表现不同,在当前的7.3中ok;
  3. 在静态函数和非静态函数中输出 self ,猜猜结果是什么?都是 string(4) "self" ,迷之输出;
  4. return $this instanceof static::class; return $this instanceof $class;
    // Oder so:
    return $this instanceof static;

  5. 【Verwandte Empfehlung:
Laravel-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist die Verwendung von self in Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Laravel -Frame -Fähigkeiten teilenLaravel -Frame -Fähigkeiten teilenApr 18, 2025 pm 01:12 PM

In dieser Zeit des kontinuierlichen technologischen Fortschritts ist das Mastering Advanced Frameworks für moderne Programmierer von entscheidender Bedeutung. Dieser Artikel hilft Ihnen dabei, Ihre Entwicklungsfähigkeiten zu verbessern, indem Sie wenig bekannte Techniken im Laravel-Framework teilen. Dieser Artikel wird für seine elegante Syntax und eine breite Palette von Funktionen bekannt und werden in seinen leistungsstarken Funktionen eingraben und praktische Tipps und Tricks bieten, damit Sie effiziente und pflegende Webanwendungen erstellen können.

Der Unterschied zwischen Laravel und ThinkPhpDer Unterschied zwischen Laravel und ThinkPhpApr 18, 2025 pm 01:09 PM

Laravel und ThinkPhp sind beide populäre PHP -Frameworks und haben ihre eigenen Vor- und Nachteile in der Entwicklung. In diesem Artikel wird die beiden Tiefe verglichen und ihre Architektur, Funktionen und Leistungsunterschiede hervorgehoben, um Entwicklern zu helfen, fundierte Entscheidungen auf der Grundlage ihrer spezifischen Projektanforderungen zu treffen.

Laravel -BenutzeranmeldungsfunktionslisteLaravel -BenutzeranmeldungsfunktionslisteApr 18, 2025 pm 01:06 PM

Das Erstellen von Benutzeranmeldungsfunktionen in Laravel ist eine entscheidende Aufgabe. Dieser Artikel bietet einen umfassenden Überblick, der jeden kritischen Schritt von der Registrierung der Benutzer bis zur Anmeldung überprüft. Wir werden in die Leistung der integrierten Überprüfungsfunktionen von Laravel eintauchen und Sie durch das Anpassen und Erweitern des Anmeldesvorgangs auf den spezifischen Anforderungen führen. Wenn Sie diese Schritt-für-Schritt-Anweisungen befolgen, können Sie ein sicheres und zuverlässiges Anmeldesystem erstellen, das Benutzern Ihrer Laravel-Anwendung ein nahtloses Zugriffserlebnis bietet.

Welche Versionen von Laravel gibt es? So wählen Sie die Version von Laravel für Anfänger ausWelche Versionen von Laravel gibt es? So wählen Sie die Version von Laravel für Anfänger ausApr 18, 2025 pm 01:03 PM

In dem LaRavel Framework -Versionsauswahlhandbuch für Anfänger taucht dieser Artikel in die Versionsunterschiede von Laravel ein, um Anfänger bei der Entscheidung über fundierte Entscheidungen zwischen vielen Versionen zu unterstützen. Wir werden uns auf die wichtigsten Funktionen jeder Version konzentrieren, ihre Vor- und Nachteile vergleichen und nützliche Ratschläge geben, um Anfängern zu helfen, die am besten geeignete Version von Laravel auf der Grundlage ihrer Fähigkeiten und der Projektanforderungen auszuwählen. Für Anfänger ist die Auswahl einer geeigneten Version von Laravel von entscheidender Bedeutung, da sie ihre Lernkurve und ihre allgemeine Entwicklungserfahrung erheblich beeinflussen kann.

Wie sehe ich die Versionsnummer von Laravel an? So sehen Sie die Versionsnummer von LaravelWie sehe ich die Versionsnummer von Laravel an? So sehen Sie die Versionsnummer von LaravelApr 18, 2025 pm 01:00 PM

Das Laravel-Framework verfügt über integrierte Methoden, um die Versionsnummer einfach zu sehen, um die verschiedenen Anforderungen der Entwickler zu erfüllen. In diesem Artikel werden diese Methoden untersucht, einschließlich der Verwendung des Befehlszeilen -Tools des Composers, der Zugriff auf .Env -Dateien oder das Erhalten von Versionsinformationen über PHP -Code. Diese Methoden sind für die Aufrechterhaltung und Verwaltung der Versionierung von Laravel -Anwendungen von wesentlicher Bedeutung.

Die neueste Methode zur Verwendung von PHP -Framework LaravelDie neueste Methode zur Verwendung von PHP -Framework LaravelApr 18, 2025 pm 12:57 PM

Laravel ist ein beliebtes PHP-basierter Webanwendungs-Framework, das bei den Entwicklern für seine elegante Syntax und leistungsstarke Funktionen beliebt ist. Die neueste Version führt viele Verbesserungen und neue Funktionen ein, die die Entwicklungserfahrung und die Anwendungsleistung verbessern sollen. Dieser Artikel wird in den neuesten Ansatz von Laravel eingehen und sich darauf konzentrieren, wie diese Updates nutzen können, um leistungsstärkere und effizientere Webanwendungen zu erstellen.

Laravel Framework InstallationsmethodeLaravel Framework InstallationsmethodeApr 18, 2025 pm 12:54 PM

Artikelzusammenfassung: Dieser Artikel enthält detaillierte Schritt-für-Schritt-Anweisungen, um die Leser zu leiten, wie das Laravel-Framework einfach installiert werden kann. Laravel ist ein leistungsstarkes PHP -Framework, das den Entwicklungsprozess von Webanwendungen beschleunigt. Dieses Tutorial deckt den Installationsprozess von den Systemanforderungen bis zur Konfiguration von Datenbanken und das Einrichten von Routing ab. Durch die Ausführung dieser Schritte können die Leser schnell und effizient eine solide Grundlage für ihr Laravel -Projekt legen.

Wie man laravel lernt wie man laravel kostenlos lerntWie man laravel lernt wie man laravel kostenlos lerntApr 18, 2025 pm 12:51 PM

Möchten Sie das Laravel -Rahmen lernen, aber unter keinen Ressourcen oder dem wirtschaftlichen Druck leiden? Dieser Artikel bietet Ihnen ein kostenloses Lernen von Laravel und lehrt Sie, wie Sie Ressourcen wie Online -Plattformen, Dokumente und Community -Foren verwenden, um eine solide Grundlage für Ihre PHP -Entwicklungsreise zu schaffen.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen