it-swarm.dev

Welche Funktionen möchten Sie in PHP haben?

Da es jetzt Ferienzeit ist und alle Wünsche haben, frage ich mich - welche Sprachfunktionen hätten Sie sich gewünscht PHP hinzugefügt? 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 werden")
  2. Etwas, bei dem PHP nicht in eine andere Sprache geändert werden muss (nicht: "Ich wünschte, sie würden $ -Zeichen löschen und anstelle von geschweiften Klammern Leerzeichen verwenden" oder "Ich wünschte, PHP würde kompiliert). statisch getippt und hatte # im Namen ")
  3. Etwas, das nicht das Brechen des gesamten vorhandenen Codes erfordern würde (nicht: "Benennen wir 500 Funktionen um und ändern die Parameterreihenfolge für sie")
  4. Etwas, das tut 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, Fehler # 12345 wäre endlich behoben")
  5. Etwas, das mehr als nur ein Scherz ist (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.

88
StasM

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 sind die PHP devs diese Idee abgeschossen bereits.

Weitere Dereferenzierung:

echo something_that_returns_array()[4];

Andere haben benannte Parameter und eine kürzere Array-Syntax erwähnt. Ich hätte auch nichts gegen eine kürzere Objektsyntax.

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

$b1 = (object)array('name' => 'foo');
$b2 = {'name' => 'foo'}; // or something?
93

Nachdem ich ungefähr 13 Jahre lang mit PHP und ungefähr 4 Jahre lang stark mit JS gearbeitet habe, gibt es ein paar Dinge, von denen ich denke, dass PHP wäre gut, um von JS zu leihen ::

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

Zum Beispiel:

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

Ist (IMHO) 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 einige 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 und die Instanziierung der neuen Klasse entweder zu komplex oder unpraktisch ist. Ich denke jedoch, wir sollten eine Neudefinition der Kern-/Nicht-User-Space-Funktionen und -Methoden vermeiden.


Zusätzlich zu diesen beiden denke ich, dass PHP muss transparent Unicode 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 sind sofort einsatzbereit Ein gewaltiger Gewinn für PHP Programmierer).

Danke für die Frage!

72
Funkatron

Dinge, die ich als ehemaliger langjähriger PHP Apologet gerne hätte:

  1. Kürzere Syntax für Arrays. PHP Arrays sind aufgrund ihrer Flexibilität eines der beeindruckendsten Merkmale der Sprache, aber das Schreiben von some_array_method($argity, array('key' => $value)); ist ein Kinderspiel. Ich glaube, dieser Vorschlag wurde leider bereits auf der Mailingliste PHP ausgeweidet.
  2. finally support
  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 man beispielsweise ein AuthorizeAttribute definieren, das angibt, dass für einen Controller oder eine Aktionsmethode eine Autorisierung des Benutzers erforderlich ist. Das Framework selbst wäre dafür verantwortlich, nach den Attributen zu suchen und entsprechend zu handeln. Ich glaube, PHPUnit verwendet bereits eine Art Attribut, indem es sie in Docblock-Kommentare einfügt, die durch Reflektion gelesen werden können, aber das Einfügen der tatsächlichen Funktionalität in Docblock-Kommentare ist sicherlich ein Hack.
  4. Kürzere Lambda-Syntax. Anstatt function($x){ return $x*2;} schreiben zu müssen, könnte ich vielleicht $x => return $x*2 Schreiben oder so. Dies ist wieder etwas, das es einfach zum Ziehen 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 Sanitär, dass es für die eigentliche Arbeit, die Sie ausführen möchten, im Grunde genommen irrelevant ist.
  5. Ein eingebautes Decimal (Festkomma-Mathematik), das mathematische Operationen über die normalen Operatoren unterstützt, wäre eine Art Nizza, da wir keine Operatorüberladung haben.
  6. MOAR MAGIC 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.
48
davidtbernal

Machen Sie PHP wirklich objektorientiert. Die slap on another global function - Entwicklung von PHP muss beendet werden).

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 Stapel erstellen und ihn selbst kompilieren. Grundsätzlich sollte es umgekehrt lauten. $dog->wakeup()->bark(); ist im Vergleich zu bark(wakeup($dog)) leicht zu lesen

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

Sie haben den Schritt zur Aktivierung der Objekt-/Methodenunterstützung getan. Verwenden Sie ihn jetzt in den eigentlichen Kernfunktionen PHP).

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

Wenn diese Funktionalität auf Methoden verlagert wird, können sie mit einigen konsistent umbenannt werden. Würde es die Abwärtskompatibilität beeinträchtigen, wenn Strings und Arrays ihre eigenen Methoden hätten?

48
Keyo

Eine sprachintegrierte Abfrage-Engine wäre großartig. So ähnlich wie das, was in .NET als LINQ verfügbar ist. Dies würde dazu beitragen, umfangreiche Datenfelder zu sortieren und den Datenbankzugriff zu standardisieren, sodass weniger SQL-Injection-Angriffe erfolgreich sind.

40
Nick Berardi

Oh. Geben Sie Hinweise für Grundelemente ein. Das wäre nett.

38
ruurd

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

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

Gleiches gilt für die durch serialize erstellte Darstellung. Es enthält eine Byte-Darstellung der Zeichenfolge mit Längenpräfix, ohne dass Codierungsinformationen gespeichert werden.

Die meisten PHP (Zeichenfolge) -Funktionen haben keine Ahnung von Unicode. Eine detaillierte Liste mit der Risikostufe jeder Funktion finden Sie unter: http://www.phpwact.org/php/). i18n/utf-8

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

34
Emil Stenström

Machen Sie Strings wie Objekte mit integrierten Methoden, um die inkonsistent benannten und parametrisierten Nicht-Objekt-Methoden zu ersetzen. z.B.

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

usw.

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

32
rjmunro

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

2) Wenn Sie jemals Ruby und zuletzt Node verwendet haben, verfügen diese über eine großartige interaktive Shell (IRB). Ich würde es lieben, wenn PHP) eine hätte, die tatsächlich nützlich wäre.

3) Eigenschaften/Mixins, aber ich höre, dass diese unterwegs sind.

4) Ich möchte das kurze Array $ myArray = ['my', 'array'] unterstützen.

5) Konsistente Benennung/Reihenfolge (d. H. Nadelheuhaufen)

24
Jakefolio

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

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

3) Bitte entfernen Sie 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 gemischt werden. Entwickler sollten Vorlagen für die Anzeige verwenden und nicht 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 über nett

20
GrandmasterB

Eine INI-Direktive zu E_ERROR Für undefinierte Konstanten, anstatt anzunehmen, dass es sich um eine Zeichenfolge mit E_NOTICE Handelt.

