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:
- 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")
- 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")
- 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")
- 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")
- 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.
Antworten:
Ich hätte nichts dagegen, benannte Parameter.
Leider haben die PHP-Entwickler diese Idee bereits abgeschossen .
quelle
[]
Operator) wäre ein willkommenes Feature.Weitere Dereferenzierung:
Andere haben benannte Parameter und eine kürzere Array-Syntax erwähnt. Mir würde auch die kürzere Objektsyntax nichts ausmachen.
quelle
function something_that_returns_array() { return array( 'a', 'b', 'c', 'd', 'e' ); }
()->
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.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:
Ist (meiner Meinung nach) einfach viel einfacher zu schreiben und sauberer als
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!
quelle
Dinge, die ich als ehemaliger langjähriger PHP-Apologet möchte:
some_array_method($argity, array('key' => $value));
. Ich glaube, dieser Vorschlag wurde leider bereits auf der PHP-Mailing-Liste entfernt.finally
UnterstützungAuthorizeAttribute
, 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.function($x){ return $x*2;}
, könnte ich vielleicht schreiben$x => return $x*2
oder 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.Decimal
(Festkomma-Mathematik), die mathematische Operationen durch die normalen Operatoren unterstützt, wäre nett, da wir keine Überladung von Operatoren haben.quelle
Machen Sie PHP wirklich objektorientiert. Die
slap on another global function
Entwicklung von PHP muss ein Ende haben.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))
Sie haben den Schritt zur Aktivierung der Objekt- / Methodenunterstützung gemacht. Verwenden Sie diese jetzt in den eigentlichen Kernfunktionen von PHP.
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?
quelle
dog_wake_up($dog); bark_dog($dog);
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.
quelle
Oh. Tippe Hinweise für Primitive. Das wäre nett.
quelle
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.
http://blog.ginkel.com/2010/03/php-unicode-support-or-the-lack-thereof/
quelle
Stellen Sie Strings wie Objekte dar, mit eingebauten Methoden, um die inkonsistent benannten und parametrierten Nicht-Objekt-Methoden zu ersetzen. z.B
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.
quelle
subject->verb(object)
, macht die Parameterreihenfolge leichter zu merken.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.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)
quelle
create()
Methode zu entwickeln, die nichts Besonderes tut, nur um # 1 zu umgehen!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
quelle
Eine ini-Direktive für
E_ERROR
undefinierte Konstanten, anstatt anzunehmen, dass es sich um eine Zeichenfolge mit handeltE_NOTICE
.quelle
E_ERROR
oder wählenE_PARSE
.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 !
quelle
Zeichenfolgen sollten Objekte sein
quelle
1) Kürzere Array / Objekt-Syntax, a la JavaScript (wie zuvor erwähnt)
2)
const
Variablen erlauben, das Ergebnis einer Berechnung wiedefine()
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 Verwendenarray()
. Sie sollten in der Lage sein, Dinge zu tun,array_filter($array_object_instance)
ohne dies zu tunarray_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,
echo
ein 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 Moduserror_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.quelle
1) Array-Verständnis im Stil des Python-Listenverständnisses:
2) Kurze Array-Syntax
3) Machen Sie empty () und betrachten Sie die Zeichenkette '0' nicht als wahr
quelle
empty()
ist das logische Gegenteil vonif ($x)
, also macht es Sinn, dassempty('0')
es wahr ist, weilif ('0')
es falsch ist. Der einzige Unterschied besteht darin,empty()
dass keine Benachrichtigung ausgegeben wird, wenn die Variable nicht festgelegt ist.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!
quelle
final
. Zur Verdeutlichung:final
bedeutet, 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
.Meine zwei größten Wünsche als Hardcore-PHP-Programmierer:
quelle
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:
str::toupper()
)\
Namespace-Syntax , korrigieren Sie den Parser und übernehmen Sie sie::
als Alternative. Sie wissen, wie eine echte Sprache.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).
quelle
::
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.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.
quelle
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.
quelle
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 ()).
quelle
quelle
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.
quelle
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:
foldr
Funktion,array_reduce()
bietetfoldl
array_map()
sollte den Schlüssel im zweiten Argument übergeben, wie esarray_walk()
tutarray_map_keys()
könnte für die Änderung von Schlüsseln nützlich seinrange()
,array_fill()
undarray_fill_keys()
nur so viele Fälle behandeln, undarray_filter()
ist getrenntIch 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.
quelle
Bedienerüberladung:
quelle
Füge Ausnahmen hinzu, anstatt E_WARNING zu erzeugen ... Es ist sehr ärgerlich, dass ich so etwas nicht verwenden kann wie:
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.
quelle
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!)
Verschieben Sie Erweiterungen in ihre eigenen Namespaces - machen Sie den globalen Namespace übersichtlich
$conn = new \MySQLi\Connection();
spl_autoload()
Funktion entkrüppeln ! Im Ernst, dies ist möglicherweise eine der größten Funktionen von PHP und gleichzeitig auch die nutzloseste.spl_autoload
ist 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!quelle
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).
quelle
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.
quelle