PHP中是否有与C#中的LINQ等效的东西?

PHP中是否有与C#中的LINQ等效的东西?,php,linq,language-comparisons,Php,Linq,Language Comparisons,有什么东西和C#中的相等吗?有。 这个问题的答案是 研究教义 条令1.2实施现行记录。条令2+是一个数据映射器 奥姆 还有,看看Xyster。它基于数据映射器模式 另外,看看DataMapper和Active Record 请参阅(一组模仿C#3.0的LINQ的PHP类)。还有一个比PHPLinq更新的版本,它看起来比PHPLinq更像C。试试看。它是PHP的最佳LINQ 这是一个比较表: 在过去的几年里,PHP世界发生了很大的变化,使得以前的大多数答案都过时了 下面是PHP主要LINQ实现的新

有什么东西和C#中的相等吗?

有。

这个问题的答案是

研究教义

条令1.2实施现行记录。条令2+是一个数据映射器 奥姆

还有,看看Xyster。它基于数据映射器模式

另外,看看DataMapper和Active Record

请参阅(一组模仿C#3.0的LINQ的PHP类)。

还有一个比PHPLinq更新的版本,它看起来比PHPLinq更像C。

试试看。它是PHP的最佳LINQ

这是一个比较表:


在过去的几年里,PHP世界发生了很大的变化,使得以前的大多数答案都过时了

下面是PHP主要LINQ实现的新比较表:

这些库都可以通过安装

总之,我会推荐这个库(我是作者,对此我有偏见),因为它是积极维护的、有良好文档记录的和经过测试的,并且在PHP中提供了一个真正的LINQ实现

所谓真正的LINQ,我的意思是该库不仅是内存数组的流畅集合API,而且还使用表达式树实现真正的查询解析。这允许将此API与外部数据源集成,因此在集成Query中PHP。在将查询编译成SQL并针对MySQL数据库运行时,可以查看此类功能的演示:

(这里是YaLinqo开发者)

目前,LINQ在PHP中有三种主要实现:

  • -最简约的库体系结构(4个类),但最具特色、性能最好,有最好的文档,并且只有一个支持“字符串lambdas”

  • >P>—一个平均大小(70类)的库,在函数的数量上与YaLinqo相当,大约1.5到3x倍,包含自定义集合、迭代器和比较器,文档最多包含参数类型。

  • -一个庞大的库(500个类),支持解析PHP和转换为SQL以及其他一切,速度比其他库慢得多,有一个漂亮的网站,但它的文档一般,缺乏功能

其他库不值得一提(嗯,好吧,LINQforPHP、Phinq、PHPLinq和Plinq)。它们几乎没有经过测试,其中的评估也不懒惰,它们依赖于PHP和.NET开发人员都不熟悉的奇怪概念PHPLinq是唯一真正支持数据库的,但它更像是DAL,用于生成具有固定调用顺序的SQL,而不是LINQ

如果你问我要选择什么库,我会说如果你需要使用数组和对象,就使用YaLinqo,如果你需要使用数据库,就使用任何ORM库(而不是LINQ)。但我会尽力解释原因

演出 雅林库是目前为止速度最快的图书馆。它被设计成快速的:它只依赖于生成器(生成最快的迭代器);它只使用数组(没有作为数组包装器实现的自定义集合)。它的发展正在摆脱缓慢和过时的特性:删除自定义集合,删除显式迭代器;如果提高了性能,则会降低代码质量:在多个排序函数之间进行选择,而不是使用一个通用解决方案,复制粘贴代码以减少函数调用的数量

Ginq和Pinq采用了另一种方法,它们使用显式迭代器类。它大大降低了性能,但允许将迭代器与fluent方法语法分开使用

此外,它们都有性能陷阱。在Ginq中使用属性访问器语法时,代码的速度会慢5倍。当您尝试使用数组作为键时,也会有惊喜等待着您。当您使用加入Pinq时,您的代码会慢几百倍或几千倍(我不是开玩笑,请参阅下面的链接)。在我的错误报告之后,加入Pinq的性能得到了修复

对于YaLinqo,它更简单:要么它不工作(就像键中的数组),要么它工作在预期的性能上。版本1确实有一些黑客使之成为可能,就像在原始LINQ中一样,但当前版本没有。它可能需要一些调整:例如,您需要生成在相同情况下相等的键,而不是使用相等比较器

见文章:关于CodeProject,关于Habrahabr(俄语)。它们包括git存储库,并对原始PHP、YaLinqo、Ginq和Pinq进行了性能测试

特征 YaLinqo和Ginq中LINQ方法的数量及其功能非常接近。我想说没有明确的赢家,因为两个库都提供了另一个库所没有的方法。它们大多是原始LINQ中不可用的额外方法,所以我不会太担心

平克看起来像一个废弃的小镇。方法是赤裸裸的,通常几乎不可用。在编写性能测试时,我经常不得不求助于定制更复杂的Pinq解决方案,而YaLinqo和Pinq的代码通常只在方法名称上有所不同(不同的命名约定:“desc”和“descending”等等)

另一方面,Pinq是唯一支持解析PHP并从中生成SQL的。不幸的是,唯一的查询提供者是MySQL,它的状态是“演示”。因此,虽然Pinq有这个独特的功能,但不幸的是,它还不能被使用

如果您希望LINQto数据库成为现实,我想您别无选择,只能开始为Pinq开发查询提供程序。这是一项非常复杂的任务,我怀疑一个开发人员是否能够单独为所有数据库生成高质量的查询提供程序

Ginq拥有亚林库没有的是更先进的架构。在Ginq中使用
Set
Dictionary
类的地方,您将看到数组,并且只看到Y中的数组