18

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

Um unseren geliebten Jeff Atwood zu zitieren: PHP ist scheiße, aber es spielt keine Rolle !

14
David Murdoch

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

2) Erlauben Sie const Variablen, das Ergebnis einer Berechnung zuzulassen, wie es define() tut.

3) Verkettung 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, String- und Array-Funktionen (unter anderem) als Objekte neu zu definieren. Das Erweitern von SPL könnte viele Probleme lösen, wenn die Sprache so nervös ist.

6) Die Verwendung von ArrayObject() sollte genauso transparent sein wie die Verwendung von array(). Sie sollten in der Lage sein, Dinge wie array_filter($array_object_instance) zu tun, ohne array_filter($array_object_instance->getArrayCopy()) zu tun. Noch besser wäre natürlich $array_object_instance->filter().

7) Full-On-Unicode wäre schön.

8) Stoppen Sie seltsame automatische Typkonvertierungen. Beispielsweise sollten Sie nicht in der Lage sein, ein SimpleXMLElement-Objekt echo zu erstellen, ohne es zuvor explizit als Zeichenfolge typisiert zu haben. Oder werfen Sie zumindest etwas, wenn es passiert (z. B. im strengen Modus oder in welchem ​​Modus auch immer error_reporting(-1)).

9) Unterstützung für mehrere Threads oder eine Art von ereignisreichen/asynchronen Rückrufen. Dies ist am wichtigsten, wenn Sie versuchen, große Dateien über cURL hochzuladen. Anstelle von Old-Skool-Threads wäre so etwas wie Apples Grand Central Dispatch Nizza. Oder sogar etwas JavaScript-ähnliches, bei dem Sie asynchrone Anforderungen stellen und Rückrufe definieren können.

10) Eine konsistente Benennung/Reihenfolge (d. H. Nadelheuhaufen) wäre nett, aber ich denke, dies könnte mit SPL besser gelöst werden.

11) Eine offiziell unterstützte interaktive PHP Shell, wie IRB. Facebook hat eine Shell namens phpsh, die in Python geschrieben wurde, aber es fehlt die Politur, die ich gerne sehen würde.

12) Fügen Sie für die Reflection-API Unterstützung für (a) docblock-Kommentare zu Konstanten (global & class) und (b) Unterstützung für das Parsen von PHPDoc-ähnlichen Kommentaren in eine sinnvolle Datenstruktur hinzu. Es gibt ein PECL-Paket namens "docblock", das dies versucht, 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 can.

13
Ryan Parman
13
Kemo

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 nur eine direkte Funktion von PHP wäre. Es wäre schön, wenn Sie ein Array auf eine Weise erstellen könnten, die der "endgültigen" 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 einem Schwad von for-Schleifen wird alles von der Formulargenerierung und Eingabesensibilisierung bis hin zu Datenbankaufrufen verarbeitet, aber alles hängt von diesem ursprünglichen Array ab.

Die Datei mit dem Array ist mit Berechtigungen gesperrt, aber sobald sich das Array im Äther bewegt, ist es veränderlich. Obwohl ich der Meinung bin, dass das System ziemlich sicher ist, überlasse ich nichts gerne dem Zufall. Eine Methode zum Finalisieren von Arrays wäre in einer solchen Situation gut.

Neue Idee !!

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

Die .phpaccess-Datei sollte eine Art gleiche Domain/gleiche Origin-Richtlinie auslösen.

Wenn ich beispielsweise 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, auf meinem geschützten Verzeichnis zu arbeiten. Wenn das Skript nicht aus diesem Verzeichnis oder seinen Unterverzeichnissen stammt, werden die Dateioperationen/oder Socketoperationen abgelehnt.

Ich denke, ein solches System würde das virtuelle Hosting zu einer viel sichereren Umgebung machen. Wenn Sie eines davon oben auf jedem virtuellen Host platzieren könnten, würde dies die Wahrscheinlichkeit 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 umgekehrt 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!

12
Dave B.

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

$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 leer () und betrachten Sie die Zeichenfolge '0' nicht als wahr

12
sfrench

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

  1. Endlich unterstützen. Es ist ein großes Durcheinander, dies fiktiv mit Flaggen oder ähnlichen Mitteln zu umgehen.
  2. Ich würde gerne Unterstützung für die Syntax von C # für Getter und Setter sehen. Wenn Sie viele Getter und Setter haben, ist eine einfache Syntax wie die von C # ein großartiger Leistungssteigerer, anstatt dies auf die Java Weise] zu tun und Getter- und Setter-Methoden zu schreiben. Magische Methoden sind in Fällen, in denen Sie dies tun, fantastisch Sie möchten Mitglieder dynamisch erstellen (z. B. wenn Sie einem Vorlagenrenderer einige zu verwendende Variablen zuweisen möchten), sind jedoch nicht für normale Eigenschaften geeignet, für die Sie möchten, dass die IDE automatisch vervollständigt wird) Dies würde dazu beitragen, den Code kleiner und dennoch lesbar und benutzerfreundlich zu machen.
11
Johnco

Sprachsyntax : In pihipi und phpreboot gibt es einige gute Hinweise darauf, woran Entwickler interessiert sind (obwohl phpreboot zu weit geht und JS wird).

Entwicklungsmethode : Es würde die Lebensdauer von PHP.net erheblich verlängern, wenn solche Umfragen tatsächlich berücksichtigt würden. Treffen Sie keinen wohl oder übel Nachmittag mehr IRC Sitzungssyntaxentscheidungen.

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).
  • Runkit eingebaut, um eingebaute Funktionen und Klassen zu entfernen/umzubenennen/zu überschreiben, die nicht immer so gut gestaltet sind.
  • Modernes OOP
    • mehrfachvererbung (anstelle von Komplexität zur Unterstützung seltener Edge-Fälle mit ungeschickter Merkmalssyntax)
    • skalare können als Objekte dienen (siehe Python), z. array () funktioniert als ArrayObject oder Strings als SplString (benötigt verwendbare Methoden, alle String-Funktionen sollten als str::toupper() verfügbar sein)
  • Verwerfe die beschissene Scheiße \ Namespace-Syntax , korrigieren Sie den Parser und übernehmen Sie :: als Alternative. Sie wissen, wie eine echte Sprache.
  • Jede Variation von LINQ (obwohl ich nicht vertraue, dass ihr eine vernünftige Syntax entwickelt)
  • oder XML-Literale.
  • Entfernen Sie das Laufzeitverhalten von php.ini und semantische Schalter. Es nimmt zwar etwas von der Aufregung ab, würde aber Entwicklern und Anwendern zugute kommen.
  • Ja, magic_quotes sind noch nicht weg.
  • Konvertieren Sie den Bytecode von Zend Engine in PBC

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

