Fragen, die jeder gute PHP-Entwickler beantworten können sollte [closed]

Lesezeit: 8 Minuten

Ich ging Fragen durch, die jeder gute .Net-Entwickler beantworten können sollte, und war sehr beeindruckt von Inhalt und Ansatz dieser Frage, und deshalb stelle ich diese Frage im gleichen Sinne für PHP-Entwickler.

Welche Fragen denkst du sollte ein gutes PHP-Programmierer in der Lage sein, darauf zu reagieren?

BEARBEITEN : Ich markiere diese Frage als Community-Wiki, da sie nicht benutzerspezifisch ist und darauf abzielt, der Programmiergemeinschaft insgesamt zu dienen.

Ich freue mich auf einige erstaunliche Antworten.

HINWEIS : Bitte beantworten Sie auch die Fragen, wie in den Kommentaren vorgeschlagen, damit die Leute auch etwas Neues in Bezug auf die Sprache lernen können.

  • Ähnliche Frage hier zu “häufigen Fehlern, die PHP-Programmierer vermeiden sollten”: stackoverflow.com/questions/1186957

    Benutzer8599

    22. Januar 2010 um 19:16 Uhr

Zugegeben, ich habe diese Frage woanders geklaut (kann mich nicht mehr erinnern, wo ich sie gelesen habe), fand sie aber lustig:

Q: Was ist T_PAAMAYIM_NEKUDOTAYIM?
EIN: Es ist der Bereichsauflösungsoperator (doppelter Doppelpunkt)

Ein erfahrener PHP’er weiß sofort, was das bedeutet. Weniger erfahrene (und nicht hebräische) Entwickler möchten vielleicht lesen Dies.

Aber jetzt ernsthaftere Fragen:


Q: Was ist die Ursache für diese Warnung: „Warnung: Header-Informationen können nicht geändert werden – Header wurden bereits gesendet“, und was ist eine gute Vorgehensweise, um dies zu verhindern?
EIN: Weil: Body-Daten wurden gesendet, was dazu führte, dass auch Header gesendet wurden.
Verhütung: Führen Sie zuerst Header-spezifischen Code aus, bevor Sie Body-Daten ausgeben. Stellen Sie sicher, dass Sie nicht versehentlich Leerzeichen oder andere Zeichen gesendet haben.


Q: Was ist falsch an dieser Abfrage: "SELECT * FROM table WHERE id = $_POST[ 'id' ]"?
EIN: 1. Es ist anfällig für SQL-Injection. Verwenden Sie niemals Benutzereingaben direkt in Abfragen. Desinfizieren Sie es zuerst. Verwenden Sie vorzugsweise vorbereitete Anweisungen (PDO) 2. Wählen Sie nicht alle Spalten aus


