Derzeit gibt es drei wichtigsten Implementierungen von LINQ in PHP:
YaLinqo — die minimalistische Bibliothek Architektur-weiser (4 Klassen), aber die meisten ausgereifter, die performant, mit die beste Dokumentation und die einzige, die die Unterstützung von "string " lambdas".
Ginq — eine Bibliothek mittlerer Größe (70-Klassen), auf Augenhöhe mit YaLinqo in der Anzahl von Funktionen, etwa 1,5–3x mal langsamer, enthält benutzerdefinierte collections, Iteratoren und Comparer, die Dokumentation enthält die argument-Typen am besten.
Pinq — eine riesige Bibliothek (500 Klassen), unterstützt PHP Parsen und die Umwandlung in SQL und alles andere, viel langsamer als der rest, hat eine hübsche website, aber die Dokumentation ist durchschnittlich und Funktionalität fehlt.
Anderen Bibliotheken sind nicht Wert, erwähnt wird (äh, okay, LINQ, PHP, Phinq, PHPLinq und Plinq). Sie sind kaum getestet, Auswertungen in Ihnen sind nicht faul, Sie verlassen sich auf seltsame Konzepte Fremd PHP-und .NET Entwickler. PHPLinq ist die einzige, die tatsächlich unterstützt die Datenbanken, aber es ist mehr wie DAL für die Generierung von SQL mit einer festen Reihenfolge statt LINQ.
Wenn Sie mich Fragen, was die Bibliothek zu wählen, würde ich einfach sagen: nutzen YaLinqo wenn Sie brauchen, um die Arbeit mit arrays und Objekte und alle ORM-Bibliothek (kein LINQ), wenn Sie brauchen, um mit Datenbanken arbeiten. Aber ich werde versuchen zu erklären, warum.
Leistung
YaLinqo ist mit Abstand der Schnellste von den Bibliotheken. Es wurde entwickelt, um schnell sein: es stützt sich nur auf die Generatoren (die produzieren die schnellsten Iteratoren); es nutzt nur arrays (keine eigene Kollektionen umgesetzt, die als Wrapper für arrays). Seine Entwicklung ist loszuwerden, langsame und veraltete Funktionen: entfernen von benutzerdefinierten Sammlungen, entfernen expliziten Iteratoren; und Verschlechterung der code-Qualität, wenn es die Leistung verbessert: die Auswahl zwischen mehreren Sortier-Funktionen, anstatt eine generische Lösung, kopieren und einfügen von code zu reduzieren, die Anzahl der Funktionsaufrufe.
Ginq und Pinq nahm einen anderen Ansatz, verwenden Sie explizite iterator-Klassen. Sie beißt ein großes Stück aus der Leistung, sondern ermöglicht die Benutzung von Iteratoren getrennt von fließend-Methode syntax.
Darüber hinaus haben Sie beide Leistung fallen. Wenn Sie Eigenschaftenaccessoren syntax in Ginq, Ihr code wird 5 mal langsamer. Es sind auch überraschungen warten auf Sie, wenn Sie versuchen, mithilfe von arrays als Schlüssel. Wenn Sie den Beitritt in Pinq, Ihr code wird Hunderte oder Tausende mal langsamer (ich bin kein Scherz, siehe links unten) Performace Beitritt in Pinq wurde behoben, nach meinem bug-report.
Mit YaLinqo, ist es einfacher: entweder es funktioniert nicht (wie arrays im Schlüssel), oder es funktioniert mit der erwarteten Leistung. Version 1 hatte einige hacks machen es möglich, wie in der ursprünglichen LINQ, aber die aktuelle version nicht. Es kann einige Anpassungen: zum Beispiel, statt mit einer Gleichstellung comparer, Sie müssen produzieren Schlüssel, die gleich in den gleichen Fällen.
Die Anzahl der LINQ-Methoden in YaLinqo und Ginq, sowie deren functionaility, ziemlich nahe. Ich würde sagen, es gibt keinen klaren Sieger, da beide Bibliotheken bieten Methoden, die andere nicht haben. Sie werden meist zusätzliche Methoden, die nicht in der ursprünglichen LINQ, so würde ich nicht Sorge über es zu viel.
Pinq sieht aus wie eine verlassene Stadt. Methoden sind barebones und sind oft kaum nutzbar. Beim schreiben peformance tests oft hatte ich schon zu greifen, um benutzerdefinierte komplexer Lösungen für Pinq, während der code für die YaLinqo und Pinq in der Regel unterschieden sich nur in der Methode-Namen (verschiedene Benennungskonventionen: "desc" vs. "absteigend" und ähnliches).
Auf der anderen Seite, Pinq ist der einzige, der unterstützt PHP Parsen und generieren von SQL aus. Leider der einzige Abfrage provider für MySQL und den Staat ist eine "demonstration". So, während Pinq hat diese einzigartige Eigenschaft, es kann nicht verwendet werden, leider noch nicht.
Wenn Sie möchten, LINQ, databases, eine Wirklichkeit zu werden, ich denke, Sie haben keine andere Wahl, als zu beginnen die Arbeit auf einer Abfrage-Anbieter für Pinq. Es ist eine sehr komplexe Aufgabe, und ich bezweifle, dass ein Entwickler in der Lage ist zu produzieren high-quality-Abfrage Provider für alle Datenbanken allein.
Was Ginq hat, dass YaLinqo nicht mehr fortschrittliche Architektur. Wo Set und Dictionary - Klassen werden in Ginq, werden Sie sehen, arrays und nur arrays in YaLinqo. Wo Comparer und EqualityComparer werden in Ginq, du wirst sehen, Verschlüsse (oder gleichwertig) in YaLinqo. Im Kern ist es eine design-Entscheidung, — ob die Bibliothek die Nutzung der Konzepte Natur-für Programmierer in dieser Sprache oder für Programmierer verwendet, um die Bibliothek in anderen Sprachen. Die Bibliotheken nur eine Wahl getroffen.
Es sollte angemerkt werden, dass eine komplexere Architektur nicht gleich eine gute Umsetzung. Ginq verwendet public function hash($v) { return sha1(serialize($v)); } für die Berechnung der key-hashes in "sets", zum Beispiel.
Dokumentation
YaLinqo zeichnet sich durch eine gute Referenz Dokumentation PHPDoc-und online (generiert von PHPDoc). Es ist vor allem die Dokumentation von LINQ in .NET von der MSDN-Website angepasst PHP. Wenn Sie wissen, was MSDN ist, wissen seine Qualität.
Ginq ' s Dokumentation ist fast nicht existent, es enthält in der Regel nur argument geben Hinweise.
Pinq die Dokumentation ist relativ gut (alle wichtigen Methode hat ein oder zwei Sätzen zu erklären, was es tut), aber es ist kein Spiel für YaLinqo Dokumentation.
Beide Ginq und Pinq haben gute einführende artcicles im Internet, die Begriffe zu erläutern, um neue Entwickler zu bekommen. YaLinqo keine einführende Dokumentation, die neben einem verrückten Beispiel in der ReadMe-Datei, die nicht alles erklären.
Pinq hat eine hübsche website zu haben, die nur an einer der drei Bibliotheken.
Alles andere
Alle drei Bibliotheken haben gute Testabdeckung, Komponist integration, freizügige open-source-Lizenzen, und sonstige Eigenschaften der libararies, die bereit sind in der Produktion eingesetzt werden.
Für diejenigen, die Pflege über die alten PHP-Versionen, YaLinqo 1.x benötigt PHP 5.3, YaLinqo 2.x benötigt PHP 5.5, Ginq benötigt PHP 5.3, Pinq benötigt PHP 5.4.
P. S. Wenn Sie irgendwelche Ergänzungen, oder denken ich bin voreingenommen, bitte kommentieren. Kommentare sind das, was ich vermisse, nach dem schreiben so viel text. 🙂
Es hat sich viel verändert in der PHP-Welt in den letzten paar Jahren Rendern die meisten der bisherigen Antworten veraltet.
Hier ist ein neues Vergleichs-Tabelle der wichtigsten LINQ-Implementierungen für PHP:
Diese Bibliotheken installiert werden, die über Komponist.
Zusammenfassend würde ich empfehlen, die PINQ Bibliothek (ich bin voreingenommen wie ich bin der Autor), denn es wird aktiv gepflegt, gut dokumentiert und getestet und bietet eine Implementierung der wahre LINQ in PHP.
Durch wahr LINQ-ich meine, dass die Bibliothek nicht nur ein fließend collection-API für die in-memory-arrays, sondern führt auch real query-parsing mit expression trees. Dies ermöglicht die integration dieser API mit externen Datenquellen daher PHP Integrated Query. Eine demo, in der eine solche Funktionalität kann gesehen hier wo Abfragen kompiliert werden in SQL und laufen gegen eine MySQL-Datenbank:
Es ist PHPLinq - LINQ für PHP.
InformationsquelleAutor der Antwort Justin Niessner
Versuchen YaLinqo. Es ist die beste LINQ für PHP.
Hier ist eine Vergleichstabelle:
InformationsquelleAutor der Antwort cystbear
(YaLinqo Entwickler hier.)
Derzeit gibt es drei wichtigsten Implementierungen von LINQ in PHP:
YaLinqo — die minimalistische Bibliothek Architektur-weiser (4 Klassen), aber die meisten ausgereifter, die performant, mit die beste Dokumentation und die einzige, die die Unterstützung von "string " lambdas".
Ginq — eine Bibliothek mittlerer Größe (70-Klassen), auf Augenhöhe mit YaLinqo in der Anzahl von Funktionen, etwa 1,5–3x mal langsamer, enthält benutzerdefinierte collections, Iteratoren und Comparer, die Dokumentation enthält die argument-Typen am besten.
Pinq — eine riesige Bibliothek (500 Klassen), unterstützt PHP Parsen und die Umwandlung in SQL und alles andere, viel langsamer als der rest, hat eine hübsche website, aber die Dokumentation ist durchschnittlich und Funktionalität fehlt.
Anderen Bibliotheken sind nicht Wert, erwähnt wird (äh, okay, LINQ, PHP, Phinq, PHPLinq und Plinq). Sie sind kaum getestet, Auswertungen in Ihnen sind nicht faul, Sie verlassen sich auf seltsame Konzepte Fremd PHP-und .NET Entwickler. PHPLinq ist die einzige, die tatsächlich unterstützt die Datenbanken, aber es ist mehr wie DAL für die Generierung von SQL mit einer festen Reihenfolge statt LINQ.
Wenn Sie mich Fragen, was die Bibliothek zu wählen, würde ich einfach sagen: nutzen YaLinqo wenn Sie brauchen, um die Arbeit mit arrays und Objekte und alle ORM-Bibliothek (kein LINQ), wenn Sie brauchen, um mit Datenbanken arbeiten. Aber ich werde versuchen zu erklären, warum.
Leistung
YaLinqo ist mit Abstand der Schnellste von den Bibliotheken. Es wurde entwickelt, um schnell sein: es stützt sich nur auf die Generatoren (die produzieren die schnellsten Iteratoren); es nutzt nur arrays (keine eigene Kollektionen umgesetzt, die als Wrapper für arrays). Seine Entwicklung ist loszuwerden, langsame und veraltete Funktionen: entfernen von benutzerdefinierten Sammlungen, entfernen expliziten Iteratoren; und Verschlechterung der code-Qualität, wenn es die Leistung verbessert: die Auswahl zwischen mehreren Sortier-Funktionen, anstatt eine generische Lösung, kopieren und einfügen von code zu reduzieren, die Anzahl der Funktionsaufrufe.
Ginq und Pinq nahm einen anderen Ansatz, verwenden Sie explizite iterator-Klassen. Sie beißt ein großes Stück aus der Leistung, sondern ermöglicht die Benutzung von Iteratoren getrennt von fließend-Methode syntax.
Darüber hinaus haben Sie beide Leistung fallen. Wenn Sie Eigenschaftenaccessoren syntax in Ginq, Ihr code wird 5 mal langsamer. Es sind auch überraschungen warten auf Sie, wenn Sie versuchen, mithilfe von arrays als Schlüssel.
Wenn Sie den Beitritt in Pinq, Ihr code wird Hunderte oder Tausende mal langsamer (ich bin kein Scherz, siehe links unten)Performace Beitritt in Pinq wurde behoben, nach meinem bug-report.Mit YaLinqo, ist es einfacher: entweder es funktioniert nicht (wie arrays im Schlüssel), oder es funktioniert mit der erwarteten Leistung. Version 1 hatte einige hacks machen es möglich, wie in der ursprünglichen LINQ, aber die aktuelle version nicht. Es kann einige Anpassungen: zum Beispiel, statt mit einer Gleichstellung comparer, Sie müssen produzieren Schlüssel, die gleich in den gleichen Fällen.
Siehe Artikel: LINQ für PHP Vergleich: YaLinqo, Ginq, Pinq auf CodeProject, LINQ für PHP: die Geschwindigkeit kommt es an auf Habrahabr (Russisch). Sie decken YaLinqoPerfgit-repository mit performance-tests, Vergleich raw-PHP, YaLinqo, Ginq und Pinq.
Features
Die Anzahl der LINQ-Methoden in YaLinqo und Ginq, sowie deren functionaility, ziemlich nahe. Ich würde sagen, es gibt keinen klaren Sieger, da beide Bibliotheken bieten Methoden, die andere nicht haben. Sie werden meist zusätzliche Methoden, die nicht in der ursprünglichen LINQ, so würde ich nicht Sorge über es zu viel.
Pinq sieht aus wie eine verlassene Stadt. Methoden sind barebones und sind oft kaum nutzbar. Beim schreiben peformance tests oft hatte ich schon zu greifen, um benutzerdefinierte komplexer Lösungen für Pinq, während der code für die YaLinqo und Pinq in der Regel unterschieden sich nur in der Methode-Namen (verschiedene Benennungskonventionen: "desc" vs. "absteigend" und ähnliches).
Auf der anderen Seite, Pinq ist der einzige, der unterstützt PHP Parsen und generieren von SQL aus. Leider der einzige Abfrage provider für MySQL und den Staat ist eine "demonstration". So, während Pinq hat diese einzigartige Eigenschaft, es kann nicht verwendet werden, leider noch nicht.
Wenn Sie möchten, LINQ, databases, eine Wirklichkeit zu werden, ich denke, Sie haben keine andere Wahl, als zu beginnen die Arbeit auf einer Abfrage-Anbieter für Pinq. Es ist eine sehr komplexe Aufgabe, und ich bezweifle, dass ein Entwickler in der Lage ist zu produzieren high-quality-Abfrage Provider für alle Datenbanken allein.
Was Ginq hat, dass YaLinqo nicht mehr fortschrittliche Architektur. Wo
Set
undDictionary
- Klassen werden in Ginq, werden Sie sehen, arrays und nur arrays in YaLinqo. WoComparer
undEqualityComparer
werden in Ginq, du wirst sehen, Verschlüsse (oder gleichwertig) in YaLinqo. Im Kern ist es eine design-Entscheidung, — ob die Bibliothek die Nutzung der Konzepte Natur-für Programmierer in dieser Sprache oder für Programmierer verwendet, um die Bibliothek in anderen Sprachen. Die Bibliotheken nur eine Wahl getroffen.Es sollte angemerkt werden, dass eine komplexere Architektur nicht gleich eine gute Umsetzung. Ginq verwendet
public function hash($v) { return sha1(serialize($v)); }
für die Berechnung der key-hashes in "sets", zum Beispiel.Dokumentation
YaLinqo zeichnet sich durch eine gute Referenz Dokumentation PHPDoc-und online (generiert von PHPDoc). Es ist vor allem die Dokumentation von LINQ in .NET von der MSDN-Website angepasst PHP. Wenn Sie wissen, was MSDN ist, wissen seine Qualität.
Ginq ' s Dokumentation ist fast nicht existent, es enthält in der Regel nur argument geben Hinweise.
Pinq die Dokumentation ist relativ gut (alle wichtigen Methode hat ein oder zwei Sätzen zu erklären, was es tut), aber es ist kein Spiel für YaLinqo Dokumentation.
Beide Ginq und Pinq haben gute einführende artcicles im Internet, die Begriffe zu erläutern, um neue Entwickler zu bekommen. YaLinqo keine einführende Dokumentation, die neben einem verrückten Beispiel in der ReadMe-Datei, die nicht alles erklären.
Pinq hat eine hübsche website zu haben, die nur an einer der drei Bibliotheken.
Alles andere
Alle drei Bibliotheken haben gute Testabdeckung, Komponist integration, freizügige open-source-Lizenzen, und sonstige Eigenschaften der libararies, die bereit sind in der Produktion eingesetzt werden.
Für diejenigen, die Pflege über die alten PHP-Versionen, YaLinqo 1.x benötigt PHP 5.3, YaLinqo 2.x benötigt PHP 5.5, Ginq benötigt PHP 5.3, Pinq benötigt PHP 5.4.
P. S. Wenn Sie irgendwelche Ergänzungen, oder denken ich bin voreingenommen, bitte kommentieren. Kommentare sind das, was ich vermisse, nach dem schreiben so viel text. 🙂
InformationsquelleAutor der Antwort Athari
Es hat sich viel verändert in der PHP-Welt in den letzten paar Jahren Rendern die meisten der bisherigen Antworten veraltet.
Hier ist ein neues Vergleichs-Tabelle der wichtigsten LINQ-Implementierungen für PHP:
Diese Bibliotheken installiert werden, die über Komponist.
Zusammenfassend würde ich empfehlen, die PINQ Bibliothek (ich bin voreingenommen wie ich bin der Autor), denn es wird aktiv gepflegt, gut dokumentiert und getestet und bietet eine Implementierung der wahre LINQ in PHP.
Durch wahr LINQ-ich meine, dass die Bibliothek nicht nur ein fließend collection-API für die in-memory-arrays, sondern führt auch real query-parsing mit expression trees. Dies ermöglicht die integration dieser API mit externen Datenquellen daher PHP Integrated Query. Eine demo, in der eine solche Funktionalität kann gesehen hier wo Abfragen kompiliert werden in SQL und laufen gegen eine MySQL-Datenbank:
InformationsquelleAutor der Antwort Elliot Levin
Gibt es auch phinqdie hat eine neuere Version, die PHPLinq, und es sieht mehr wie LINQ Objekte für C# als PHPLinq tut.
InformationsquelleAutor der Antwort nover
Gute PHP-ORM-Bibliothek?
Eine Antwort auf diese Frage sagt
InformationsquelleAutor der Antwort Bastardo
Gibt es auch Pinq. Nach kurzem gehen durch die meisten PHP-Linq-Projekt-Dokumentationen, dieser machte den besten Eindruck auf mich.
InformationsquelleAutor der Antwort Jan Matousek
Sehen PHPLinq (ein Satz von PHP-Klassen mimicing C#3.0-LINQ).
InformationsquelleAutor der Antwort moi_meme