9
mario

Ich würde gerne die Vereinheitlichung von Fehlern und Ausnahmen in einem einzigen Konzept (Ausnahmen) sehen. 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 grundlegend falsch ist (lesen Sie: PHP Fehler)), gibt es keine gute Möglichkeit, diese Informationen in dieselbe Datenbank mit Problemen zu leiten.

Bitte, Santa, führen Sie einen Schalter in der php.ini ein, der alle Fehler zu Ausnahmen macht - idealerweise Ausnahmen, die ich in meinem Code abfangen kann.

8
Alex
  • unterstützung für Aufzählungen (wie Java 1.5+)
  • Sie können Methodenrückgabetypen in Schnittstellen und Klassen definieren
  • unterstützung für Annotationen/Metadatendefinitionen zu Eigenschaften und Methoden.
  • in der Lage sein, strenge Typhinweise für skalare Argumente der Methode zu erstellen.
7
Kees van Dieren

PHP passt gut zu mir, da es dazu dient, kleine bis mittlere Websites zu zerstören. Ich muss ein bisschen einfallslos sein. Das einzige, was ich mir als Antwort auf diese Frage vorstellen kann, ist etwas, das die Skalierung für stark frequentierte Websites verbessert.

Ich denke darüber nach, Prozesse auf andere Kerne zu übertragen, beispielsweise eine Datenbank in einem Prozess zu aktualisieren, 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.

7
geekbrit

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

7
pestaa

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

6
bobah

Es gibt einige ziemlich anständige Array-Funktionen in PHP, die Listenverarbeitungskapazität bereitstellen, wobei Rückrufe und create_function() einen grundlegenden Lambda-Kalkül bereitstellen.

Das Hauptproblem dabei ist, dass es in PHP viel zu ausführlich ist. Ein Kurzschrift-System wäre ausgezeichnet, insbesondere wenn es um die Map/Reduce-Befehle geht.

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

  • es gibt keine foldr Funktion, array_reduce() liefert foldl
  • array_map() sollte den Schlüssel im zweiten Argument übergeben, wie es array_walk() tut
  • eine array_map_keys() kann für die Tastenänderung nützlich sein
  • das Listenverständnis ist sehr klobig, range(), array_fill() und array_fill_keys() behandeln nur so viele Fälle, und array_filter() ist getrennt

Ich möchte nicht PHP in Haskell einbinden, sondern PHP wird häufig für die Manipulation von Datenstrukturen vom Listentyp verwendet und verfügt über einen vollständigen Satz von Tools Rücksicht wäre nützlich.

5
Orbling

Überlastung des Bedieners:

$result = $MatrixA + $MatrixB * $MatrixC;
5
MicE

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).

4
Don MacAskill

Ausnahmen hinzufügen, anstatt E_WARNING zu erzeugen ... Es ist sehr ärgerlich, dass ich Folgendes nicht verwenden kann:

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 steuern, ohne meinen eigenen error_handler und String-Sniffing zu schreiben, welcher Fehler erzeugt wurde (Berechtigung, falscher Dateiname oder irgendetwas anderes; ich habe nichts gegen andere Fehlerquellen hier), 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 passiert ist, habe ich dachte, es sei ein Aprilscherz.

4
eRIZ
  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 mehr magisch sind!)

  2. Verschieben Sie Erweiterungen in ihre eigenen Namespaces - übersichtlicher globaler Namespace $conn = new \MySQLi\Connection();

  3. Entkrüppeln Sie die Funktion spl_autoload()! Im Ernst, dies ist möglicherweise eines der größten Merkmale von PHP und gleichzeitig das nutzloseste. spl_autoload ist der Standard-Autoloader, der Namespaces und mehrere Dateierweiterungen unterstützt, aus unbekannten Gründen jedoch erfordert, dass die Dateinamen in Kleinbuchstaben geschrieben werden. Es gibt ein Fehlerbericht dafür ausgefüllt , aber die Mitarbeiter haben geantwortet, dass sie es aus Gründen der Abwärtskompatibilität nicht beheben werden. Richtig ... es ist nicht so, dass jedes Framework mit einem eigenen Autoloader geliefert wird, da das Standard-Framework verkrüppelt ist!

4
Mchl

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

Dies würde XSS- und SQL-Injection-Angriffe verhindern, indem die Benutzer ordnungsgemäß codieren.

4
rjmunro

Anmerkungen für PHP wäre großartig. Eine Funktion, die in den kommenden Jahren auffallen würde. Diese Funktion wird dazu beitragen, große Frameworks mit sauberem Code zu schreiben.

3
user10916

Ich würde gerne eine else -Klausel für while, for und foreach sehen. Z.B.:

while (/*condition*/) {
   /* display each result */
}
else {
   /* condition was never true; display "no results found" message */
}

Der Block else wird nur ausgeführt, wenn die Bedingung für whilenie true war.

Dies würde dazu führen, dass Sie die Booleschen Flags nicht mehr im Auge behalten müssen, und es könnte Ihnen möglicherweise helfen, über Grenzfälle und mögliche Fehlerbedingungen nachzudenken.

3
Macneil