, sondern geben Sie jede einzelne Spalte an. Dies dient hauptsächlich dazu, zu verhindern, dass Abfragen Speicher belegen, wenn beispielsweise irgendwann in der Zukunft eine BLOB-Spalte hinzugefügt wird. Q: if( !strpos( $haystack, $needle ) ...Was ist falsch an dieser if-Anweisung:
? strpos EIN: 0gibt die Indexposition zurück, an der die $needle zuerst gefunden wurde, was sein könnte 0 . Seit false beschließt auch if( false !== strpos( $haystack, $needle )...


Die Lösung besteht darin, einen strengen Vergleich zu verwenden: Q:
if( 5 == $someVar ) Wie schreibt man diese if-Anweisung am besten und warum? if( $someVar == 5 )
oder EIN:$someVar = 5Ersteres, da es die versehentliche Zuweisung von 5 zu $someVar verhindert, wenn Sie vergessen, 2 Gleichheitszeichen zu verwenden (


) und wird einen Fehler verursachen, letzteres nicht. Q:

function doSomething( &$arg )
{
    $return = $arg;
    $arg += 1;
    return $return;
}

$a = 3;
$b = doSomething( $a );

Angesichts dieses Codes: $a … was ist der Wert von $b und
nach dem Funktionsaufruf und warum? $a EIN: 4 ist $b und 3ist


. Ersteres, weil $arg als Referenz übergeben wird, letzteres, weil der Rückgabewert der Funktion eine Kopie (keine Referenz auf) des Anfangswerts des Arguments ist.

OOP-spezifisch Q: publicWas ist der Unterschied zwischen protected , private und
in einer Klassendefinition? public EIN: protected stellt ein Klassenmitglied “allen” zur Verfügung, private macht das Klassenmitglied nur für sich selbst und abgeleitete Klassen verfügbar,


macht den Klassenmember nur für die Klasse selbst verfügbar. Q:

class SomeClass
{
    protected $_someMember;

    public function __construct()
    {
        $this->_someMember = 1;
    }

    public static function getSomethingStatic()
    {
        return $this->_someMember * 5; // here's the catch
    }
}

Was ist falsch an diesem Code: EIN:


Statische Methoden haben keinen Zugriff auf $this, da statische Methoden ausgeführt werden können, ohne eine Klasse zu instanziieren. Q:
Was ist der Unterschied zwischen einer Schnittstelle und einer abstrakten Klasse? EIN:


Eine Schnittstelle definiert einen Vertrag zwischen einer implementierenden Klasse und einem Objekt, das die Schnittstelle aufruft. Eine abstrakte Klasse definiert ein bestimmtes Verhalten für Klassen vor, die sie erweitern. Bis zu einem gewissen Grad kann dies auch als Vertrag angesehen werden, da es bestimmte Methoden garantiert, zu existieren. Q:
Was ist falsch an Klassen, die überwiegend Getter und Setter definieren, die direkt auf ihre internen Mitglieder abbilden, ohne tatsächlich Methoden zu haben, die Verhalten ausführen? EIN:


Dies könnte ein Code-Geruch sein, da das Objekt als veredeltes Array ohne viel andere Verwendung fungiert. Q:
Warum ist die PHP-Implementierung der Verwendung von Schnittstellen suboptimal? EIN:

  • PHP erlaubt es Ihnen nicht, den erwarteten Rückgabetyp der Methode zu definieren, was Schnittstellen im Wesentlichen nutzlos macht. 😛 strpos Das php.net/strposFrage, die ich nicht beantworten könnte, ohne aufzublicken

    . Ich habe keine Notwendigkeit, Gehirnraum zu verschwenden, um mir das völlige Chaos zu merken, das PHPs grundlegender Satz von Funktionen ist, welche -1 zurückgeben, welche falsch, welche null und welche etwas völlig anderes. Die anderen Fragen finde ich aber schon in Ordnung.

    – Pekka


  • 22. Januar 2010 um 17:41 Uhr Pekka: Aber du sollte wissen, dass Strings nullindiziert sind und daher strpos muss

    in der Lage sein, Null für ein gefundenes Präfix zurückzugeben.

    – Draemon

  • 22. Januar 2010 um 17:43 Uhr Entschuldigung, aber … -1. Diese Fragen prüfen nur Basiswissen wie Zugriffsmodifikatoren oder den Unterschied zwischen Methoden/Feldern von Klassen (statisch) und Objekten (dynamisch). Darüber hinaus kreuzen diese Fragen keine an Denkvermögen (Entschuldigung, ich kenne kein gutes englisches Wort, um es zu erklären). Was ich meine ist, dass Sie nicht prüfen, ob der Programmierer erstellen kann nicht standardmäßig

    Algorithmen usw.

    – Krozin

  • 22. Januar 2010 um 18:13 Uhr T_PAAMAYIM_NEKUDOTAYIM Bei allem Respekt,

    ist ein wertloser Test von relevantem Wissen.

    – Samson

  • 22. Januar 2010 um 19:04 Uhr 5 == $someVar Das

    eine ist eine dumme Frage. Keine Ahnung, warum dieser Programmierstil so viel Lob erhält, wenn er von Natur aus fehlerhaft ist.

    – Verärgerte Ziege

25. Januar 2010 um 18:09 Uhr

Definitiv Sicherheitsfragen !

  • (einfache Antworten in diesem Beitrag, natürlich ist das Sichern von PHP-Webanwendungen weitaus komplexer)

Wie geht man mit SQL-Injection um?

  • mysql_real_escape_string() für einen Einstieg in MySQL. Versuchen Sie dann, PDO zu lernen, um vorbereitete Anweisungen und Portabilität zwischen Datenbankanbietern zu nutzen.

Wie gehe ich mit CSRF (Cross-Site Request Forgery) um?

  • Fügen Sie jeder wichtigen Anfrage ein Token hinzu, um wichtige Vorgänge zu sichern (der Benutzer muss das Formular gesehen haben, bevor er die entscheidende Anfrage sendet).?

Wie wird XSS (Cross-Site Scripting) reflektiert und gespeichert?

  • htmlentities() ist für den Anfang gut.

Variante von XXX-Injections: LDAP-Injection, XPath-Injection, etc… ?

  • Sie müssen das vom XXX verwendete “Vokabular” kennen und dann ableiten, was Sie zum Bereinigen und/oder “Überprüfen und Ablehnen” benötigen.

Was ist die Liste der sinnvollen Funktionen?

  • Funktionen, die PHP-Code interpretieren (möglicherweise in einer Remote-Datei enthalten) oder Befehle auf Ihrem System ausführen. Eine kurze und unvollständige Liste könnte sein: exec(), passthru(), system(), popen(), eval(), preg_replace()…
  • Wie gehe ich mit den Gefahren beim Einschließen von Dateien um?
  • Was ist eine Pfadtransversale?

Welche Risiken sind mit dem Hochladen von Dateien verbunden?

  • Sorgfältige Überprüfung der beim Öffnen von Dateien oder Remote-Ressourcen verwendeten Parameter erforderlich.

wie man die Konfiguration Ihrer PHP-Konfiguration erzwingt (dh wissen Sie, was die Verwendung von php.ini ist)?

  • Es wird lange dauern, also überspringe ich die Antwort, bitte lesen Sie das PHP-Handbuch. Über das Filtern von Benutzerdaten: Was ist der Unterschied zwischen desinfizieren und prüfen und ablehnen

?

  • Der erste verwandelt den Eintrag in etwas weniger Feindseliges. Der zweite prüft, ob der Eintrag korrekt ist und lehnt ihn andernfalls ab.

    Ich stimme zwar zu, dass Sie wissen sollten, wie man mit SQL-Injection umgeht, wenn es angebracht ist, aber warum sagen Sie, dass dies für ALLE guten PHP-Programmierer notwendig ist? Ich werde nicht sagen, dass ich gut mit PHP bin, aber ich habe eine Webanwendung geschrieben, die nichts mit SQL zu tun hatte, und ein Versuch einer SQL-Injection wäre kläglich gescheitert. Ich weiß, dass es andere gibt, die ähnliche Arbeit leisten. (FYI, die App hat wissenschaftliche Daten verarbeitet und grafisch dargestellt, die nicht gut in eine SQL-Datenbank passten.)

    – GrünMatt


  • 22. Januar 2010 um 17:09 Uhr

    Nun, die Frage ist etwas “vage”, und da die meisten PHP (Web)-Anwendungen eine Datenbank benötigen, habe ich das SQL-Zeug hinzugefügt.

    – Kartotsch

  • 22. Januar 2010 um 17:14 Uhr

    +1. obwohl die Antwort auf die meisten lautet: Verwenden Sie ein geeignetes Framework oder eine geeignete Bibliothek …

    – back2dos

22. Januar 2010 um 18:34 Uhr

“Warum benutzt du nicht etwas anderes?”

  • Entschuldigung, jemand musste es sagen 🙂

    Ich denke, das ist eigentlich eine gute Frage. Entwickler sollten erklären können, warum sie sich für eine Sprache/ein Framework/eine andere Technologie entschieden haben, und die Antwort sollte nicht lauten „weil ich noch nie etwas anderes ausprobiert habe“. PHP hat im Vergleich zu Alternativen Vor- und Nachteile, und entgegen der landläufigen (oder vielleicht elitären) Meinung gibt es triftige Gründe, es zu verwenden.

    – JAL

  • 22. Januar 2010 um 18:07 Uhr

    Das ist eine sehr gute Frage … obwohl ich PHP nicht mag, finde ich, dass es viele gute Gründe gibt, es unter bestimmten Umständen zu verwenden …

    – back2dos

  • 22. Januar 2010 um 18:35 Uhr

    Das wurde ich definitiv in Vorstellungsgesprächen für PHP/LAMP-Jobs gefragt. Ich stimme zu, dass es eine berechtigte Frage ist.

    – markb


22. Januar 2010 um 20:44 Uhr

Ist PHP Cross-Browser?

(Ich weiß, das wird viele Leute zum Lachen bringen, aber das ist die am häufigsten gestellte Frage in PHP-Foren!) Ich denke eine gute Frage wäre: Wie funktioniert HTTP? GET Arbeiten mit POST und

Daten neben anderen HTTP-Kommunikationen sind in der PHP-Entwicklung inhärent. Zu verstehen, wie HTTP in einem breiteren Kontext funktioniert und wie PHP dies implementiert, ist ein langer Weg.

Was ist der Unterschied zwischen == und === und warum sollten Sie überhaupt == verwenden? 2.5 Erklären Sie, warum der folgende Code angezeigt wird 3Anstatt von

$a = 012;
echo $a / 4;

: Antworten: 0 Wenn vor einer Zahl ein a steht in PHP wird die Zahl als eine behandelt oktal 012 Zahl (Basis-8). Daher die Oktalzahl 10ist gleich der Dezimalzahl

1345560cookie-checkFragen, die jeder gute PHP-Entwickler beantworten können sollte [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy