Welche Funktionen möchten Sie in PHP haben? [geschlossen]

88

Ich frage mich, welche Sprachfunktionen Sie sich wünschen, wenn PHP hinzugefügt worden wäre, da gerade Ferienzeit ist und sich jeder etwas wünscht. Ich interessiere mich für einige praktische Vorschläge / Wünsche für die Sprache. Mit praktisch meine ich:

  1. Etwas, das praktisch getan werden kann (nicht: "Ich wünschte, PHP würde erraten, was mein Code bedeutet und Fehler für mich beheben" oder "Ich wünschte, jeder Code würde unter 5 ms ausgeführt")
  2. Etwas, bei dem PHP nicht in eine andere Sprache geändert werden muss (nicht: "Ich wünschte, sie würden $ -Zeichen fallen lassen und Leerzeichen anstelle von geschweiften Klammern verwenden" oder "Ich wünschte, PHP wäre kompiliert, statisch typisiert und hätte # in seinem Namen")
  3. Etwas, das nicht erfordern würde, den gesamten vorhandenen Code zu brechen (nicht: "Benennen wir 500 Funktionen um und ändern Sie die Parameterreihenfolge für sie")
  4. Etwas, das die Sprache oder einen interessanten Aspekt davon ändert (nicht: "Ich wünschte, es gäbe eine Erweiterung zur Unterstützung des XYZ-Protokolls" oder "Ich wünschte, Bug # 12345 wäre endlich behoben")
  5. Etwas, das mehr ist als ein Scherz (nicht: "Ich wünschte, PHP würde nicht so schlecht saugen")

Hat jemand gute Wünsche?

Mod edit: Stanislav Malyshev ist ein Kernentwickler von PHP.

StasM
quelle
9
@Stan: So sehr du diese Art von Kommentar vermeiden möchtest, wirst du es trotzdem bekommen. Die Probleme der Menschen haben mit PHP sind weitgehend in den Kategorien der Dinge , die Sie in Ihrem Beitrag auszuschließen. [...]
Fishtoaster
24
[...] Du sagst: "Wie können wir die Erfahrung verbessern, ins Gesicht getroffen zu werden, ohne dich tatsächlich ins Gesicht zu schlagen?" Ich meine, ja, kostenlosen Kaffee zu bekommen, während wir ins Gesicht geschlagen werden, mag nett sein, es spricht nicht wirklich viele der zugrunde liegenden Probleme an, wenn man ins Gesicht geschlagen wird. Obwohl ich hoffe, dass Sie hier einige nützliche Antworten erhalten (wie es bereits scheint), sollten Sie sich nicht von unproduktiven überraschen lassen.
Fishtoaster
5
@Fishtoaster: Wenn PHP für Sie mit einem Schlag ins Gesicht in Verbindung gebracht wird, halten Sie sich auf jeden Fall davon fern. Sie sind definitiv nicht daran interessiert, es zu verbessern. Es passiert so, obwohl es Menschen gibt, die es sind. Dieses Thema ist für sie, nicht für dich. Ich bin sicher, diese Seite hat auch viele Themen für Sie, dies ist nur keine davon.
StasM
5
Ich benutze es als Beispiel, wie man ins Gesicht getroffen wird - eine Situation, in der oberflächliche Verbesserungen nicht so wichtig sind; wenn die meisten Menschen Probleme mit der zugrunde liegenden Sache haben. Ich schlage nicht einmal Ihren Versuch vor, Vorschläge für diese oberflächlichen Verbesserungen zu erhalten. Ich möchte nur darauf hinweisen, warum Sie unter den gegebenen Umständen wahrscheinlich ein paar nicht hilfreiche Antworten erhalten.
Fishtoaster
6
@Fishtoaster: Nicht jeder hasst überraschenderweise PHP - es hat mir immer gefallen. Sehr flexibel und schnell (zu codieren).
Orbling

Antworten:

119

Ich hätte nichts dagegen, benannte Parameter.

getData(0, 10, filter => NULL, cache => true, removeDups => true);
// instead of:
getData(0, 10, NULL, true, true);

// or how about:
img(src => 'blah.jpg', alt => 'an albino platypus', title => 'Yowza!');

Leider haben die PHP-Entwickler diese Idee bereits abgeschossen .

Notiz an mich selbst - denke an einen Namen
quelle
1
Es ist die Liste von 2005. Viele Ideen wurden geschlossen und dann wiedergeboren. Tatsächlich gibt es eine gute Chance, dass eine gute Implementierung akzeptiert wird.
StasM
21
Es ist meine Lieblings-Python-Funktion. Macht den Code sehr selbstdokumentierend.
Keyo
7
@Josh K: Es ist in Ordnung, aber der 'Array'-Aufruf ist sinnloser Müll, wenn man so will. Es verschleiert nur, was Sie WIRKLICH versuchen zu tun. Eine andere Option wäre eine Kurzsyntax für Arrays: make_img (['src' => 'blah.jpg', ...]);
Erik van Brakel
2
@Erik: Das ist auch keine schlechte Option, ich sage, warum füge ich diese Unordnung einer Sprache hinzu, wenn du es bereits mit einem kleinen Array-Wrapper kannst.
Josh K
4
@Erik: Entspanntere Syntax für Arrays (wie der JavaScript- []Operator) wäre ein willkommenes Feature.
Josh K
93

Weitere Dereferenzierung:

echo something_that_returns_array()[4];

Andere haben benannte Parameter und eine kürzere Array-Syntax erwähnt. Mir würde auch die kürzere Objektsyntax nichts ausmachen.

$a1 = array(1, 2, 3, 4);
$a2 = [1, 2, 3, 4];

$b1 = (object)array('name' => 'foo');
$b2 = {'name' => 'foo'}; // or something?
Annika Backström
quelle
18
() [] -Syntax ist bereits in trunk. Leider wurden Array-Verknüpfungen abgelehnt, aber ich hoffe auf Auferstehung.
StasM
2
Ich würde dieses Feature lieben. Warum können wir etwas_das_Returns_Object () -> 4 haben, aber nicht mit Arrays?
Bala Clark
4
Javascript wie Array- und Objektnotationen würde rocken. Als Front-End-Entwickler stört mich das am meisten an PHP-Code.
Bleep Bloop
1
@ DisgruntledGoat Es tut, siehe:function something_that_returns_array() { return array( 'a', 'b', 'c', 'd', 'e' ); }
Annika
2
@DisgruntledGoat: Das Problem mit der ()->Syntax ist, dass es nur funktioniert, wenn ein Objekt zurückgegeben wird. Um die Sache noch schlimmer zu machen, muss das Objekt sogar über eine Eigenschaft / Methode mit dem angegebenen Namen verfügen, die optimalerweise das tut, was Sie sich erhofft haben , während Sie die Parameter akzeptieren, die Sie ihm gegeben haben, und beten, dass es nicht mehr benötigt ... usw.
phant0m
72