Befreien Sie sich nicht von kurzen offenen Tags, insbesondere dem Echo one = (. This:

<?=$myvar?>

... ist viel besser als das:

<?php echo $myvar;?>
3
dukeofgaming
  1. Ich würde jedoch eines Tages gerne den Datentyp sehen - ich mag auch die Einfachheit, nicht mit Datentypen umgehen zu müssen, dies ist ein zweischneidiges Schwert für mich.
  2. namespaces!
  3. Überladen Sie Funktionsaufrufe mit unterschiedlichen Methodensignaturen
  4. PHPUnit bietet eine bessere Unterstützung für Unit-Tests und Code-Injection und ist ein erstaunliches Tool. Auch das Symfony-Code-Injection-Framework wirkt Wunder ... alle haben jedoch ihre eigene Lernkurve.
3
cdnicoll

Es scheint, dass niemand eine optionale Sicherheit vom Typ erwähnt hat.

Es wäre großartig, Code wie folgt schreiben zu können:

<?php
$someVariable = 123;
$someVariable = "Hello World";

int $anotherVariable = 123;
////$anotherVariable  = "Hello"; // This must cause runtime exception.
////int $lastVariable = "World"; // This must cause it too.
?>

Ein anderes Beispiel:

<?php
// Current style (which must remain).
function SayHello($howManyTimes)
{
    if (!is_int($howManyTimes))
    {
        throw new Exception('Argument $howManyTimes is invalid. An integer was expected, instead of ' . gettype($howManyTimes) . '.');
    }

    echo str_repeat('Hello', $howManyTimes);
}

// New, optional, style, allowing to have a shorter code.
function SayWorld(int $howManyTimes)
{
    echo str_repeat('World', $howManyTimes);
}

SayHello(123);
SayHello("Hello World");

SayWorld(123);
////SayWorld("Hello World"); // This must cause runtime exception.
?>
2

Ermöglichen Sie den Namespace einer Datei aus dem Include-Aufruf

include('mytemplate.php', 'MyNamespace');

oder

include 'mytemplate.php' use MyNamespace;

Und erlauben Sie uns, Namespaces ohne Präfix zu importieren ("zu verwenden"):

use OtherNamespace as self;

(anstatt jede einzelne Klasse importieren zu müssen, um sie ohne Namespace-Präfix zu verwenden)

2
user11122
  • Nicht blockierende SQL-Abfragen (Wie das Einfügen eines Protokolls, aber warten Sie nicht auf das Ergebnis der Abfrage)
  • Parallele SQL-Abfragen

nur ein Traum

2
Erlango

Generatoren. Wie in Python mit Ertrag.

2
ts01

Möglichkeit, Ausnahmen in __destructor oder __toString auszulösen. Und gibt es wirklich eine Erklärung, warum dies nicht möglich ist?

2
ts01

Das wäre schön, die Möglichkeit zu haben, den primitiven Typ (bool | boolean, int | integer, float, double, string, object) eines Parameters in einer Methode festzulegen, da ein Array zulässig ist.

Beispiel:

  • strom:

    class HttpResponse {
    public function __construct($version, $statuscode = HttpStatus::OK, HttpResponseHeaders $headers = array(), $body = '');
    

    }}

  • hoffnung:

    class HttpResponse { public function __construct($version, integer $statuscode = HttpStatus::OK, HttpResponseHeaders $headers = array(), string $body = ''); }
    

Ich dachte auch, eine statische Assert-Klasse zu haben, die nützlich sein kann.

2
user11251

unterstützung für Typhinweise für alle Typen und _toXXX magische Methoden für jeden möglichen Typ. (PHP Common Use Drifts IMHO eher, um Typ Jonglieren/mit einigen Ausnahmen, wie Konvertierung float <-> int/zu begrenzen)

2
ts01

Definitiv Methodenüberladung mit Typhinweisen zur Unterscheidung der Methodensignaturen. Darüber hinaus würde ich gerne eine Art "Attribute" im ASP.NET-Stil sehen, damit meine Controller-Aktionen in einem PHP MVC-Framework) folgendermaßen aussehen könnten:

/* [HttpGet] */
public function login() {}

/* [HttpPost] */
public function login() {}
2
TaylorOtwell

PHP benötigt eine unveränderliche Unicode-String-Klasse. Es sollte trivial sein, sicherzustellen, dass Eingabezeichenfolgen gültig und normalisiert sind und dass UTF-8 gültig bleibt.

$str = new Utf8String('āll īs ōk');
$str = $str->ucwords(); // Āll Īs Ōk
$str = $str->strtolower()->toAscii(); // all is ok
(string) $str; // UTF-8 bytes

Ich habe einen Prototyp basierend auf PHP-UTF8 erstellt.

2
Steve Clay

Native Regexp-Literale, Anführungszeichen im Perl-Stil qw{}, qq{} Und q{}.

Der verkettete Methodenaufruf für alle Objekte: $object{ ->method1(); ->method2(); ->getPerson()->getName(); }

Der Anweisungsausdruck: ({echo $a; $a = $a + 1; $a})

KONSISTENT, NICHT KONFIGURIERBAR, KANN NICHT AUSGESCHALTET WERDEN short_open_tags. Wenn sie nicht konfigurierbar sind, ist PHP Code portabler. Siehe auch die Tags ERB - style

1
Ming-Tang
  • Ich würde gerne eine native Möglichkeit sehen, open_basedir in virtuellen Hosts basierend auf dem Domainnamen automatisch festzulegen, ohne eine Direktive pro Host konfigurieren zu müssen (ähnlich wie Jason Greene Patch, aber nativ).

  • Bitte anwendungsweite Globals! App globale Variablen wären nach der Initialisierung für alle PHP-Skripte verfügbar.

  • Eine Möglichkeit, eine Sitzung für andere Threads freizugeben, ohne sie zu schließen:

 session_start (); 
 $ _ SESSION ['favcolor'] = 'white'; 
 session_flush (); // Sitzung ist jetzt entsperrt, so dass andere Threads sie verwenden können 
 // große Schleife ... 
 $ _ SESSION ['tast'] = 'sweet'; // Sitzung wird automatisch wieder blockiert 
 session_close (); 
  • Vielleicht wäre ein Cache auf der Festplatte nett, so dass wir PHP-Skripte manuell vorkompilieren können, um sie schneller auszuführen. Ähnlich wie Speicher-Caches, jedoch mit Dateien auf der Festplatte und manueller Generierung (wahrscheinlich mit einer neuen Dateierweiterung).

  • Auch etwas Ähnliches wie <? Php = $ variable?> Als Verknüpfung zu <? Php echo $ variable; ?> wäre schön (wie bei Asp-Tags, jedoch mit deaktivierten Short/Asp-Tags).

1
Bacco

und natürlich get_shutdown_functions () und unregister_shutdown_function (). Derzeit gibt es keine Möglichkeit, darauf zuzugreifen. Und allgemeiner gesagt, eine abstrakte Unterstützung für das Stacking von Rückrufen - etwas, um spl_autoloads, Shutdown-Funktionen, Fehlerbehandlungsroutinen (derzeit nicht stapelbar, aber vielleicht ...) usw. zu vereinheitlichen. Art von register_callback ($ callback, $ stack) und so weiter, mit einigen vordefinierte stapel ('autoload', 'shutdown', 'error' ...) werden von php oder vom benutzer selbst aufgerufen.

1
ts01

hinzufügen von Objekt-Wrappern für Erweiterungen mithilfe von Ressourcen (Curl, FTP, Gd2 ...). Mögen

 $oFtp = new Ftp();

 $oFtp->connect();

 $oFtp->close();
1
ts01
  • lexikalischer Bereich für Lambdas (mit einem anderen Schlüsselwort als Funktion) (oder Blocksyntax, um einen geeigneten lexikalischen Bereich zu erstellen?)
  • machen Sie Lambdas in Objekteigenschaften aufrufbar
  • implizieren Sie immer ein Semikolon mit Lambda-Klammern
  • verdammt add use () für normale Funktionen !!
  • züge
  • fähigkeit, die Instanz von/is_a () abzufangen
  • generatoren
  • öffnen Sie die Ausnahme für die Laufzeitänderung
  • eine Funktion zum Überprüfen von Schnittstellen, ohne sie zu implementieren
1
alan blaire

Meine ersten beiden Belästigungen haben nicht mit PHP zu tun, sondern mit den implizierten Nutzungskonventionen.

  1. 'Die Dateinamenerweiterung' für Bibliothekscode (z. B. PEAR/Horde/Zend/etc.) Sollte auf .phps Anstelle von .php Enden. Dies hat den Vorteil, dass der auszuführende Code und der einzuschließende Code klar voneinander getrennt sind und dass optional der gesamte (Ihr) Code vom Server aus gut lesbar/durchsuchbar ist. Als Bonus kann spl_filename_extensions() in Ihrem Autoloader verwendet werden.

  2. Die Konvention (in den Dokumenten) lautet, dass :: Sowohl für statische als auch für Instanzmethoden verwendet wird. Ich wäre dankbar, wenn sie beispielsweise :: Für statische und -> Verwenden würden Zeug. Als gute Konvention wird es immer noch Raum für Fehler bei der Interpretation geben, aber es ist zumindest klarer.

Um nur einige zu nennen, möchte ich auch Folgendes sehen:

  1. Das getDocComment von Reflection * (oder möglicherweise eine andere Variante des Namens oder Arguments) sollte liberaler sein und auch nur die ersten Kommentare (bis zum Leerzeichen) über dem genannten Typ erhalten. Mit anderen Worten: Ich mag das ausführliche Doccomment (sprich: Zeilenessen) nicht, während ich wirklich nur das Nötigste in jeder Art von Kommentar liefern möchte: //, # oder /* ... */.

  2. Liste der verwendeten Namespaces, z. getdefinednamespaces().

  3. Das Verhalten von "undefinierten Konstanten" sollte durch eine ini-Direktive, z. eine leere Zeichenfolge oder ein schwerwiegender Fehler. Trotzdem sollte es niemals implizit in einen String umgewandelt werden! (Es ist wie das; in Javascript).

  4. Die Konstante __CLASS__ Sollte auch automatisch so funktionieren (statisch aufgerufen) stdClass::__CLASS__ == '\stdClass'. Mit anderen Worten, anstatt auf eine Klasse durch einen String zu verweisen, möchte ich eine Klasse und ihre magische Konstante __CLASS__ Verwenden, um darauf zu verweisen. (Ja, es ist ein Idefix)

  5. Typ Casting und magische Methoden __fromType($instancetype) und __toType($type). So kann ein Objekt in eine Ganzzahl umgewandelt werden: $y = (int) $x oder in ein anderes Objekt $y = (BeanWrap) $x. Eine Implementierung davon bedeutet jedoch, dass von den zwölf verfügbaren Casts, die acht verschiedene Typen abdecken, die Namen dieser Casts nicht mehr als Klassennamen (z. B. int, binär, boolesch) verwendet werden können.

1
23JUL

Als ich diesen Thread sah, dachte ich, dass es nützlich wäre, einige Artikel zu erwähnen, auf die ich gestoßen bin.

  1. Art von Groovy Groovys? Operator in PHP: http://justafewlines.com/2009/10/groovys-operator-in-php-sort-of/
  2. Verschlüsse verbessern: http://justafewlines.com/2009/10/whats-wrong-with-php-closures/
1
Alexey Shein

Klug genug sein, um nicht die Abwärtskompatibilität zu brechen. Ich habe die Existenz von goto als Schlüsselwort auf die harte Tour gelernt, ich habe es als Methodennamen verwendet, daher dauerte eine Aktualisierung meines Codes für PHP 5.3 2 oder 3 Stunden.

So etwas wie Rollen für Klassen wären eine gute Ergänzung zum Objektsystem. Nichts kompliziertes.

class abc { use xyz::method; use uvw::__all; }

Dies würde die Methodenmethode aus der Klasse xyz und alle Methoden aus der Klasse uvm auswählen.

Der Konstruktoraufruf sollte direkt nach der Erstellung als Objekt verwendet werden können.

