Warum hat WordPress private Funktionen?

7

Hinweis: Ich spreche _wp_get_current_user();nicht wp_get_current_user().

Wenn Sie die Funktion überprüfen, _wp_get_current_user();sehen Sie die folgende Anweisung:

Der Zugriff dieser Funktion ist als privat markiert. Dies bedeutet, dass es nicht für Plugin- oder Theme-Entwickler vorgesehen ist, sondern nur für andere Kernfunktionen. Der Vollständigkeit halber ist es hier aufgeführt. Verwenden Sie stattdessen wp_get_current_user ().

Warum hat WordPress diese Art von privaten Funktionen? Warum erlaubt WordPress nicht, diese Art von Funktionen für WordPress-Plugins oder Theme-Entwickler zu verwenden?

Ranuka
quelle
1
Dies ist in einer Sprache wie PHP oder Open Source-Projekt weniger wichtig, in der Sie den Code ohnehin nach "privaten" Funktionen durchsuchen können.
WTMWRER
1
zufällig die ausgezeichnete Frage @Ranuka. Ich habe 101 Mal auf das Upwote geklickt, aber es wurde nur ein einziges Upwote registriert. :(
Prosti

Antworten:

18

Es ist ganz normal, dass Code nicht Teil der öffentlichen API ist.

Aber ein Großteil des WP-Codes ist uralt und prozedural. Es gibt keine technischen Möglichkeiten, eine private Funktion zu erstellen.

Diese sind semantisch privat, das heißt, WP möchte nicht, dass Sie sie verwenden, aber es kann Ihnen dies nicht verbieten. Es gibt eine lange Geschichte von "privaten" WP-APIs, die in der Praxis von Erweiterungen aktiv verwendet werden.

Die Gründe für die Erklärung von etwas Privatem variieren von Fall zu Fall. In diesem speziellen Fall, den Sie angesprochen haben, scheint der Grund dafür zu sein, dass die "öffentliche" Version steckbar ist. Wenn Sie also die Implementierung auf eine "private" Version verschieben, können Sie das Original einfacher / mit weniger Problemen ersetzen.

Selten
quelle
2
Im Wesentlichen sagen sie "diese könnten sich ändern oder ohne Vorwarnung verschwinden, gehen Sie nicht abhängig von ihnen".
Ceejayoz
6

Einfach ausgedrückt, Entwickler entscheiden sich dafür, diese internen Funktionen "privat" zu machen, weil sie keine öffentliche Unterstützung für sie bereitstellen möchten. Zum Beispiel garantieren sie nicht, dass Funktionsargumente in ihrer Platzierung oder sogar Existenz von Update zu Update konsistent bleiben.

Nicht, dass dies tatsächlich viele Entwickler davon abhält, "private" Funktionen zu verwenden ...

Roy
quelle
wie die letzte Aussage :)
madalinivascu
3

Es war mir zunächst nicht absolut klar, also musste ich tiefer gehen. Wenn Sie zum Beispiel die großartige wp-includes/user.phpDatei nehmen, finden Sie dort keine einzige PHP-Klassendefinition.

File: /wp-includes/user.php
2452:  * @since 4.5.0
2453:  * @access private
2454:  *
2455:  * @see wp_get_current_user()
2456:  * @global WP_User $current_user Checks if the current user is set.
2457:  *
2458:  * @return WP_User Current WP_User instance.
2459:  */
2460: function _wp_get_current_user() {

Sie finden jedoch die _wp_get_current_user()Funktion, die uns interessiert. Was Sie sehen, @access privateist nur ein Tipp für den PHP-Dokumentgenerator.

Dies weist auch darauf hin, dass diese Funktion in Zukunft möglicherweise zu einer privaten Funktion innerhalb einer Klasse wird.

Das Konzept einer privaten Funktion existiert nur, wenn Sie PHP-Klassen haben und dies mit PHP 5 oder höher (seitdem ist PHP objektorientiert). Das Konzept heißt Kapselung.

WordPress verbessert den PHP-Code schrittweise durch die Einführung von Klassen, aber der Prozess wird nicht über Nacht stattfinden.

Prosti
quelle