Zugegeben, ich habe diese Frage von irgendwo anders gestohlen (kann mich nicht erinnern, wo ich sie noch gelesen habe), fand sie aber lustig:
F: Was ist T_PAAMAYIM_NEKUDOTAYIM?
A: Es ist der Operator für die Bereichsauflösung (Doppelpunkt)
Ein erfahrener PHP'er weiß sofort, was es bedeutet. Weniger erfahrene (und nicht hebräische) Entwickler möchten dies möglicherweise lesen .
Aber jetzt ernstere Fragen:
F: Was ist die Ursache für diese Warnung: "Warnung: Header-Informationen können nicht geändert werden - Header werden bereits gesendet", und was ist eine bewährte Methode, um dies zu verhindern?
A: Ursache: Körperdaten wurden gesendet, wodurch auch Header gesendet wurden.
Prävention: Stellen Sie sicher, dass Sie zuerst den headerspezifischen Code ausführen, bevor Sie Körperdaten ausgeben. Stellen Sie sicher, dass Sie nicht versehentlich Leerzeichen oder andere Zeichen gesendet haben.
F: Was ist mit dieser Abfrage falsch : "SELECT * FROM table WHERE id = $_POST[ 'id' ]"?
A: 1. Es ist anfällig für SQL-Injection. Verwenden Sie Benutzereingaben niemals 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 vor allem dazu, zu verhindern, dass Abfragen den Speicher belasten, wenn beispielsweise zu einem späteren Zeitpunkt eine BLOB-Spalte hinzugefügt wird.
F: Was ist falsch an dieser if-Anweisung : if( !strpos( $haystack, $needle ) ...?
A: strpos Gibt die Indexposition zurück, an der die $ -Nadel gefunden wurde 0. Da sich 0auch falsedie Lösung auflöst, ist ein strikter Vergleich zu verwenden:if( false !== strpos( $haystack, $needle )...
F: Was ist die bevorzugte Methode, um diese if-Anweisung zu schreiben, und warum?
if( 5 == $someVar )oder if( $someVar == 5 )
A: Ersteres, da es die versehentliche Zuweisung von 5 zu $ someVar verhindert, wenn Sie vergessen, 2 Equalsigns ( $someVar = 5) zu verwenden, und einen Fehler verursacht, letzteres nicht.
F: Angesichts dieses Codes:
function doSomething( &$arg )
{
$return = $arg;
$arg += 1;
return $return;
}
$a = 3;
$b = doSomething( $a );
... was ist der Wert von $aund $bnach dem Funktionsaufruf und warum?
A: $a ist 4und $bist 3. Ersteres, weil $ arg als Referenz übergeben wird, letzteres, weil der Rückgabewert der Funktion eine Kopie des Anfangswertes des Arguments ist (kein Verweis darauf).
OOP-spezifisch
F: Was ist der Unterschied zwischen public, protectedund privatein einer Klassendefinition?
A: public stellt ein Klassenmitglied "allen" zur Verfügung, protectedstellt das Klassenmitglied nur sich selbst und abgeleiteten Klassen zur Verfügung, privatestellt das Klassenmitglied nur der Klasse selbst zur Verfügung.
F: Was ist mit diesem Code falsch:
class SomeClass
{
protected $_someMember;
public function __construct()
{
$this->_someMember = 1;
}
public static function getSomethingStatic()
{
return $this->_someMember * 5;
}
}
A: Statische Methoden haben keinen Zugriff auf $ this, da statische Methoden ausgeführt werden können, ohne eine Klasse zu instanziieren.
F: Was ist der Unterschied zwischen einer Schnittstelle und einer abstrakten Klasse?
A: 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 es erweitern. Bis zu einem gewissen Grad kann dies auch als Vertrag angesehen werden, da bestimmte Methoden garantiert werden.
F: Was ist falsch an Klassen, die vorwiegend Getter und Setter definieren, die direkt ihren internen Mitgliedern zugeordnet sind, ohne tatsächlich Methoden zu haben, die Verhalten ausführen?
A: Dies kann ein Codegeruch sein, da das Objekt ohne viel andere Verwendung als geadeltes Array fungiert.
F: Warum ist die Implementierung von Schnittstellen durch PHP nicht optimal?
A: Mit PHP können Sie den erwarteten Rückgabetyp der Methode nicht definieren, wodurch Schnittstellen im Wesentlichen ziemlich unbrauchbar werden. :-P