new goodie()->youp();
1
giftnuss
  1. Lassen Sie Skalare wie Objekte behandelt werden. Wenn ich versuche, $ scalar-> toLower () zu machen; Warum sagst du mir, dass ich falsch liege? Warum nicht einfach vorübergehend in einen Objekttyp "Skalar" umwandeln und dann zur "undefinierten Methode" wechseln (möglicherweise nicht als Null)?

  2. Entfernen Sie Ressourcen aus dem Benutzerbereich. PHP hat jetzt Objekte. Alles, was jetzt eine Ressource ist, kann sich in einem Objekt-Wrapper befinden, der sie als Privateigenschaft verbirgt. Möglicherweise müssen Funktionen für __sleep () und __wakeup () hinzugefügt werden. Die meisten Ressourcen kann leicht in einem "ähnlichen" Zustand neu erstellt werden. Auch wenn dies nicht möglich ist, kann das PDO-Objekt nicht serialisiert werden: Ich gehe davon aus, dass dies auch mit anderen Objekten möglich ist.

  3. Lassen Sie die tatsächliche PHP - Community mit ihrem Code abstimmen: Ermöglichen Sie uns, vorhandene Methoden, Klassen und Funktionen neu zu definieren. Schlechter Code verrottet, genau wie in Javascript. Er lässt die Leute using PHP finde heraus, was sie brauchen, anstatt ständig raten zu müssen. Die verwendeten und überschriebenen Funktionen und Funktionen müssen am wahrscheinlichsten berücksichtigt werden.

    Dies hat auch den Nebeneffekt, dass die PHP - Community mit den UTF (hoffentlich UTF-8) -Problemen in Verbindung gebracht wird. Anstatt eine systemweite Einstellung zu haben, die Unicode ein- oder ausschaltet, PHP Entwickler können die Funktionalität überschreiben, die sie nur für ihre Anwendung benötigen.

  4. Machen Sie _ zu einem impliziten Namespace-Trennzeichen. Die Leute verwenden es seit PHP5. Lassen Sie die Leute ihren Code aufbauen, anstatt ihn neu zu schreiben, wenn für PHP 5.3. Ich kenne die Komplexität nicht. Ich weiß, dass anfangs über Code nachgedacht wird Klassennamen wie Zend_Exception: Erlauben Sie es, der Entwickler muss immer als Zend_Exception oder\Zend\Exception und niemals als Exception darauf zugreifen. Behandeln Sie es als vollständigen Namen anstatt nur als Teil eines.

  5. OOP: Nehmen Sie einige Hinweise aus Javascript/Actionscript/Python. Eigenschaften sehen vielversprechend aus, aber ein dynamischer Typwechsel zur Laufzeit wäre fantastisch.

  6. Eigenschaften: Ich sehe, dass Gespräche über Eigenschaften in Arbeit sind. Bitte implementieren Sie sie dynamisch. PHP soll eine dynamische Sprache sein. Wir sollten in der Lage sein, Eigenschaften (fast alles) zur Laufzeit zu definieren.

  7. Behandeln Sie Konstanten als das, wofür sie verwendet werden: globale Variablen. Klassen/Funktionen/Namespaces passen alle zu dieser Rechnung. Wenn alle erkennen, dass sie jetzt alle global sind, gibt es vielleicht mehr Ideen, um das Problem zu beheben, dass es so viele globale Variablen/Konstanten gibt.

  8. JIT-Kompilierung: Javascript kann das und ist superschnell. PHP ist einer der wenigen, die in diesem Fall zurückbleiben.

  9. PHP soll für "Hypertext" optimiert sein, aber es gibt keine einfache Möglichkeit, sich der Ausgabe als solcher zu entziehen. Persönlich würde ich den 'Druck' neu definieren, um ein htmlspecialchars () zu erstellen. Insgesamt muss es möglicherweise nur ein Druck oder ein Echoh sein.

  10. Vereinfachen Sie die php.ini. php.ini ist für Systemadministratoren, nicht für Entwickler. Entfernen Sie die Inkompatibilitäten von kurzen Tags, beheben Sie sie oder entfernen Sie sie. Es ist ärgerlich für Systemadministratoren, Funktionen der Sprache für das gesamte System ein- und ausschalten zu können. Und umgehen Sie sie, wenn Sie versuchen, Software zu verteilen.

  11. Erlauben Sie PHP Entwickler, nach Ablauf eines Anforderungszyklus zu existieren (für FastCGI und Apache). Stellen Sie dies über eine API bereit. Ermöglichen Sie dem Systemadministrator, dies zu deaktivieren oder einzuschränken. (Fordern Sie das PHP-Programm auf, die Kontrolle zurückzugeben innerhalb von 10 Sekunden an den Disponenten oder er verliert seinen dauerhaften Status).

  12. Machen Sie PHP eine allgemeine Programmiersprache. <? PHP-Tags sind ärgerlich: Machen Sie es nicht erforderlich, wenn Sie ein! #/...

  13. Kurz für das Erstellen von Objekten {} und Arrays [], Taje ein Blick auf PiHiPi , implementieren sie diesen und viele andere einfache syntaktische Zucker.

    14: Ermöglichen Sie [] den Zugriff auf Eigenschaften und Funktionen von Objekten. Funktionen und Klassen sind jetzt erstklassige Bürger, oder? Machen Sie [] den De-facto-Weg (wie Javascript/Actionscript) für den dynamischen Zugriff auf Objekte.

  14. Lassen Sie zu, dass PHP Code PHP Module) ist. Ich sollte nicht C lernen müssen, nur um meine Bibliothek systemweit in mehreren Prozessen verfügbar zu machen. Lassen Sie das = PHP Community finde dies mehr heraus.

  15. Anstatt Ideen aus Java/C zu übernehmen, sollten Sie sie eher aus dynamischen Sprachen wie Javascript, Actionscript und Python übernehmen. Weitere spezifische Funktionen sind unten aufgeführt.

  16. Schwerwiegende Fehler: Warum können die meisten Fehler immer noch nicht behoben werden? Ich mag die Idee, Fehler in einer Protokolldatei zu protokollieren (auf sehr hohem Niveau implementiert). Was ich nicht mag, ist immer von einer "weißen Seite" zu hören. Ich mache viele Überprüfungen und Deklarationen in meinem Code, um diese zu vermeiden: Aber wenn jemand meiner Funktion eine Null anstelle eines Objekts übergibt, verbietet Gott, dass PHP sich von einer solchen Katastrophe erholen kann, ohne sie zu machen Ich mache selbst ein is_null (). Sicher, es ist ein Fehler. Es scheint nur albern, dass die meisten anderen Sprachen dies als NullReferenceError/Exception bezeichnen, die behandelt und mit mehr als nur einem weißen Bildschirm dargestellt werden kann.

    Hören Sie zumindest auf, schwerwiegende Fehler hinzuzufügen. Ich habe die Möglichkeit, viele Server zu aktualisieren, auf denen PHP 5.2) ausgeführt wird, aber ich kann nicht: weil ich keine Zeit habe, ~ 200 Sites auf jedem Server zu durchsuchen, um den alten Code zu reparieren Je weniger neue schwerwiegende Fehler Sie hinzufügen, desto wahrscheinlicher ist es, dass Sie Leute mit neuen Versionen von PHP an Bord holen.

    Entfernen Sie so viele schwerwiegende Fehler wie möglich aus der Sprache. PHP soll eine dynamische Sprache sein: Warum kann sich jede andere Sprache von den meisten Fehlern erholen PHP gilt als fatal? Programmierer können Fehler umgehen, aber nicht, wenn die Programm stirbt gewaltsam nach dem, was die meisten Sprachen als NullReferenceException betrachten.

  17. Ausnahmen wieder aufnehmen. So können wir Ausnahmen und Fehler leichter vermischen.

  18. (Am zeitaufwändigsten und unwahrscheinlichsten) Trennen Sie die Sprachdiskussion, die API-/Moduldiskussion und die Dolmetscherdiskussion. Sie sollten nicht so integriert sein wie jetzt. Probleme mit dem aktuellen Interpreter sollten zuletzt herausgefunden werden. Pypy/Parrot/JVM unterstützen alle mehrere Sprachen. V8 nicht, aber es ist schnell genug, dass einige daran arbeiten, andere Sprachen in JavaScript zu kompilieren, damit sie auf V8 ausgeführt werden und die Funktionen nutzen können.

    Als Interpreter/Runtime/VM unterscheiden sich die Entwicklungsziele etwas von denen einer Sprache. Mit PHP fühlt es sich an, als wären sie ein und dasselbe. Menschen, die versuchen, andere Dolmetscher zu entwickeln, haben es daher schwer, mit den Diskussionen Schritt zu halten, wenn die gesamte Diskussion über das Sprachdesign mit der Diskussion über PHP-Dolmetscher vermischt ist.

    Als Dolmetscher habe ich das Gefühl, dass je mehr Sprachen der Dolmetscher unterstützt, desto besser. Warum können wir kein <? Python oder <? Javascript oder <? Actionscript haben? Ich bin es leid, Code in einer anderen Sprache umzuschreiben, damit ich ihn dort verwenden kann. Einige versuchen bereits, dies zu tun, es würde wahrscheinlich Unterstützung von anderen Bereichen der Gemeinschaft sammeln.

1
Reece45

Meine Nummer eins wäre

Operatoren überladen

Meiner Meinung nach kann eine hier angeforderte wiederkehrende Funktion, nämlich native Typen als Objekte, durch Erstellen eigener Wrapper-Klassen behoben werden. Ich habe für meine Projekte ein arrayData-Objekt, ein stringData-Objekt, ein intData-Objekt usw. entwickelt. Dies löst:

  • Starke Typisierung: Da es sich um benutzerdefinierte Klassen handelt, können sie erzwungen werden
  • Typüberladung: Ich kann meiner arrayData-Klasse alle erforderlichen Methoden hinzufügen
  • Typkonvertierung: Jede meiner Klassen verfügt über die Methoden -> toArray (), -> toInt (), -> __ toString () usw.
  • hTML-Escapezeichen in Vorlagen (Zeichenfolgen sind die userStringData-Klasse, die die stringData-Klasse erweitert).
  • werte werden immer als Referenz übergeben, sofern nicht anders angegeben
  • das Erstellen einer intData ('string') löst eine Ausnahme aus.
  • usw. (die Liste der Vorteile ist immer noch extrem lang)

Imho, dies ist vorteilhafter als native Typen als Objekte, da Sie genau die Anzahl der Methoden haben können, die Sie benötigen, und sie nach Ihren Wünschen aufrufen können.

Aber was ich so sehr vermisse, ist die Möglichkeit, native Operatoren für meine Objekte zu verwenden. Ich kann den Operator [] dank arrayAccess verwenden. Aber ich kann nicht "+", "-" usw. verwenden. Wenn ich könnte, könnte ich stringData + stringData (entspricht $ string. $ String) oder stringData-stringData (entspricht str_replace ($ str, ') ausführen ', $ string)) oder vergleiche meine Typen mit ">" und "<=" ...
Meine aktuelle Implementierung verwendet $ intData-> add ($ n), $ intData-> substract ($ n) und so weiter. Umständlich, insbesondere bei Funktionen, bei denen Sie entweder ein natives int- oder ein intData-Objekt erwarten können. Das heißt, ich muss in jeder Funktion mit instanceOf nachsehen.

Mit anderen Worten, obwohl meine Klassen fertig, optimiert und nett sind, sind sie nicht viel mehr als ein Proof of Concept, bis ich die Operatoren überladen kann. Die Verwendung in einem tatsächlichen Projekt ist ärgerlich.

0
Xananax

Belichten Sie den zval-Referenzzähler. (Ja, wir könnten xdebug_debug_zval verwenden, aber Xdebug auf einer Live-Site aktivieren, ick.) Anwendungsfall: Aktiver Datensatzobjektspeicher - Sie haben Modelle, die externen Ressourcen entsprechen (wie Datenbankzeilen) und sind verantwortlich für die Änderung dieser Ressourcen. Es wäre schlecht, zwei separate Objektdarstellungen für dieselbe Ressource zu haben (Datenverlust aufgrund widersprüchlicher Schreibvorgänge usw.). Daher benötigen wir eine Art Cache, der das Modell für die angeforderte Ressource zurückgeben kann, wenn es bereits geladen wurde. Dies würde jedoch die Garbage Collection beenden: Ein letzter Verweis auf das Modellobjekt würde immer im Cache verbleiben, sodass das Durchlaufen einer großen Anzahl von Ressourcen wie einer großen DB-Abfrage oder eines großen Verzeichnisses schnell Speicherplatz beanspruchen würde. Dies könnte vermieden werden, wenn der Objektspeicher überprüfen könnte, ob nur ein einziger Verweis auf das gespeicherte Objekt (den Speicher selbst) vorhanden ist, und es in diesem Fall zerstören könnte.

0
Tgr

Ich brauche einige erlang-Funktionen in PHP:

  • hot-Code-Laden
  • atome
  • mustervergleich (einschließlich Name der Funktionen, übereinstimmende Anweisung wie: case of)

Arbeiten mit Bytecode: Speichern, Laden, Entfernen usw.

Flexibles Einbettungssystem

0
Dan

Ich mag den PHP-Fortschritt und die Skalierbarkeit in den letzten Tagen.

Die neuen Funktionen, die in Java) eingeführt wurden, haben die Dinge nur komplexer gemacht, anstatt sie einfach zu machen.

anfrage 1: DB-Verbindungspool-Einrichtung als zusätzliche Bibliothek.

anfrage 2:

Ich bitte um die umgekehrte Ajax- oder Kometenprogrammierung oder RTMP-Funktion als eingebaute Bibliothek. Diese sind bereits für .net, Java, python und Perl von Dojo Foundation entwickelt)

Wir haben ähnliche Dinge in PHP, aber keine vollständige Lösung.

  1. Es gibt auch Unterstützung für Beobachtermuster in SPL. aber nicht richtig dokumentiert.
  2. Xajax-Framework (gut, aber es erfordert eine Neugestaltung der Anwendung)

tschüss für heute.

0
Shashank

ein paar Dinge, die meinen Tag machen würden

  • Vernünftige Namenskonventionen für integrierte Funktionen.
  • Geben Sie Hinweise für Zeichenfolgen und Zahlen ein
  • Hinweis zum Rückgabetyp
  • E_STRICT ist standardmäßig aktiviert
  • Eigenschaften, Mixins und Mehrfachvererbung
  • Alles ist ein Objekt (d. H. Rubinartige Reinheit)
  • Hinzufügen von :: Unterstützung zu Namespaces
  • Bessere Windows-Unterstützung
  • Sofort testen
  • Bessere Dokumentation für die Unterarbeit von exec ()
  • Neugestaltung von php.net mit Live-Suche
  • Xdebug-ähnliche Funktionalität aus der Box
  • Verbesserung der Portabilität von PEAR - Benutzer von Ruby Edelsteine ​​sollten es wissen
0
Grayson

Ich hätte wirklich gerne Anmerkungen ... afaik, dass RFC fallen gelassen wurde.

0
crystal88_
  • UTF-8-Unterstützung
  • Machen Sie die Sprache vollständig OO und leihen Sie sich das Konzept Ruby und Python), dass alles ein Objekt ist. Ich mochte das Autoboxing-RFC irgendwie. Es gibt jedoch viel zu viel Freiheit Für die Entwickler ist das nicht so gut. Aber mit einigen Einschränkungen könnte es eine schöne Ergänzung zur Sprachentwicklung sein.

$ x = Array (5, 60, 50, 50); $ x-> map (Funktion ($ i) {return $ i * 2;}) -> Push (10);

$ p = "irgendein String"; $ q = $ p-> Teilzeichenfolge (0, 10);

usw.

Meiner Meinung nach kann dies geschehen, ohne die aktuellen globalen Funktionen zu beeinträchtigen. Die meisten von ihnen werden jedoch unbrauchbar und könnten im Laufe der Zeit veraltet sein.

  • Eine kurze Notation für Arrays wäre nett, aber für die Sprache nicht kritisch.
0
Josh Scott

Es wäre schön, eine Klasse verwenden zu können, die iterabel in einer foreach-Schleife erweitert wird, in der Sie einen Verweis auf die Schleife übergeben:

 foreach (& $ myclass as $ me) {
 echo $ me; 
} 

Ich habe nicht viel Zeit damit verbracht, zu untersuchen, warum das derzeit nicht funktioniert. Vielleicht hängt es damit zusammen, wie iterables funktionieren. Ich habe nicht viel mehr untersucht, als nur zu bemerken, dass es nicht funktioniert.

0
gabe.

Schneller Funktionsaufruf

Wir haben call_user_func($f,$a1,$aN), aber es wurde durch $f($a1,$aN) ersetzt. Für call_user_func_array($f,$args) gibt es so etwas jedoch nicht.

Mein Vorschlag ist, dafür eine bestimmte Sprachsyntax zu erstellen, z. B. $f{$args}. Der Grund, warum jeder eine Meile von call_user_func* Entfernt bleiben sollte, ist, dass sie extrem langsam und hässlich aussehen, in dem Sinne, dass es bessere Alternativen gibt.

Syntax der Objektdekleration

Um ein Objekt im laufenden Betrieb zu erstellen, benötigen Sie Folgendes: (object)array('prop'=>'value');. Konventionell sollten wir auch object('prop'=>'value'); haben. Auch kurze Syntaxen wären praktisch, ähnlich wie bei JSON.

Eine magische Methode für Typen

Im Moment haben wir __toString() und viele schlugen __toInt/__toFloat/Usw. vor. Mein Rat wäre, __toType() oder __typecast() zu implementieren, wobei als erster Parameter der gewünschte Datentyp übergeben wird, z.

class Test {
    public function __toType($type){
        switch($type){
            case 'integer':
                return (int)$this->age;
            case 'string':
                return $this->age.' years';
            default:
                throw new EUnsupportedTypeException();
        }
    }
}

Wenn wir genauer sein wollten, könnten wir nach $ type ein weiteres Argument hinzufügen, nämlich $ class. Sie können also: if($class=='person')return new Person($this->age);

Angabe des Datentyps in foreach

Derzeit können Sie den Datentyp eines PHP - Funktionsarguments wie folgt angeben:

public function say_hello_to(UserClass $user){
    $this->say('Hello, '.$user->name.'!');
}

Es wäre großartig, dies auch in einem Foreach zu tun:

public function on_enter_office(){
    foreach($users as UserClass $user) // <- See UserClass here?
        $user>say_hello_to($this);
}

Der aktuelle "Fix" verwendet einen Verschluss wie folgt:

public function on_enter_office(){
    $users->each(function(UserClass $user){
        $user>say_hello_to($this);
    });
}

Das Update benötigt mehr Ressourcen, mehr Schreiben und beeinträchtigt den Umfang. Daher macht eine native Lösung es einfacher, sauberer und wahrscheinlich schneller als das aktuelle Update.

Bedingte Definitionen

Dies ist wahrscheinlich für viele Menschen keine nützliche Funktion, aber es ist eine großartige Möglichkeit, den laufenden Code auf ein Minimum zu beschränken, selbst wenn er mit alten Systemen kompatibel ist, wodurch die Ausführung beschleunigt wird. Betrachten Sie den folgenden Code:

if (! function_exists ('json_encode')) {function json_encode ($ value, $ options = 0) {// Legacy-Code}}

  • Der Abschnitt // legacy code Wird noch analysiert, daher führen Fehler darin dazu, dass PHP] beendet wird.
  • Durch das Parsen wird PHP langsamer), auch wenn es überhaupt nicht benötigt wird.
  • Der Code ist für Entwickler nicht intuitiv
  • Alle IDE Parsing-Engines werden verwirrt, da sie if-Anweisungen ignorieren und die Funktion am Ende zweimal auflisten.

Die Reparatur? Bedingte Zusammenstellung:

#if PHP_VERSION<5.2
function json_encode($value, $options=0){
    // legacy code
}
#endif
0
Christian

bessere Unterstützung für Hypertext-Links, d. h. eine Funktion/Klassenmethode, mit der die aktuelle URL des Browsers geändert werden kann. oder um eine völlig neue zu erstellen. using $ _SERVER ['REQUEST_URI'] || $ _SERVER ['PATH_INFO'], um die angeforderte Ressource zu verstehen. Dies könnte die Entwicklung von REST-Apps erleichtern. (Laut UriScheme von rfc und seiner Standardschema-Implementierung ist es möglicherweise möglich, andere UriSchemes zu implementieren, die die UriBase erweitern.)

Stellen Sie so etwas wie eine UriResource-Klasse bereit, mit der Sie kleine Funktionsausschnitte auf eine Weise anfordern können, von der auch http-Anforderungen eines Clients profitieren können.

Erstellen Sie eine Funktion, die vor und nach einer Vorlage aufgerufen werden kann, und aktivieren Sie Short-Tags zwischen diesen beiden Funktionsaufrufen. Zwischen diesen Funktionsaufrufen werden nur Variablen zur Verfügung gestellt, die an den ersten Funktionsaufruf übergeben werden (als assoziatives Array (mit Extrakt)). Dies könnte die Template-Entwicklung in PHP selbst (No-Framework-Framework) erleichtern. Das No-Framework PHP MVC-Framework

Alles in allem denke ich, dass die vielen PHP-Frameworks da draußen gewisse Ähnlichkeiten haben, die leicht auf gemeinsame Weise in PHP integriert werden könnten.

aber whoami :)

0
immeëmosol
  1. Unveränderliche Wertobjekte
  2. Anonyme Klassen und/oder Klassen als Objekte
  3. Eingebautes Objekt, das dem String-Datentyp entspricht (bereits erwähnt)
  4. Anmerkungen oder Python-ähnliche Dekoratoren
  5. Singleton-Objekte wie in Scala
  6. Standardfehler als Ausnahmen (bereits erwähnt)
  7. UTF8-Unterstützung
  8. Entfernung von globalen etc.
  9. Unified Access-Prinzip - eine Möglichkeit, Objektmethoden aufzurufen und Eigenschaften zu manipulieren (siehe Scala)
0
sokzzuka