Ich weiß, das klingt nach einer punktgenauen Frage, aber lassen Sie mich erklären, woher ich komme.
Nach dem College bekam ich einen Job in einem PHP-Shop. Ich habe dort anderthalb Jahre gearbeitet und dachte, ich hätte alles gelernt, was man über Programmieren lernen muss.
Dann bekam ich einen Job als Ein-Mann-Entwicklungshaus bei einem großen Unternehmen, in dem die ganze Arbeit in C # war. In meinem Engagement für diese Position begann ich eine Menge Blogs und Bücher zu lesen und erkannte schnell, wie falsch ich war zu glauben, ich wüsste alles. Ich habe etwas über Unit-Tests, Abhängigkeitsinjektions- und Dekorationsmuster, das Designprinzip der losen Kopplung, die Zusammensetzung über die Erbschaftsdebatte usw. gelernt und so weiter und so fort - ich nehme immer noch alles in mich auf. Unnötig zu erwähnen, dass sich mein Programmierstil im letzten Jahr grundlegend geändert hat.
Jetzt nehme ich ein PHP-Projekt in die Hand, das für das Start-up eines Freundes programmiert, und fühle mich im Gegensatz zur Programmierung in C # völlig eingeschränkt. Es stört mich wirklich, dass auf alle Variablen in einem Klassenbereich verwiesen werden muss, indem '$ this->' angehängt wird. Es ärgert mich, dass keine der IDEs, die ich ausprobiert habe, eine sehr gute Intelligenz hat und dass meine SimpleTest-Unit-Test-Methoden mit dem Wort "Test" beginnen müssen. Es macht mich verrückt, dass ich durch dynamische Typisierung nicht implizit angeben kann, welchen Parametertyp eine Methode erwartet, und dass Sie eine switch-Anweisung schreiben müssen, um Methodenüberladungen durchzuführen. Ich kann es nicht ertragen, dass Sie keine verschachtelten Namespaces haben können und den Operator :: verwenden müssen, um den Konstruktor der Basisklasse aufzurufen.
Jetzt habe ich nicht die Absicht, eine Debatte zwischen PHP und C # zu beginnen. Ich möchte vielmehr sagen, dass ich sicher bin, dass es einige PHP-Funktionen gibt, die ich entweder nicht kenne oder die ich noch nicht richtig benutze. Ich bin in meinem C # -Universum und habe Probleme, außerhalb der Glasschale zu sehen.
Also frage ich, was sind deine Lieblingsfunktionen von PHP? Was können Sie darin tun, was Sie in den .NET-Sprachen nicht können oder schwieriger sind?
quelle
Antworten:
Dokumentation . Die Dokumentation bekommt meine Stimme. Ich habe keine gründlichere Online-Dokumentation für eine Programmiersprache gefunden - alles andere muss ich aus verschiedenen Websites und Manpages zusammensetzen.
quelle
Arrays . Nach den Antworten auf diese Frage zu urteilen, glaube ich nicht, dass die Leute genau wissen, wie einfach und nützlich Arrays in PHP sind. PHP-Arrays fungieren gleichzeitig als Listen, Karten, Stapel und generische Datenstrukturen. Arrays sind im Sprachkern implementiert und werden überall verwendet, was zu einer guten CPU-Cache-Lokalität führt. Perl und Python verwenden beide separate Sprachkonstrukte für Listen und Karten, was zu mehr Kopieren und möglicherweise verwirrenden Transformationen führt.
quelle
[[1, 2], [3, 4]]
Vergleichen Sie dies mit der PHP-Version :array(array(1, 2), array(3, 4))
.Mit Stream-Handlern können Sie das "FileSystem" mit einer Logik erweitern, die meines Wissens in den meisten anderen Sprachen nur schwer möglich ist.
Mit dem MS-Excel Stream-Handler können Sie beispielsweise eine MS Excel-Datei folgendermaßen erstellen:
quelle
Magische Methoden sind Fall-Through-Methoden, die aufgerufen werden, wenn Sie unter anderem eine nicht vorhandene Methode aufrufen oder eine nicht vorhandene Eigenschaft zuweisen oder lesen.
Ein C ++ - Entwickler hier könnte bemerken, dass PHP das Überladen einiger Operatoren erlaubt, z . B.
()
oder(string)
. Tatsächlich erlaubt PHP noch mehr Überladung, zum Beispiel den[]
Operator ( ArrayAccess ), dasforeach
Sprachkonstrukt ( Iterator und IteratorAggregate ) und diecount
Funktion ( Countable ).quelle
__call()
ist großartig in Frameworks mit map domain.com/controller/method/Die Standardklasse ist ein ordentlicher Container. Ich habe erst kürzlich davon erfahren.
Anstatt ein Array zum Speichern mehrerer Attribute zu verwenden
Sie können eine Standardklasse verwenden
Dies ist besonders hilfreich, wenn Sie auf diese Variablen in einer Zeichenfolge zugreifen
quelle
Include-Dateien können einen Rückgabewert haben, den Sie einer Variablen zuweisen können.
quelle
Sie können die Tatsache ausnutzen, dass der
or
Operator eine niedrigere Priorität hat als=
dies:Wenn der Wert der ersten Zuweisung ausgewertet wird,
true
wird die zweite Zuweisung ignoriert. Ein anderes Beispiel:quelle
or
wird, wenn der Code voror
den numerischen Wert ergibt0
. So semantisch mag es bei so etwas weniger wahrscheinlich sein$_GET['page']
, aber offensichtlich kann der Umstand eintreten und es ist gut, darauf zu achten.or
Operator eine niedrigere Version des||
Operators ist. Außerdem +1, weil dies sehr ausdrucksstark ist und ich oft vergesse, dass es möglich ist. Es sollte öfter verwendet werden und es ist absolut klar, was es tut. Ich weiß allerdings nicht, wie "echte Männer" codieren, daher kann ich das nicht kommentieren.__autoload()
(Klassen-) Dateien unterstützt vonset_include_path()
.In PHP5 ist es jetzt nicht mehr erforderlich, lange Listen mit "include_once" -Anweisungen anzugeben, wenn eine anständige OOP ausgeführt wird.
Definieren Sie einfach eine kleine Gruppe von Verzeichnissen, in denen Klassenbibliotheksdateien ordnungsgemäß strukturiert sind, und legen Sie den Pfad für das automatische Einschließen fest:
Nun die
__autoload()
Routine:Jetzt wird PHP die benötigten Dateien bei Bedarf automatisch einbinden, wodurch Analysezeit und Speicherplatz gespart werden.
quelle
Leichtigkeit . Das Beste ist, wie einfach es für neue Entwickler ist, sich hinzusetzen und "funktionierende" Skripte zu schreiben und den Code zu verstehen.
Das Schlimmste ist, wie einfach es für neue Entwickler ist, sich hinzusetzen und "funktionierende" Skripte zu schreiben und zu glauben, den Code zu verstehen.
Die Offenheit der Community rund um PHP und die enorme Menge an PHP-Projekten, die als Open Source verfügbar sind, sind für jemanden, der in die Entwicklungswelt eintritt, viel weniger einschüchternd und können wie Sie ein Sprungbrett in reifere Sprachen sein.
Ich werde nicht so viele technische Fragen diskutieren wie ich, aber wenn Sie PHP als Community und nicht als Web-Sprache betrachten, eine Community, die Sie zu Beginn Ihrer Entwicklung eindeutig umarmte, sprechen die Vorteile wirklich für sich.
quelle
Variable Variablen und Funktionen ohne Zweifel!
Das gleiche Konzept gilt für Objektparameter ($ some_object -> $ some_variable);
Sehr sehr nett. Machen Sie das Codieren mit Schleifen und Mustern sehr einfach und es ist schneller und kontrollierter als eval (Thanx @Ross & @Joshi Spawnbrood!). T.
quelle
Mit dem können Sie Funktionen mit einer undefinierten Anzahl von Argumenten verwenden
func_get_args()
.quelle
Ich liebe entfernte Dateien . Für die Webentwicklung ist diese Art von Funktion außerordentlich nützlich.
Müssen Sie mit dem Inhalt einer Webseite arbeiten? Eine einfache
und Sie haben ein Dateihandle bereit, genau wie jede andere normale Datei.
Oder wie wäre es, eine entfernte Datei oder Webseite direkt in eine Zeichenfolge einzulesen?
Die Nützlichkeit dieser speziellen Methode ist schwer zu übertreiben.
Möchten Sie ein Remote-Image analysieren? Wie wäre es über FTP?
Fast jede PHP-Funktion, die mit Dateien arbeitet, kann mit einer entfernten Datei arbeiten. Auf diese Weise können Sie Dateien sogar remote
include()
oderrequire()
codieren.quelle
strtr ()
Es ist extrem schnell, so sehr, dass Sie erstaunt sein würden. Intern verwendet es wahrscheinlich eine verrückte B-Baum-Struktur, um Ihre Übereinstimmungen nach ihren gemeinsamen Präfixen zu ordnen. Ich benutze es mit über 200 Such- und Ersetzungszeichenfolgen und es geht immer noch durch 1 MB in weniger als 100 ms. Für alle bis auf trivial kleine Strings ist strtr () sogar deutlich schneller als strtolower (), wenn es darum geht, genau dasselbe zu tun, selbst unter Berücksichtigung des Zeichensatzes. Sie könnten wahrscheinlich einen ganzen Parser mit aufeinanderfolgenden strtr-Aufrufen schreiben und es wäre schneller als die übliche Übereinstimmung mit regulären Ausdrücken, den Token-Typ herauszufinden, dies oder jenes auszugeben, die nächste Art von regulären Ausdrücken.
Ich schrieb einen Textnormalisierer, um Text in Wörter aufzuteilen, Kleinbuchstaben zu setzen, Satzzeichen zu entfernen usw. und strtr war mein Schweizer Taschenmesser, es schlug die Hosen aus regulären Ausdrücken oder sogar str_replace ().
quelle
Eine nicht so bekannte Funktion von PHP ist
extract()
eine Funktion, die ein assoziatives Array in den lokalen Namespace entpackt. Dies existiert wahrscheinlich für die autoglobale Abormination, ist aber sehr nützlich für das Templating:Jetzt können Sie verwenden
render_template('index.html', array('foo' => 'bar'))
und nur$foo
mit dem Wert"bar"
erscheint in der Vorlage.quelle
Range () ist an sich nicht versteckt, aber ich sehe immer noch viele Leute, die iterieren mit:
wann sie verwenden könnten:
Und Sie können einfache Dinge wie tun
quelle
Read Loop
.PHP-fähiger Webspace ist normalerweise günstiger als etwas mit (asp) .net. Man könnte das eine Funktion nennen ;-)
quelle
Das
static
Schlüsselwort ist außerhalb eines OOP-Standpunkts nützlich. Sie können schnell und einfach 'Memoization' oder Funktions-Caching implementieren, und zwar mit etwas so Einfachem wie:Das
static
Schlüsselwort erstellt eine Variable, die nur im Rahmen dieser Funktion nach der Ausführung erhalten bleibt. Diese Technik eignet sich hervorragend für Funktionen, die die Datenbank treffenget_all_books_by_id(...)
oderget_all_categories(...)
die Sie beim Laden einer Seite mehrmals aufrufen würden.Vorsichtsmaßnahme: Stellen Sie sicher, dass Sie herausfinden, wie Sie am besten einen Schlüssel für Ihren Hash erstellen können. Unter fast allen Umständen ist das
md5(...)
oben Gesagte KEINE gute Entscheidung (Geschwindigkeits- und Ausgabelängenprobleme). Ich habe es zur Veranschaulichung verwendet.sprintf('%u', crc32(...))
oderspl_object_hash(...)
kann je nach Kontext viel besser sein.quelle
Eine nette Funktion von PHP ist die CLI . Es ist in der Dokumentation nicht so "beworben", aber wenn Sie Routine-Skripte / Konsolen-Apps benötigen, ist die Entwicklung von cron + php cli sehr schnell!
quelle
wget http://example.com...
Dann "und drucken" Trick
Gibt Blah wieder, wenn $ flag wahr ist. ARBEITET NICHT MIT ECHO.
Dies ist sehr praktisch in Vorlage und ersetzen die? : das sind nicht wirklich leicht zu lesen.
quelle
Sie können Minuszeichen in Variablennamen wie diesen verwenden:
Warum es benutzen? Keine Ahnung: vielleicht für ein CSS-Modell? Oder ein seltsamer JSON, den Sie ausgeben müssen. Es ist eine seltsame Funktion :)
quelle
$item->DataContent->body->{'body.content'}
.Die HEREDOC- Syntax ist meine Lieblingsfunktion. Immer schwer zu finden, da Sie nicht für <<< googeln können, aber es verhindert, dass Sie großen HTML-Blöcken entkommen müssen, und Sie können trotzdem Variablen in den Stream ablegen.
quelle
Wahrscheinlich wissen nicht viele, dass es möglich ist, konstante "Variablen" als Standardwerte für Funktionsparameter anzugeben:
Strings können so verwendet werden, als wären sie Arrays :
quelle
Das Nützlichste an PHP-Code ist, dass ich, wenn ich eine Funktion, die ich sehe, nicht ganz verstehe, sie mithilfe eines Browsers nachschlagen und Folgendes eingeben kann:
Letzten Monat habe ich die Funktion "range" in einem Code gesehen. Es ist eine der Hunderten von Funktionen, die ich nie benutzt habe, die sich jedoch als sehr nützlich herausstellen:
Diese URL ist ein Alias für http://us2.php.net/manual/en/function.range.php . Diese einfache Idee, Funktionen und Schlüsselwörter URLs zuzuordnen , ist fantastisch.
Ich wünschte, andere Sprachen, Frameworks, Datenbanken und Betriebssysteme hätten einen so einfachen Mechanismus zum Nachschlagen von Dokumentation.
quelle
range()
kann nützlich seinforeach( range(1, 10) as $i) { };
PHP function
Geben Sie einfach die Adressleiste ein, um eine Google-Suche "Ich fühle mich glücklich" durchzuführen, und Sie landen fast immer auf der richtigen PHP-Dokumentationsseite.Schnelle Blockkommentare
Mit diesen Kommentaren können Sie umschalten, wenn ein Codeblock mit einem Zeichen kommentiert ist.
quelle
// ...
Zeilenkommentare und/* ... */
Blockkommentare unterstützt./** /
vorher und/**/
nachher verwendet. Sie können den Block umschalten, indem Sie das Leerzeichen im ersten entfernen und hinzufügen. Dies hat einen zusätzlichen Vorteil bei der Arbeit mit CSS (und anderen Sprachen, die keine// ...
Kommentare unterstützen).Meine Liste ... die meisten von ihnen fallen mehr unter die "versteckten Funktionen" als unter die "Lieblingsfunktionen" (ich hoffe!), Und nicht alle sind nützlich, aber ... ja.
Sie können auch ternäre Operatoren verschachteln, was manchmal nützlich ist.
Richtig, ich höre erstmal auf :-)
Hmm, es ist schon eine Weile her ..
Soeben entdeckt, können Sie eine beliebige Zeichenfolge als Methodennamen übergeben, wenn Sie sie in geschweifte Klammern setzen. Sie können leider keine Zeichenfolge als Methode definieren, aber Sie können sie mit __call () abfangen und nach Bedarf weiterverarbeiten. Hmmm....
Fand dieses kleine Juwel in Reddit Kommentare:
Sie können Funktionen in {} nicht direkt so aufrufen, aber Sie können Variablen verwenden, die den Funktionsnamen enthalten, und diese aufrufen! (* und * Sie können auch variable Variablen verwenden)
quelle
${''} = 456;
hahaha .... ziemlich der Missbrauch.Array-Manipulation.
Tonnenweise Werkzeuge zum Arbeiten und Bearbeiten von Arrays. Es ist vielleicht nicht nur für PHP verfügbar, aber ich habe noch nie mit einer Sprache gearbeitet, die es so einfach gemacht hat.
quelle
Ich bin ein bisschen wie du, ich habe PHP seit über 8 Jahren codiert. Ich musste vor ungefähr einem Jahr einen .NET / C # -Kurs belegen und ich mochte die C # -Sprache (hasste ASP.NET) sehr, aber sie machte mich zu einem besseren PHP-Entwickler.
PHP als Sprache ist ziemlich schlecht, aber ich bin extrem schnell damit und der LAMP-Stack ist fantastisch. Das Endprodukt überwiegt bei weitem die Summe der Teile.
Das heißt, als Antwort auf Ihre Frage:
http://uk.php.net/SPL
Ich liebe die SPL , die Sammlungsklasse in C # hat mir gefallen, als ich damit angefangen habe. Jetzt kann ich meinen Kuchen haben und ihn essen.
Andrew
quelle
Ich bin ein wenig überrascht, dass es noch niemand erwähnt hat, aber einer meiner Lieblingstricks mit Arrays ist die Verwendung des Plus-Operators. Es ist ein bisschen wie
array_merge()
aber ein bisschen einfacher. Ich habe festgestellt, dass es normalerweise das ist, was ich will. Tatsächlich werden alle Einträge in der RHS übernommen und in einer Kopie der LHS angezeigt, wobei sie bei Bedarf überschrieben werden (dh nicht kommutativ sind). Sehr nützlich, um mit einem "Standard" -Array zu beginnen und einige echte Werte mit einem Schlag hinzuzufügen, während die Standardwerte für nicht bereitgestellte Werte beibehalten werden.Codebeispiel angefordert:
quelle
$defaults
sollte sein$control_defaults
... + array( ...
, reicht nicht aus, um darauf hinzuweisen? :-)Ich mag, wie das Festlegen von Standardwerten für nicht bereitgestellte Funktionsparameter viel einfacher ist:
quelle
Schnell und schmutzig ist die Standardeinstellung.
Die Sprache ist mit nützlichen Verknüpfungen gefüllt. Dies macht PHP zum perfekten Kandidaten für (kleine) Projekte mit einer kurzen Markteinführungszeit. Nicht dass sauberer PHP-Code unmöglich ist, es erfordert nur zusätzlichen Aufwand und Erfahrung.
Aber ich liebe PHP, weil ich damit ausdrücken kann, was ich will, ohne einen Aufsatz zu schreiben.
PHP:
JAVA:
Und ja, dazu gehört auch, Int nicht einzugeben .
quelle
//
in die Sprache eingebaut ist.