Allgemeine Fragen zur PHP-Programmierung -- Wo stellt man diese am Besten?

  • Hallo zusammen,

    ich möchte mit ein paar kleinen Skripten (keine "richtigen" Plugins) Informationen aus einer anderen Datenbank an Widget-Positionen von WordPress darstellen lassen.
    Da ich Anfänger bin laufe ich natürlich regelmäßig in Fehlermeldungen und hangele mich dann mittels Google weiter und weiter.

    Eigentlich läuft es ganz gut, aber bisweilen wäre mir ein Forum zum diskutieren lieber.
    Könnt ihr mir einen Tipp geben, in welchem Forum ich mit gemischten Fragen zu WordPress-Programmierung und allgemeiner PHP-Programmierung am Besten aufgehoben bin?

    Mich interessiert der WP-Teil deshalb, da ich z.B. mehrere Skripte aufrufe, und es dann immer hin- und her geht zwischen Datenbankverbindung 1 (WordPress) und Datenbankverbindung 2 (die andere Datenquelle). Hier kommt hin und wieder mal ein "cannot establish database connection" Fehler.

    Dankeschön und viele Grüße,
    Marcus

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren


  • Eigentlich läuft es ganz gut, aber bisweilen wäre mir ein Forum zum diskutieren lieber.
    Könnt ihr mir einen Tipp geben, in welchem Forum ich mit gemischten Fragen zu WordPress-Programmierung und allgemeiner PHP-Programmierung am Besten aufgehoben bin?

    Wordpress hat eigentlich seit jahren den Code Style von PHP Projekte verlassen. Erwarte bitte nicht, dass PHP Entwickler mit Frameworks oder Enterprise PHP 5 Erfahrungen deine "Widget-Positionen" auch nur ansatzweise verstehen. Hier hat wordpress ein Desing Problem..

    Egal.

    Lesen vor Fragen:
    http://www.phpbar.de/w/Hauptseite

    Portale mir Foren
    http://www.phpbar.de/w/Internetseiten#Portale

    Wende dich bei Fragen an die PHP Newsgoups

    Viel Glück

    Ralf

    Mit offenen Augen träumen

  • Eigentlich läuft es ganz gut, aber bisweilen wäre mir ein Forum zum diskutieren lieber.
    Könnt ihr mir einen Tipp geben, in welchem Forum ich mit gemischten Fragen zu WordPress-Programmierung und allgemeiner PHP-Programmierung am Besten aufgehoben bin?


    Bevor ich hier im Forum mit dem Posten begann, war ich einige Zeit in einem PHP-Forum unterwegs. Dort musste ich mir anfangs anhören, dass die Bezeichner von Funktionen und Methoden möglichst in camelCase zu schreiben sind und Klassen in CamelCase. Bei den Bezeichnern von PHP eigenen Funktionen gab es beim Wechsel von PHP4 zu PHP5 ebenfalls einen kaum zu übersehbaren Wechsel in dieser Richtung.

    Beispiel PHP4: get_element_by_id
    Beispiel PHP5: getElementById

    Als ich mir das angenommen hatte und die erste Funktion für WP schreiben wollte, stolperte ich gleich über die PHP Coding Standards von WordPress:

    Zitat


    Naming Conventions #
    Use lowercase letters in ... and function names (never camelCase). Separate words via underscores.


    make.wordpress.org/core/handbook/coding-standards/php/

    Empfinde diese Coding Standards von WP irgendwie als das genaue Gegenteil vom allgemeinen Trend der Entwicklung bei PHP. Sind noch ein paar andere Dinge, zum Beispiel das in den Core Dateien HTML enthalten ist, wo sich einige Zeilen einfach nicht mehr für eine aufgeräumte Quelltextansicht ausrichten lassen oder das man ab und an vor der Wahl steht, ob nun im Theme verschachtelte PHP-Anweisungen übersichtlich auszurichten oder aber so zu schreiben, dass HTML in der Quelltextansicht richtig ausgerichtet wird.

    Zu Deiner Frage, allgemeine Fragen zur Entwicklung von Plugins kannst Du hier unter Plugins stellen, ist kein Problem. Nur bringt WP einen großen Teil von eigenen Funktionen mit sich, die teilweise nicht schlecht sind und bekannte PHP-Funktionen verkürzen.

    Als ein gutes Beispiel würde ich esc_html ansehen:

    In WP: esc_html( "String" )
    In PHP: htmlspecialchars("String", ENT_QUOTES, "UTF-8", false)

    Nun erwarte nicht, dass sich jeder PHP-Entwickler, der nicht ab und an etwas für WP entwickelt, sich mit den rund 1.600 Hooks von WP und mit diesen allgemeinen WP-Funktionen auskennen würde, falls Du in einem PHP-Forum eine Frage stellen solltest. Ein gewisser Teil der Entwickler sicherlich schon.

    Einmal editiert, zuletzt von Melewo (1. Juli 2014 um 06:07)

  • Vielen Dank für eure Antworten. Mir geht es in erster Linie um so Fragen zur Gültigkeit von Variablen und Funktionen von einem Skript zum anderen. etc

    Vermutlich gehört so eine Nachhilfe eher nicht in's Plugins-Forum. Habe mich mal bei SelfPHP angemeldet nun.

    Danke und Gruß,
    Marcus

  • Da hätte ich Dir eine Antwort geben können, weil eine Variable, die in der header.php definiert wird, in der footer.php nicht mehr gültig ist. Liegt einfach daran, dass die header.php und footer.php selbst nur über Funktionen eingebunden werden

    PHP
    get_header();
    ...
    get_footer();


    und diese Variable dadurch entweder global gemacht werden müssen oder besser, einfach eine Funktion für die Rückgabewerte dieser Variablen in der functions.php notieren, um dann über diese Funktion auf die Variablen in allen Template-Dateien zugreifen zu können.

    Habe das Spiel gerade durch mit WP, unten ist dann die Hilfsfunktion für WP, obwohl jetzt reichlich speziell:

    http://www.coder-welten.com/php-klasse-fue…von-html5-tags/

  • Etwas einfacher.
    Nun hoffe ich nur, dass ich da keine Flüchtigkeitsfehler eingebaut habe, soll ja nur als Überblick dienen und praktisch ist alles den Kommentaren zu entnehmen.

    Sichtbarkeit und Gültigkeitsbereich allgemein in PHP:

    In WordPress:

    Da zum Template gehörende Dateien, wie header.php, footer.php oder sidebar.php nicht in andere Template-Dateien includet, sondern über eine Funktion eingebunden werden, sollten Variablen über eine in der functions.php zu notierende Funktion hinzugefügt werden, insofern es sich um kein Plugin handelt.

    Drei Beispiele für die functions.php vom Theme:

    Ausgabe in footer.php

    PHP
    <?php
    gebe_aus_in_wp();
    echo esc_html( ausstieg_in_wp() );        
    get_ende_in_wp();
    ?>

    Ausgabe in sidebar.php getestet:

    PHP
    <?php
    echo esc_html( gebe_aus_in_wp( false ) );
    echo esc_html( ausstieg_in_wp() );
    get_ende_in_wp();
    ?>

    Einmal editiert, zuletzt von Melewo (1. Juli 2014 um 13:44)

  • Nun habe ich einmal die Frage im Zusammenhang gelesen, die hat nichts mit dem Sichtbarkeitsbereich von Variablen zu tun.

    http://www.selfphp.de/forum/showthread.php?t=25315

    Eine Variable ist immer nur bis zum Ende der Laufzeit eines Scripts vorhanden und wird dann aus dem System gelöscht. Damit ist nicht gemeint, wie lange eine Seite geöffnet ist, sondern die Laufzeit in Millisekunden, bis das Script abgearbeitet wurde. So wie das untere Ende des Scripts erreicht ist, werden alle Variablen gelöscht. Du kannst somit nicht Script 1 abarbeiten um dann mit den in Variablen gespeicherten Werten noch Script 2 zu beauftragen.

    Eine Ausnahme bilden nur Superglobals wie $_GET, doch Du willst ja keine Werte von einer Seite an die andere per Query-String übergeben. Somit solltest Du innerhalb eines Scripts alle Abfragen an die DB senden. Was Du vorhast, bedarf einer anderen Lösung.

  • Hi nochmal, und vielen Dank für die ausführliche Hilfe!

    Ich finde es irgendwie verwirrend. Nun lese ich schon den ganzen Tag, aber so ganz explizit habe ich es noch nirgends gelesen.
    In deinem Beispiel weiter oben finde ich z.B. interessant, dass du innerhalb der Funktion ein "global" definierst, und dieses danach außerhalb der Funktion zur Verfügung steht. (quasi von innen nach außen).
    Ich hatte bisher nämlich gelesen, dass man in einer innenliegenden Datei nur eine Variable als "global" definieren kann, wenn sie vorher in der aufrufenden Datei bereits definiert wurde (also von außen nach innen durchreichen).

    Du sagst ja, dass Variablen nur diese wenigen Millisekunden gültig sind, die ein Skript läuft. Hier ist mir aber unklar, ob du mit Skript die einzelne PHP-Datei meinst, oder den vollständig zusammen geklebten Baum mit allen include() Aufrufen.

    Ich habe ein bisschen weiter gebastelt, und habe evtl. eine Lösung gefunden basierend auf globalen Variablen.
    Im Anhang ist ein Zip-Datei mit meinem Test-Aufbau.
    1) outer.php --- ruft nacheinander die drei Dateien middle{1,2,3}.php auf und stellt die Hülle bereit (das wäre in meinem Fall die WordPress-Ebene)
    2) middle{1,2,3}.php --- identische Dateien, die 1x inner_all.php einbinden und sich um die Ausgabe kümmern. (das wären die verschiedenen Skripte, die aus verschiedenen Widget-Positionen aufgerufen werden )
    3) inner_all.php --- läuft nur 1x, verändert aber die Ausgabe-Variablen für alle drei Skripte middle{1,2,3}.php (diese Ebene würde zentral 1x die externe Datenbank abfragen und alle Infos einsammeln)
    4) outer_2.php --- identisch zu outer.php, allerdings ist hier die Reihenfolge der Skripte middle{1,2,3}.php geändert


    So läuft das innere Skript nur ein einziges Mal, und ich bekomme dennoch alle drei Ausgaben dargestellt.
    Ich bin nur nicht sicher, ob sich das 1:1 auf WordPress übertragen lässt.

    Gruß,
    Marcus

    test_globalvars.zip

  • Mit Script meine ich das ganze Script, also alle Dateien, die da gegenseitig includet werden. Ein kleines Script besteht nur aus einer einzelnen Datei, WordPress als Script aus einer Vielzahl von Dateien.

    Eine Variable wird innerhalb einer Funktion global gemacht. Ich weiß zwar längst noch immer nicht genau, wie sich was bei WP verhält, doch so in etwa würde ich das wie folgt beschreiben. Die header.php, sidebar.php oder footer.php sind eigentlich nicht viel mehr als die Inhalte für die Funktionen:

    Code
    get_header();
    get_sidebar();
    get_footer();


    Um nun eine Varibale in einer dieser Dateien global zu machen, kann eine Variable zwar in der Datei functions.php einfach notiert werden,

    PHP
    // In der functions.php
    $ausgabe = "Test Ausgabe";


    doch um die auszugeben, muss die innerhalb der Funktion global gemacht werden.

    PHP
    // In der header.php, sidebar.php oder footer.php
    global $ausgabe;
    echo $ausgabe;


    Weil das vom Prinzip etwa dieser Variante entsprechen würde:

    PHP
    function get_header() {
        global $ausgabe;
        echo $ausgabe
    }
    
    
    // Ausgabe:
    get_header();


    Schrieb nur vom Prinzip, denn durchgewurstelt habe ich mich da noch nicht bis zum Ende, weil sich das bei WP von einer Datei über viele weitere erstreckt. Das wären so in etwa die Grundlagen betreffend Sichtbarkeit und Geltungsbereich von PHP allgemein und innerhalb von WP.

    Besser als mit globalen Variablen zu arbeiten und die einfach nur in der functions.php zu notieren, ist es aber entsprechende Funktionen in der functions.php zu notieren, wie in den Beispielen von gestern.

    Habe mir Deine Zips nicht angesehen, so tief wollte ich da auch nicht einsteigen, zu programmieren habe ich selbst noch genug vor mir. Wenn Du von einem Widget etwas an einem anderen übergeben möchtest, kommen da entweder Options oder ähnliches in Frage, die jedes Widget in der Datenbank ablegt, oder aber auch $_SESSION oder $_COOKIE.

    PHP
    session_start();
    
    
    // Widget-Eins ist noch nicht geladen gleich 1
    // Widget-Eins ist schon geladen gleich 2
    $_SESSION['widget'] = 1;


    Wenn aber alles bei einem Aufruf erfolgen soll, dann müsste wohl eher das eigentliche Script umgeschrieben werden und wie bereits erwähnt, so tief wollte ich da nicht einsteigen, ging ja nur um einige Hinweise und um allgemeine Fragen zur PHP-Programmierung.

    Einmal editiert, zuletzt von Melewo (2. Juli 2014 um 07:24)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!