Nachdem ich ungefähr 13 Jahre mit PHP und ungefähr 4 Jahre mit JS gearbeitet habe, gibt es ein paar Dinge, von denen ich denke, dass PHP gut geeignet ist, um sie von JS auszuleihen:

1) Kurzschreibweise für Arrays und Objekte. Ich glaube, dass dies auf Internals diskutiert und abgeschossen wurde (so höre ich - ich sehe nicht gern, wie die Wurst hergestellt wird), aber ich finde wirklich, dass die wörtliche Notation für Arrays und Objekte in JS eine große ist Produktivität gewinnen.

Zum Beispiel:

$arr     = [1,2,3,4];
$assoc   = [foo=>'bar', baz=>'boo'];
$stdobj  = {foo->'bar', baz->'boo'};

Ist (meiner Meinung nach) einfach viel einfacher zu schreiben und sauberer als

$arr     = array(1,2,3,4); // not too bad
$assoc   = array("foo"=>'bar', baz=>'boo'); // not too bad either
$stdobj  = new stdClass; // this gets pretty rough
$stdobj->foo = 'bar';
$stdobj->baz = 'boo';

Ich habe gehört, dass Bedenken hinsichtlich möglicher Verwirrung laut wurden, aber ist dies wirklich verwirrender als beispielsweise die Heredoc-Notation? Zumindest ist das Erstellen eines stdClass-Objekts in PHP ausführlich genug, um die Praxis zu entmutigen, denke ich.

2) In der Lage zu sein, zuvor definierte Funktionen und Methoden neu zu definieren, wäre wirklich nützlich. Dies würde insbesondere Situationen vereinfachen, in denen eine Klasse erweitert wird und die Instanziierung der neuen Klasse entweder zu komplex oder unpraktisch ist. Ich denke, wir sollten jedoch eine Neudefinition der Funktionen und Methoden von Core- und Non-Userspace-Systemen vermeiden.


Zusätzlich zu diesen beiden muss PHP meines Erachtens Unicode transparent unterstützen . Dies wird für Entwickler immer mehr zu einem Problem, und die derzeit in PHP angebotenen Lösungen sind verwirrend und häufig nicht performant. Alle Standard-String-Funktionen sofort unicode-freundlich zu machen, wäre ein großer Gewinn für PHP-Programmierer.

Danke für die Frage!

Funkatron
quelle
(2) Schau dir Runkit an. (3) Unicode ist schwer, zumal der größte Teil der Außenwelt kein Unicode ist. Wir müssten entweder die Leistung abbrechen oder die Leute dazu auffordern, viel zusätzliche Arbeit zu leisten (wie es Java tut). Das ist, warum PHP6 Unicode Aufwand nicht geklappt hat.
StasM
8
Was Unicode betrifft: Es mag schwierig sein, aber es wäre äußerst nützlich (die Entwicklung von PHP selbst ist sicherlich schwierig, bietet aber große Vorteile, ja?). sehr wie XHP? Danke noch einmal.
Funkatron
5
$ object = (object) array ("foo" => 'bar', baz => 'boo');
mercutio
3
Ich sehe nicht, wie Sie sehen können, "der größte Teil der Außenwelt ist kein Unicode"? Sprechen Sie über Menschen? Oder etwas anderes? Weil die überwiegende Mehrheit der Menschen auf der Welt (mit großem Abstand) Sprachen spricht, die am besten von Unicode repräsentiert werden.
Dean Harding
1
Auf jeden Fall Unicode-Unterstützung. Das Versenden von weltweit genutzten Apps ist ein Nichtstarter ohne diese App. Ob die PHP-Entwickler denken, dass das Engineering in angemessener Unicode-Unterstützung einfach ist oder nicht, ist nebensächlich. Die Leute brauchen es und hacken sich herum, wenn die Plattform es nicht schafft. Delphi hat dazu einen weiteren String-Typ hinzugefügt und ihn mit implizitem Casting und einem globalen Schalter zum Standard gemacht, um das alte Verhalten wiederherzustellen. Warum kann PHP nicht genauso vorgehen?
Joeri Sebrechts
48

Dinge, die ich als ehemaliger langjähriger PHP-Apologet möchte:

  1. Kürzere Syntax für Arrays. PHP-Arrays sind aufgrund ihrer Flexibilität eine der beeindruckendsten Funktionen der Sprache, aber das Schreiben ist ein Kinderspiel some_array_method($argity, array('key' => $value));. Ich glaube, dieser Vorschlag wurde leider bereits auf der PHP-Mailing-Liste entfernt.
  2. finally Unterstützung
  3. Attribute / Anmerkungen. Mit diesen können Sie einer Methode ein benutzerdefiniertes Verhalten hinzufügen, das die Wiederverwendung von Code ermöglicht. In einem MVC-Framework könnte beispielsweise eine definiert werden AuthorizeAttribute, die angibt, dass für einen Controller oder eine Aktionsmethode die Autorisierung des Benutzers erforderlich ist. Das Framework selbst wäre dafür verantwortlich, die Attribute zu suchen und entsprechend zu handeln. Ich glaube, PHPUnit verwendet bereits eine Art Attribut, indem es sie in Docblock-Kommentare einfügt, die mit Reflection gelesen werden können, aber das Einfügen der tatsächlichen Funktionalität in Docblock-Kommentare ist mit Sicherheit ein Hack.
  4. Kürzere Lambda-Syntax. Anstatt schreiben zu müssen function($x){ return $x*2;}, könnte ich vielleicht schreiben $x => return $x*2oder so. Dies ist wieder etwas, das es einfach zu einer Belastung macht, diese Funktion zu verwenden. Zum Beispiel $results = array_filter(array(1,2,3), function($a) { return $a % 2; }):vs $results = array_filter(array(1,2,3), $a => return $a % 2 );Ersteres hat einfach so viel mehr Klempnerarbeiten, die für die eigentliche Arbeit, die Sie ausführen möchten, im Grunde irrelevant sind.
  5. Eine eingebaute Decimal(Festkomma-Mathematik), die mathematische Operationen durch die normalen Operatoren unterstützt, wäre nett, da wir keine Überladung von Operatoren haben.
  6. MOAR MAGISCHE METHODEN. Magische Methoden sind großartig. Ich konnte sehen, wie PHP das Überladen von Operatoren über magische Methoden hinzufügte (ich weiß, dass dies im Grunde nie passieren wird.) Aber im Allgemeinen bieten sie wirklich großartige Möglichkeiten, sich in die Sprache einzuklinken und coole Dinge zu tun.
davidtbernal
quelle
48

Machen Sie PHP wirklich objektorientiert. Die slap on another global functionEntwicklung von PHP muss ein Ende haben.

array_merge(array_filter(array_intersect_key($arr1, $arr2), "is_int"), $arr3);

Das ist schwer für mich zu lesen. Ich muss meinen eigenen mentalen Stack erstellen und ihn irgendwie selbst kompilieren. Grundsätzlich sollte es umgekehrt lesen. $dog->wakeup()->bark();ist leicht zu lesen im Vergleich zubark(wakeup($dog))

$arr1->array_intersect_key($arr2)->array_filter("is_int")->array_merge($arr3);

Sie haben den Schritt zur Aktivierung der Objekt- / Methodenunterstützung gemacht. Verwenden Sie diese jetzt in den eigentlichen Kernfunktionen von PHP.

Benennen wir 500 Funktionen um und ändern die Parameterreihenfolge für sie.

Wenn Sie diese Funktionalität auf Methoden verlagern, können Sie sie mit einigen konsistent umbenennen. Würde es die Abwärtskompatibilität stören, wenn Strings und Arrays ihre eigenen Methoden hätten?

Keyo
quelle
3
Ich denke, Array kein Objekttyp zu sein, ist ein großer Fehler in PHP. Führt zu allerlei Ärger. Leider ist es eine evolutionäre Sache. Sie können hier jedoch mit Erweiterung oder Benutzerbereich tun, was Sie möchten. Wäre wohl SPL-tauglich.
StasM
3
Das gleiche Argument gilt für Zeichenfolgen. Ich beziehe mich nur auf den Mangel an Methoden im Allgemeinen. Sprachen wie Java, Python, C # usw. haben viel besser lesbaren Code. Ich vermute, Sie suchen nach Funktionen, aber das Reparieren von IMO-Fehlern wäre eine bessere Auszahlung.
Keyo
6
Nein, sei nicht albern. Es wäredog_wake_up($dog); bark_dog($dog);
Matchu
2
IMHO sollten alle neuen Zeichenfolgemethoden UTF-8 erwarten und ausgeben und Ausnahmen auslösen, wenn die Eingabe nicht UTF-8-gültig ist. Dies würde die Notwendigkeit einer umfassenden Überarbeitung der Unicode-Unterstützung erheblich reduzieren.
rjmunro
1
@ luiscubal Nein. Ein zusätzlicher Parameter bedeutet, dass wir später keine Parameter hinzufügen können, wenn wir neue Dinge erfinden, die der Funktion hinzugefügt werden sollen. Wenn beispielsweise $ string => trim () nur Leerzeichen (wie vor 4.1.0) verwendet, würde Ihr System sagen, dass $ string => trim ('ISO-8859-1') Leerzeichen von ISO-8859-1-Zeichenfolgen abgeschnitten hat . Wenn wir dann in der Lage sein wollten, Dinge zu trimmen, die kein Leerzeichen sind, könnten wir den Parameter dafür nicht hinzufügen, es sei denn, wir lassen die Leute zuerst die Codierung angeben. Wir sollten die Leute ermutigen zu glauben, dass jeder Text, der nicht UTF-8 ist, falsch ist .
rjmunro
40

Eine sprachintegrierte Abfrage-Engine wäre toll. So ähnlich wie das, was in .NET verfügbar ist und als LINQ bezeichnet wird. Dies würde dazu beitragen, massive Arrays von Daten zu sortieren und den Datenbankzugriff zu standardisieren, sodass weniger SQL-Injection-Angriffe erfolgreich sind.

Nick Berardi
quelle
2
Alles, was parametrisierte Abfragen einfacher macht, bekommt meine Stimme!
Dean Harding
1
Ich denke, der standardisierte Datenbankzugriff ist tatsächlich ein sehr wichtiger Vorteil von etwas wie LINQ, weil ich denke, dass dies Unit-Tests mit Mocks Ihrer Datenbankobjekte einfacher macht (da Sie PHP-Code anstelle von SQL-Abfragen verspotten.)
davidtbernal
ich glaube nicht, dass so etwas in den kern geraten sollte. es würde besser in eine pecl-erweiterung passen
harald
38

Oh. Tippe Hinweise für Primitive. Das wäre nett.

ruurd
quelle
1
Obwohl ich das KISS-Prinzip von PHP (in gewissem Maße) mag, bin ich dem nachdrücklich gefolgt. Der Grund dafür ist, dass Sie, wenn Sie wirklich defensiv sein möchten, bei jeder Setter-Methode denselben Typprüfcode erhalten. Wir könnten das leicht fallen lassen, wenn die Sprache es von Haus aus unterstützt.
MicE
4
"Tipping" war ein sehr unglücklicher Name, da es sich nicht um "Tipping" handelt, sondern um eine strikte Schreibweise. Ich denke, primitives striktes Tippen wäre in einer dynamischen Sprache wie PHP fehl am Platz. Die erzwungene Eingabe (dasselbe, was interne Funktionen tun - versuchen Sie es mit strlen (123)), ist möglicherweise in Ordnung.
StasM
6
+1 dafür. Tipping (oder strikte Typisierung) in Funktionsdeklarationen wäre unglaublich hilfreich und würde so viel reduzieren, wenn (! Is_int ()) in JEDER Methode Mist ist.
Phil Stör
5
@StasM Ich stimme nicht zu. Im Rahmen einer dynamischen Sprache ist es perfekt, dem Benutzer die Wahl zu lassen, die Sprache auf statisch typisierte Weise zu verwenden. Und es würde ein viel besseres Abfangen von Fehlern ermöglichen. Sie müssten es nicht verwenden, wenn Sie nicht möchten, aber ich persönlich habe es satt, dass Zeichenfolgen an der Stelle übergeben werden, an der ich eine Ganzzahl gewünscht habe, und dass ich dann den Code durchsuchen muss, um herauszufinden, an welcher Stelle die dumme Zeichenfolge übergeben wird Oder tippen Sie die ganze Zeit ein, um alles zu überprüfen.
Daniel Bingham
2
@StasM Es gibt absolut keinen Grund, vollständig statisch typisierte Variablen einzuführen. Ja, Sie würden die Fehler in Ihrem Code verschieben. Das wäre der springende Punkt. Der Fehler würde zum Zeitpunkt des Funktionsaufrufs und nicht innerhalb der Funktion auftreten. Sie wissen also nicht, wo der Fehler tatsächlich auftritt. Bei Typkonvertierungsfehlern würde der Fehler - ja zur Laufzeit - beim Funktionsaufruf auftreten. Beheben Sie das Problem, indem Sie direkt dort auf den richtigen Typ konvertieren. Viel besser, als eine Zeichenfolge in einer Funktion zu haben, die ein int erwartet und nicht weiß, von wo.
Daniel Bingham
34

Ich wünsche mir wirklich eine bessere Unicode-Unterstützung von Anfang an. Die meisten Sprachen bewegen sich in diese Richtung, aber PHP hat immer noch seltsame Befehle.

PHP-Strings sind reine Byte-Arrays. Ihr Inhalt ist nicht portierbar, da er von der aktuellen Standardkodierung abhängt.

Gleiches gilt für die von serialize erstellte Darstellung. Es enthält eine Byte-Darstellung mit vorangestellter Länge der Zeichenfolge, ohne tatsächlich Kodierungsinformationen zu speichern.

Die meisten PHP (String) -Funktionen haben keine Ahnung von Unicode. Eine detaillierte Liste mit den Risikostufen der einzelnen Funktionen finden Sie unter: http://www.phpwact.org/php/i18n/utf-8

http://blog.ginkel.com/2010/03/php-unicode-support-or-the-lack-thereof/

Emil Stenström
quelle
Die Unicode-Unterstützung erwies sich als viel schwieriger als gedacht. Das ist der Grund, warum die PHP6-Bemühungen zum Stillstand gekommen sind. Im Moment haben wir utf-8 und ich denke, der beste Weg wäre, utf-8-Unterstützung für String-Funktionen hinzuzufügen, vielleicht als Teil der intl-Erweiterung.
StasM
3
Übrigens ist das Zitat falsch. PHP-Strings sind Byte-Arrays, aber ihr Inhalt ist so portabel, wie Sie ihn erstellen, und hängt nicht von der "Standardkodierung" ab - es handelt sich nur um ein Array von Bytes, Sie möchten sie in utf8, put utf8, want utf16 - put utf16. Der phpwact.org-Link scheint tot zu sein.
StasM
1
Ich würde wirklich hoffen, dass die intl-Erweiterung standardmäßig aktiviert ist, sodass Leute, die UTF-8 benötigten (nicht alle?), Nicht mit ihren Hosts kämpfen mussten, um die String-Funktionen so zu nutzen, wie erwartet.
Emil Stenström
Auch danke für die Klarstellung auf Saiten. Ich bin jetzt schon eine Weile weg von PHP, also bin ich ein bisschen verrostet. Ich habe stattdessen den Unicode-Krieg mit Python geführt, der ähnliche Probleme wie PHP hat, diese jedoch in Python 3 löst. Ein schwedisches "ö" in Ihrem Namen ist ein Chaos :)
Emil Stenström
Dies ist definitiv ein Bereich, in dem ich eine Verbesserung sehen möchte.
Nathan Osman
32

Stellen Sie Strings wie Objekte dar, mit eingebauten Methoden, um die inkonsistent benannten und parametrierten Nicht-Objekt-Methoden zu ersetzen. z.B

$subject->replace($search,$replace);
$string->split($separator);
$string->trim();

usw.

Bearbeiten: eine weitere Sache: Diese Methoden sollten immer UTF-8 erwarten und ausgeben, mit Ausnahme derer, die speziell für Codierungen vorgesehen sind. Wenn die Eingabe ungültig ist (UTF-8), sollte eine Ausnahme ausgelöst werden, auch wenn die Ausgabe der Funktion von der Codierung nicht beeinflusst wird.

pro Minute
quelle
up, das ist genau das, was ich anstrebe.
Kemo
1
subject->verb(object), macht die Parameterreihenfolge leichter zu merken.
Ming-Tang
+1 Ich habe versucht, meine eigene String-Klasse zu erstellen, um so etwas zu tun. Das macht das Codieren so viel einfacher und Sie vergessen nie die Reihenfolge der Parameter.
DisgruntledGoat
2
Was würde also is_object($string)zurückkehren? Dies würde entweder die Abwärtskompatibilität zeitaufwändig durchbrechen oder zur Einführung wirklich unintuitiver Objekte führen, die fast nicht ganz so sind.
Tgr
@Tgr: is_object () sollte veraltet sein - Es sollte kein "kein Objekt" geben. Kurzfristig müsste es sich um eine Eigenschaft handeln, die Sie für jedes Objekt deaktivieren können, und die Standardzeichenfolgenkonstruktoren würden sie deaktivieren.
rjmunro
24

1) Ich würde es lieben, wenn neu instanziierte Objekte "$ this" zurückgeben, damit ich die Methodenkette $ user = new User ('john') -> setLastName ('Doe') -> save () verwenden kann.

2) Wenn Sie jemals Ruby und zuletzt Node verwendet haben, haben sie eine großartige interaktive Shell (IRB). Ich würde es lieben, wenn PHP eines hätte, das tatsächlich nützlich ist.

3) Traits / Mixins, aber ich höre, dass diese auf dem Weg sind.

4) Ich möchte das kurze Array $ myArray = ['my', 'array'] an zweiter Stelle setzen.

5) Konsistente Benennung / Reihenfolge (zB Nadel Heuhaufen)

Jakefolio
quelle
Ich hasse es, eine create()Methode zu entwickeln, die nichts Besonderes tut, nur um # 1 zu umgehen!
Alan Pearce
Ich mache dasselbe, aber unter Verwendung der späten statischen Bindung und einer Objekt-Superklasse hat jede Klasse, die meine Superklasse erweitert, die Methode, zB: SomceClass erweitert SuperObject {}; SomeClass :: create () -> somemethod ();
dukeofgaming
Schauen Sie sich github.com/philsturgeon/php-ps an. Es ist nur ein Anfang, aber mit etwas Hilfe könnte es sehr nützlich sein.
Phil Stör
1
Es gibt auch ein PEAR-Paket, das eine interaktive Shell zum Codieren schneller Experimente in PHP bietet - verfügbar unter pear.php.net/package/PHP_Shell
kguest
(new Foo ()) -> bar () ist Teil von 5.4. 3) und 4) sind auch.
StasM
20

1) bitte Includes () entfernen. Verweise auf andere Dateien sollten Verweise sein und nicht den Inhalt einer Quellcodedatei in eine andere einfügen. Viel zu viele PHP-Programmierer verwenden include () eher als eine Art Funktionsaufruf als als ein Mittel, um auf eine Bibliothek zu verweisen. Dies führt zu jeder Art von Mehrdeutigkeit im variablen Zustand und in instabilem Code. Ersetzen Sie dies durch einen Perl-ähnlichen Befehl 'use'.

2) Bitte stellen Sie eine sofort einsatzbereite Methode zum Kompilieren einer PHP-Anwendung in eine einzelne verteilbare Bytecode-Datei oder ausführbare Datei bereit. Dies wird die Attraktivität von PHP als kommerzielle Entwicklungssprache erheblich steigern. Dies sollte ein grundlegender Bestandteil der Sprache sein. Mach dir keine Sorgen über die HTML-Dateien, die für die GUI einer Anwendung verwendet werden, weil ...

3) Bitte verzichten Sie auf die Möglichkeit, PHP-Tags in HTML einzubetten. Oder stellen Sie zumindest einen Modus ohne Einbettung bereit. Dies ist ein absolutes Chaos und fördert schlechtes Design, indem Anwendungslogik und Präsentation miteinander vermischt werden. Entwickler sollten Vorlagen für die Anzeige verwenden, keine PHP-Dateien zusammenfügen und auf das Beste hoffen.

Unterzeichnet,

GroßmeisterB

ps: hör nicht zu was andere hier sagen, ich war das ganze Jahr nett

GroßmeisterB
quelle
37
1). Includes sind super. Alles hat beinhaltet. 2). Das ist gut. 3) Templating ist das stärkste Feature von PHP . Es wäre ein sehr schlechter Schachzug, Sie dazu zu zwingen, einen anderen Bullshit für Vorlagen zu verwenden.
Josh K
8
Ich mag (1) und (2), aber (3) scheint ein rückläufiger Schritt zu sein. PHP gibt Ihnen die Möglichkeit, Vorlagen zu erstellen. Es liegt an Ihnen, ob Sie es mit Bedacht einsetzen oder nicht.
Geekbrit
11
3 macht keinen Sinn - das Einbetten von Tags ist für alle V in MVC-Frameworks erforderlich.
Alex
9
Ich las diese Antwort als "Lieber Weihnachtsmann, bitte machen Sie PHP nicht PHP sein."
Stephen
1
3 ist direkt aus, als PHP ist eine Template - Sprache.
Andrew
18

Eine ini-Direktive für E_ERRORundefinierte Konstanten, anstatt anzunehmen, dass es sich um eine Zeichenfolge mit handelt E_NOTICE.

Annika Backström
quelle
1
Klassenkonstanten machen das übrigens.
StasM
4
Ernsthaft verstehe ich nicht, warum sie PHP veranlassen, nicht zitierte Zeichenfolgen anzunehmen. Es ist die dümmste Sache überhaupt. Ich würde entweder E_ERRORoder wählen E_PARSE.
BoltClock
14

Normalisieren Sie den globalen Namespace mit einer durchdachten Namenskonvention, die für Neulinge sinnvoll ist!

Um unseren geliebten Jeff Atwood zu zitieren: PHP ist zum Kotzen, aber egal !

David Murdoch
quelle
1
Ich stimme im Prinzip zu, habe aber keine Ahnung, wie es in der Praxis zu tun ist :)
StasM
3
@StasM: Ich stelle mir vor, dass der erste Schritt darin besteht, die neuen Versionen der Bibliotheken mit einem Namensraum zu versehen und Programmierern (über INI-Einstellungen) die Deaktivierung der derzeit globalen Bibliotheken zu ermöglichen. Ich würde denken, ein Kompatibilitätspaket wäre für ältere Versionen in Ordnung, sollte aber nicht sehr schwer zu schreiben sein.
Michał T
13

Zeichenfolgen sollten Objekte sein

Kemo
quelle
1
Ich wünschte, ich könnte dies mehr als einmal befürworten.
EricBoersma
13

1) Kürzere Array / Objekt-Syntax, a la JavaScript (wie zuvor erwähnt)

2) constVariablen erlauben, das Ergebnis einer Berechnung wie define()folgt zuzulassen .

3) Verketten direkt vom Konstruktor: new User()->name('Ryan');

4) Array-Dereferenzierung: something_that_returns_array()[4];

5) Erweiterte SPL-Unterstützung. SPL leistet gute Arbeit darin, Zeichenfolgen- und Arrayfunktionen (unter anderem) als Objekte neu zu definieren. Das Erweitern der SPL könnte viele Probleme lösen, wenn die Sprache so nervös ist.

6) Verwenden ArrayObject()sollte so transparent sein wie Verwenden array(). Sie sollten in der Lage sein, Dinge zu tun, array_filter($array_object_instance)ohne dies zu tun array_filter($array_object_instance->getArrayCopy()). Noch besser wäre es natürlich $array_object_instance->filter().

7) Full-On Unicode wäre nett.

8) Stoppen Sie seltsame automatische Typkonvertierungen. Beispielsweise sollte es nicht möglich sein, echoein SimpleXMLElement-Objekt zu erstellen, ohne es zuerst explizit als Zeichenfolge zu typisieren. Oder werfen Sie zumindest etwas, wenn es passiert (z. B. im strengen Modus oder in einem anderen Modus error_reporting(-1)).

9) Unterstützung für mehrere Threads oder irgendeine Art von ereignisgesteuerten / asynchronen Rückrufen. Dies ist besonders wichtig, wenn Sie versuchen, große Dateien über cURL hochzuladen. Anstelle von Old-Skool-Threads wäre etwas wie Apples Grand Central Dispatch schön. Oder sogar etwas JavaScript-ähnliches, in dem Sie asynchrone Anfragen stellen und Rückrufe definieren können.

10) Eine konsistente Benennung / Reihenfolge (zB Nadel Heuhaufen) wäre schön, aber ich denke, dies könnte mit SPL besser gelöst werden.

11) Eine offiziell unterstützte interaktive PHP-Shell wie IRB. Facebook hat einen namens phpsh, der in Python geschrieben wurde, aber es fehlt der Polnisch, den ich sehen möchte.

12) Fügen Sie für die Reflection-API die Unterstützung für (a) docblock-Kommentare zu Konstanten (global & class) und (b) die Unterstützung für das Parsen von PHPDoc-ähnlichen Kommentaren in eine sinnvolle Datenstruktur hinzu. Es gibt ein PECL-Paket namens "docblock", das versucht, dies zu tun, aber es scheint nicht, dass der Autor sehr weit gekommen ist.

EDIT: 13) Ich würde auch gerne die Fähigkeit sehen, !und ?in Funktionsnamen - wie Ruby - verwenden zu können.

Ryan Parman
quelle
Ich bin damit einverstanden, dass ArrayObject für die array_ * -Funktionen unterstützt werden sollte. aber was wäre das erwartete Ergebnis für so etwas wie "array_merge", wenn Sie Unterklassen von arrayobject berücksichtigen? Würden Sie nur Instanzen derselben Klasse zusammenführen dürfen und was würde array_merge zurückgeben? Ein PHP-Array oder eine Instanz von ArrayObject (bzw. seine Unterklasse)?
harald
Ich würde argumentieren, dass, da die Daten intern ein Array sind und ArrayObject dies mit Funktionalität umschließt, sogar Unterklassen von ArrayObject weiterhin intern mit Arrays arbeiten würden. Ich würde erwarten, in der Lage zu sein, ein anderes Standardarray oder ArrayObject (oder Unterklasse) zusammenzuführen. Was die Rückgabe angeht, würde ich argumentieren, dass auch ein neues ArrayObject zurückgegeben werden sollte, aber folgen Sie dem Präzedenzfall, den simplexml_load_string () gesetzt hat, in dem Sie den Namen der Klasse angeben können, von der das Ergebnis eine Instanz sein soll.
Ryan Parman
12

1) Array-Verständnis im Stil des Python-Listenverständnisses:

$newlist = array($x->something for $x in $oldlist);

//with short array syntax:
$newlist = [$x->something for $x in $oldlist];

2) Kurze Array-Syntax

$newlist = [1,2,3,4,...];

3) Machen Sie empty () und betrachten Sie die Zeichenkette '0' nicht als wahr

sfrench
quelle
2
Ich denke für (1) etwas von Iterator & Closure gekocht wäre besser.
StasM
+1 IMHO, sollte dies in allen Sprachen sowie Iteratoren enthalten sein. Sie sind einfach zu nützlich, um nicht zu haben.
Evan Plaice
empty()ist das logische Gegenteil von if ($x), also macht es Sinn, dass empty('0')es wahr ist, weil if ('0')es falsch ist. Der einzige Unterschied besteht darin, empty()dass keine Benachrichtigung ausgegeben wird, wenn die Variable nicht festgelegt ist.
Andrew
12

Ich würde gerne eine legitime Methode zum Erstellen / Definieren von CONSTANT-Arrays sehen. Es gibt ein paar hackige Möglichkeiten, diese Art von Funktionalität zu simulieren, aber es wäre schön, wenn es sich nur um eine direkte Funktion von PHP handeln würde. Es wäre schön, wenn Sie ein Array erstellen könnten, das der "finalen" Deklaration von Java ähnelt.

Ich habe ein Anmeldesystem erstellt, das sehr schnell eingerichtet werden kann. Sie müssen lediglich den Inhalt eines Arrays in einer Textdatei ändern, um die Felder anzugeben, die Sie für Benutzerinformationen benötigen. Mit einer Reihe von for-Schleifen werden alle Aufgaben erledigt, von der Formulargenerierung über die Eingabe-Sensibilisierung bis hin zu Datenbankaufrufen. Alle Aufgaben hängen jedoch von diesem ursprünglichen Array ab.

Die Datei mit dem Array ist mit Berechtigungen gesperrt, aber sobald sich das Array im Ether bewegt, kann es geändert werden. Obwohl ich das Gefühl habe, dass das System ziemlich sicher ist, überlasse ich nichts dem Zufall. Eine Methode zum Abschließen von Arrays wäre in einer solchen Situation hilfreich.

Neue Idee!!

Ohhh, ich dachte an etwas anderes, was ich wirklich gerne in PHP hätte. Ich möchte, dass eine Art System PHP-Dateioperationen und Verzeichnisoperationen ähnlich wie bei .htaccess steuert.

Die .phpaccess-Datei sollte dieselbe Domain- / Ursprungsrichtlinie auslösen.

Wenn ich zum Beispiel viele Sites mit virtuellen Hosts hosten würde, könnte ich eine .phpaccess-Datei in einem Verzeichnis haben, die PHP anweist, die Herkunft aller ausgeführten Skripte zu überprüfen, die versuchen, mein geschütztes Verzeichnis zu bearbeiten. Wenn das Skript nicht aus diesem Verzeichnis oder seinen Unterverzeichnissen stammt, werden die Dateioperationen / oder Socketoperationen verweigert.

Ich denke, ein solches System würde das virtuelle Hosting zu einer viel sichereren Umgebung machen. Wenn Sie einen von diesen oben auf jedem virtuellen Host platzieren könnten, würde dies die Chance verringern, dass jemand einen Weg findet, sich von einem benachbarten virtuellen Host einzuschleichen.

Auch wenn es gut wäre, eine Methode zu haben, um es auf umgekehrte Weise zu sichern. dh die Reichweite von Skripten in einem einzelnen Verzeichnis auf dieses Verzeichnis beschränken.

Es ist das Yin und das Yang, weißt du!

Dave B.
quelle
+1 für final. Zur Verdeutlichung: finalbedeutet, dass der Wert einer Variablen zur Laufzeit festgelegt werden kann (im Gegensatz zu Konstanten, bei denen es sich um konstante Ausdrücke handeln muss), jedoch nur einmal festgelegt werden kann. Siehe auch C # readonly.
Davidtbernal
1
Es gibt einen Vorschlag für Getter / Setter für Trunk, der Readonly usw. ersetzen würde. Unveränderliche Arrays wären jedoch wahrscheinlich schwer zu machen.
StasM
Rückblickend hat PHP bereits einen "abgesicherten Modus", der genau das tut, was Sie beschreiben.
DisgruntledGoat
11

Meine zwei größten Wünsche als Hardcore-PHP-Programmierer:

  1. Endlich unterstützen. Es ist ein großes Durcheinander, dies durch Fahnen oder ähnliche Mittel zu umgehen.
  2. Ich würde es LIEBEN, Unterstützung für die Syntax von C # für Getter und Setter zu sehen. Wenn Sie viele Get- und Setter-Methoden haben, ist eine einfache Syntax wie C # ein großartiger Performance-Booster, anstatt sie auf Java-Art und Weise auszuführen und Get- und Setter-Methoden zu schreiben. Magische Methoden sind in Fällen, in denen Sie Mitglieder dynamisch erstellen möchten (z. B. wenn Sie einem Vorlagenrenderer einige Variablen zur Verwendung geben möchten), fantastisch, aber für normale Eigenschaften, für die die IDE automatisch vervollständigt werden soll, nicht geeignet Typen und so weiter. Dies würde dazu beitragen, den Code kleiner und dennoch lesbar und benutzerfreundlich zu machen.
Johnco
quelle
1
1. Leider ist es schwer zu tun, aber definitiv eine gute Aufgabe.
StasM
@StasM: wie wäre es mit Anmerkungen? Etwas in der Art von: / ** @get getFoo; @set setFoo; * / private $ foo;
Michał T
9

Sprachsyntax : In Pihipi und Phpreboot gibt es einige gute Hinweise darauf, woran Entwickler interessiert sind (obwohl Phpreboot zu weit geht, JS zu werden).

Entwicklungsmethodik : Es würde die Lebensdauer von PHP.net erheblich verlängern, wenn solche Umfragen tatsächlich berücksichtigt würden. Treffen Sie keine Entscheidungen mehr zur IRC-Sitzungssyntax.

Einzelne Merkmale : Einige wurden bereits erwähnt, aber ich werde gerne etwas Karma verbrennen, um hier besonders stumpf zu sein:

  • Unicode-Zeichenfolgentyp.
  • Bigint (siehe Python).
  • Integriertes Runkit zum Entfernen / Umbenennen / Überschreiben von integrierten Funktionen und Klassen, die nicht immer so gut gestaltet sind.
  • Modernes OOP
    • Mehrfachvererbung (anstelle von Komplexität, um seltene Randfälle mit ungeschickter Merkmalssyntax zu unterstützen)
    • Skalare können sich als Objekte verdoppeln (siehe Python), zB array () arbeitet als ArrayObject oder Strings als SplString (benötigt verwendbare Methoden, alle String-Funktionen sollten verfügbar sein als str::toupper())
  • Verwerfen Sie die shitty shit- \Namespace-Syntax , korrigieren Sie den Parser und übernehmen Sie sie ::als Alternative. Sie wissen, wie eine echte Sprache.
  • Jede Variation von LINQ (obwohl ich euch nicht traue, eine vernünftige Syntax zu entwickeln)
  • oder XML-Literale.
  • Beseitigen Sie das Laufzeitverhalten von php.ini und semantische Schalter. Es nimmt einiges von der Aufregung, wahr, aber es würde Entwicklern und der Anwenderbasis zugute kommen.
  • Ja, magic_quotes sind noch nicht weg.
  • Konvertiert den Zend Engine Bytecode in PBC

Wenn dies nicht offensichtlich ist, würde ich gerne jemand anderen finanzieren, um Letzteres zu tun, und php.net als Hauptimplementierung abtöten. :P
Oh, gerade bemerkt, es ist Community-Wiki. Es besteht also die Möglichkeit, dass Sie nicht wegen des Karmas hier sind, sondern wegen des echten Interesses. Wenn ja, schauen Sie in das <b> Problem </ b>, das die Sprache ernsthaft verletzt (Directoritis).

Mario
quelle
5
Ich hasse \ Namespace-Syntax, aber es ist eine lange und traurige Geschichte, warum es so wurde und es sich wahrscheinlich nicht ändern wird ... Wenn ich nur eine Sache in PHP ändern könnte, wäre das wahrscheinlich mein Hauptkandidat. Aber es ist was es ist.
StasM
@StasM: Danke für das Feedback und entschuldigen Sie, dass Sie einige PHP-Dinge unhöflich angehen, aber PHP interessiert mich. daher sehr eigensinnig. - Ich habe etwas über die Argumentation gelesen. Das Backslash-Dilemma ist noch kein großes Thema, aber es wird nächstes Jahr, wenn sich die Bibliotheken ausbreiten. Deshalb hoffe ich, dass jemand einen Parser schreibt, der \ cargo \ cult \ class \ names zurückschreibt, um Schemata zu unterstreichen.
Mario
Vielleicht bin ich dumm, aber was ist der Unterschied, ob wir '::' oder '\' für Namespaces verwenden?
Michał T
@Pies: Das ::wäre für jede C / C ++ - Syntaxsprache natürlicher gewesen. Und `\` ist nicht nur unter allen Programmiersprachen ungewöhnlich , sondern hat auch ungetestete Konnotationen. Einige frühere Diskussionen: stackoverflow.com/questions/238550/… oder developers.slashdot.org/article.pl?sid=08/10/26/1610259 und reddit.com/r/programming/comments/79cut/… - Aber in Eine Entscheidung ohne Feedback zu treffen und der Entwicklergemeinde zu signalisieren, dies zu tun, war keine sehr willkommene Entscheidung.
Mario
1
+ 1000000 für Mehrfachvererbung.
Ts01
8

Ich würde gerne die Vereinheitlichung von Fehlern und Ausnahmen in einem einzigen Konzept sehen (Ausnahmen). Es ist großartig, Ausnahmen abfangen und in ein Protokoll schreiben zu können, um Fehler auf diese Weise zu finden und zu beheben. Aber wenn in einem Codepfad, der sehr selten getroffen wird, etwas Grundlegendes nicht stimmt (siehe: PHP-Fehler), gibt es keine gute Möglichkeit, diese Informationen in dieselbe Problemendatenbank zu übertragen.

Bitte, Santa, führe einen Schalter in der php.ini ein, der alle Fehler in Ausnahmen umwandelt - idealerweise Ausnahmen, die ich in meinem Code finden kann.

Alex
quelle
1
Die Engine unterstützt dies bereits und wird von vielen Erweiterungen verwendet. Sie können dies auch problemlos mit set_error_handler () und ErrorException tun. Vorsicht vor E_STRICT / E_NOTICE / E_DEPRECATED, obwohl ...
StasM
Ich kenne diese Methoden sehr gut und sie sind wirklich abgedreht. Ich würde einen einheitlichen Weg lieben - den, der E_STRICT / E_NOTICE und dergleichen beinhaltet.
Alex
7

PHP passt zu mir, da es für kleine bis mittlere Websites geeignet ist. Ich muss ein bisschen einfallslos sein, das einzige, was ich mir als Antwort auf diese Frage vorstellen könnte, wäre etwas, das es für stark frequentierte Websites skalierbarer macht.

Ich denke in Bezug auf das Ablegen von Prozessen auf andere Kerne, zum Beispiel das Aktualisieren einer Datenbank in einem Prozess, während die Ausgabeseite in einem anderen Prozess erstellt wird. Eine schnelle Google-Suche zeigt an, dass dies simuliert werden kann, aber derzeit nicht direkt in PHP unterstützt wird.

geekbrit
quelle
1
Eigentlich scheint es ein interessantes Szenario zu sein, mehr darüber nachzudenken, die Datenbank
auszulagern
1
@Stasm, ich nehme an, Sie meinen, dass separate Anforderungen als separate Prozesse ausgeführt werden. Ich spreche von einer komplexen Seite, die Seitengenerierung und Hintergrundberechnung erfordert. Ich könnte mich irren, aber ich glaube nicht, dass es eine Möglichkeit gibt, Datenbankaktualisierungsoperationen (zum Beispiel) in einem separaten Prozess auszulösen. Der Grund dafür ist, dass die Seite früher an den Anforderer gesendet wird, anstatt auf die gesamte Verarbeitung warten zu müssen, die nicht direkt mit der seriellen Fertigstellung der Seite zusammenhängt. PS .. Danke für das Update!
Geekbrit
7

Ich habe wirklich vermisst, dass skalare Typen nicht als Objekte behandelt werden und echte Objekte sich nicht wie andere Typen oder Objekte verhalten können (mit Ausnahme von Zeichenfolgen aufgrund von __toString ()).

pestaa
quelle
Ja, magische Methoden zum Typisieren bitte.
Michał T
7
  • Unterstützung für Aufzählungen (wie Java 1.5+)
  • Sie können Methodenrückgabetypen in Interfaces und Klassen definieren
  • Unterstützung für die Definition von Anmerkungen / Metadaten zu Eigenschaften und Methoden.
  • in der Lage sein, strikte Typhinweise für skalare Methodenargumente zu machen.
Kees van Dieren
quelle
+1 Da ich all diese Dinge in PHP sehen möchte.
Jeremy
6

Bereinigen Sie "User Contributed Notes" auf http://php.net . Sie sind manchmal ein echtes Chaos, während sie im Allgemeinen einen großen Wert haben.

bobah
quelle
1
Eine Art Auf- / Ab-Funktion und die Möglichkeit, auf den ursprünglichen Kommentar in der Antwort zu verweisen, wären sicherlich nett.
Tgr
5

Es gibt einige ziemlich anständige Array-Funktionen in PHP, die eine Listenverarbeitungskapazität, Rückrufe und create_function()eine grundlegende Lambda-Rechnung bieten.

Das Hauptproblem dabei ist, dass es in PHP viel zu ausführlich ist, ein Shorthand-System wäre hervorragend, besonders wenn es um die Befehle map / reduction geht.

Noch wichtiger ist, dass die Listenfunktionen nicht vollständig sind:

  • Es gibt keine foldrFunktion, array_reduce()bietetfoldl
  • array_map()sollte den Schlüssel im zweiten Argument übergeben, wie es array_walk()tut
  • Dies array_map_keys()könnte für die Änderung von Schlüsseln nützlich sein
  • Liste Verständnis ist sehr klobig, range(), array_fill()und array_fill_keys()nur so viele Fälle behandeln, und array_filter()ist getrennt

Ich habe nicht das Ziel, PHP in Haskell einzufügen, aber PHP wird häufig für die Manipulation von Listentyp-Datenstrukturen verwendet, und es wäre in dieser Hinsicht nützlich, über einen vollständigen Satz von Tools zu verfügen.

Orbling
quelle
1
Ein Kollege von mir ist auch der Meinung, dass es einige andere Ergänzungen für Array-bezogene Funktionen geben könnte / sollte. at auf seinem Github-Konto erwähnt: Dies sind das Fehlen von array_all () und array_any (), die prüfen, ob * eine durch einen Rückruf dargestellte Bedingung für alle oder einige der Elemente in einem Array gilt. gist.github.com/44350
kguest 25.12.10
5

Bedienerüberladung:

$result = $MatrixA + $MatrixB * $MatrixC;
Mäuse
quelle
1
Ich bin mir nicht sicher, wie gut dies mit PHP als dynamisch typisierter Sprache klappen würde.
BoltClock
5
Vielleicht sollte es mit magischen Methoden geschehen, wie __add ($ obj), __times ($ obj) usw.
Michał T
es existiert bereits als PECL ext: pecl.php.net/package/operator . Es sollte nicht zu viel Arbeit sein, es mit der Hauptquelle zusammenzuführen
Xananax,
4

Füge Ausnahmen hinzu, anstatt E_WARNING zu erzeugen ... Es ist sehr ärgerlich, dass ich so etwas nicht verwenden kann wie:

try{
   $f = fopen('asd', 'r');
   flock($f, LOCK_SH);

   while(!feof($f)){
       echo fread($f, 512);
   }

   fclose($f);

}catch(IOException $ex){
   echo 'Oops, something wrong: '.$ex->getCode();
}

Natürlich ist derzeit nicht viel praktisch, aber es ist sehr ärgerlich zu erhalten:

WARNUNG

WARNUNG

WARNUNG

und ich kann den Code-Fluss nicht kontrollieren, ohne meinen eigenen error_handler zu schreiben und nach dem Fehler zu schnüffeln (Erlaubnis, falscher Dateiname oder irgendetwas anderes; andere Fehlerquellen stören mich hier nicht), um die richtige Ausnahme auszulösen .

Ich hoffe, ich muss nicht erklären, warum es wichtig ist.

PHP wurde vor einiger Zeit objektorientiert und wir, Programmierer, die PHP verwenden, freuen uns auf OO-Funktionen, ohne "goto" einzuführen ... Als ich herausfand, dass es wirklich passierte, dachte ich, dass es ein Aprilscherz war.

eRIZ
quelle
Wenn die Ausnahme nicht abgefangen wird, wird das Skript beendet. Die Warnung auf einem Produktionsserver wird protokolliert und dem Benutzer nie angezeigt. Wenn Sie diese Funktion jetzt ändern, können viele Skripte beschädigt werden, da sie nicht zum Auffangen vorgesehen sind. (Beachten Sie, dass ich Fehlerbehandlungsroutinen schreibe, um selbst Ausnahmen auszulösen). Jetzt können Dinge, die PDO erzeugt, Warnungen oder Ausnahmen auslösen: Der Programmierer entscheidet zur Laufzeit. Diese Funktionalität sollte wahrscheinlich zu mehr Modulen hinzugefügt werden.
Reece45
4
  1. Konsolidieren Sie das Objektmodell. Lassen Sie alle Objekte die Basisobjektklasse erweitern. Die Object-Klasse würde (unter anderem) alle magischen Methoden implementieren (damit sie nicht länger magisch sind!)

  2. Verschieben Sie Erweiterungen in ihre eigenen Namespaces - machen Sie den globalen Namespace übersichtlich $conn = new \MySQLi\Connection();

  3. spl_autoload()Funktion entkrüppeln ! Im Ernst, dies ist möglicherweise eine der größten Funktionen von PHP und gleichzeitig auch die nutzloseste. spl_autoloadist der Standard-Autoloader, der Namespaces und mehrere Dateierweiterungen unterstützt. Aus unbekannten Gründen müssen die Dateinamen jedoch in Kleinbuchstaben geschrieben werden. Hierfür wurde ein Fehlerbericht erstellt , der jedoch von den Mitarbeitern aus Gründen der Abwärtskompatibilität nicht behoben werden konnte. Richtig ... nicht jedes Framework wird mit einem eigenen Autoloader ausgeliefert, da der Standard-Autoloader verkrüppelt ist!

Mchl
quelle
4

Unterstützung für große Dateien. Bitte schön

Siehe http://bugs.php.net/bug.php?id=27792 (obwohl es möglicherweise weitere Bereiche / Funktionen gibt, die ebenfalls beachtet werden müssen).

Don MacAskill
quelle
4

Bringen Sie die Taint-Unterstützung auf die neueste Version und nehmen Sie sie in Standard-Builds auf, die vorzugsweise in der Standardkonfiguration http://wiki.php.net/rfc/taint aktiviert sind

Dies würde XSS- und SQL-Injection-Angriffe verhindern, indem der Code ordnungsgemäß erstellt wird.

pro Minute
quelle