首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mongodb PHP封装API类,实现基本的插入修改查询删除操作

1:该版本API实现了 Mongodb 中最基本的插入/修改/查询/删除操作的封装 2:其它更高级的操作可通过 $this->getMongo() 得到原生的对象,更多API请自行查阅 Mongo PHP...手册,后续版本将会对增加更多的原生API封装 3:该类所有API接口中的 $query 查询参数的使用请以下有关 [查询条件说明文档] 4: 如果要存储中文字符,则一定要使用 utf8 的编码. 5...* * @var object MongoDB */ private $_db = nul /** * 修改器命令前缀 * * @var string */ private $_cmd...* array( * 'host'=>'localhost', // 主机名或IP地址 * 'port'=>27017, // 端口 * 'cmd'=>'$', // 修改器命令前缀...query 查询条件,如果为空数组则更新所有记录.具体请看 [查询条件说明文档] * @param string $option 操作选项,可选择项如下; * * 'set':只修改指定的字段

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Effective-java-读书笔记之类和接口

    (或接口)只是在某一个类的内部被用到, 就应该考虑使它成为那个类的私有嵌套类.对于成员(域, 方法, 嵌套类和嵌套接口), 有四种可能的访问级别(可访问性递增):私有的(private).包级私有的(package-private...如java.awt包中的Point和Dimension.让公有类直接暴露域虽然从来都不是种好办法, 但是如果域是不可变的, 这种做法的危害就比较小一些(但是仍然questionable).第17条 使可变性最小化不可变类...: 其实例不能被修改的类....它们却错误地使用了继承.在决定使用继承而不是复合之前, 还应该问自己最后一组问题: 对于你正在试图扩展的类, 它的API中有没有缺陷呢?...方法行为若不依赖于标签值, 就把方法放在抽象类中.所有方法都用到的数据域放在抽象类中, 特定于某个类型的数据域放在对应的子类中.这个类层次纠正了前面所提到的标签类的所有缺点.第24条 优先考虑静态成员类嵌套类

    71671

    Python 工匠:使用装饰器的技巧

    02 最佳实践 一 尝试用类来实现装饰器 绝大多数装饰器都是基于函数和 闭包 实现的,但这并非制造装饰器的唯一方式。...但除了函数外,我们也可以让任何一个类(class)变得“可被调用”(callable)。办法很简单,只要自定义类的 __call__ 魔法方法即可。...更容易实现一个同时兼容装饰器与上下文管理器协议的对象(参考 unitest.mock.patch) 二 使用wrapt模块编写更扁平的装饰器 在写装饰器的过程中,你有没有碰到过什么不爽的事情?...不管你有没有,反正我有。...我经常在写代码的时候,被下面两件事情搞得特别难受: 实现带参数的装饰器时,层层嵌套的函数代码特别难写、难读 因为函数和类方法的不同,为前者写的装饰器经常没法直接套用在后者上 比如,在下面的例子里,我实现了一个生成随机数并注入为函数参数的装饰器

    63730

    Python 工匠:使用装饰器的技巧

    尝试用类来实现装饰器 绝大多数装饰器都是基于函数和 闭包 实现的,但这并非制造装饰器的唯一方式。...但除了函数外,我们也可以让任何一个类(class)变得“可被调用”(callable)。办法很简单,只要自定义类的 __call__ 魔法方法即可。...与纯函数相比,我觉得使用类实现的装饰器在特定场景下有几个优势: 实现有状态的装饰器时,操作类属性比操作闭包内变量更符合直觉、不易出错 实现为函数扩充接口的装饰器时,使用类包装函数,比直接为函数对象追加属性更易于维护...使用 wrapt 模块编写更扁平的装饰器 在写装饰器的过程中,你有没有碰到过什么不爽的事情?不管你有没有,反正我有。...我经常在写代码的时候,被下面两件事情搞得特别难受: 实现带参数的装饰器时,层层嵌套的函数代码特别难写、难读 因为函数和类方法的不同,为前者写的装饰器经常没法直接套用在后者上 比如,在下面的例子里,我实现了一个生成随机数并注入为函数参数的装饰器

    51710

    KVO实现原理

    @属性值改变了 - %@ - %@", object, keyPath, change, context); } 以上代码就是一个KVO的简单实现,但是我们有没有想过他的内部到底是怎样实现的呢,今天我们就来探究一下...KVO的内部实现原理 KVO的内部实现 探究一个对象底层实现最简单的办法就行打印一些对象信息,看看有什么改变 我们在给person1添加监听之前分别打印p1,p2的类信息 代码实现 NSLog(@"person1...KVO会在运行时动态创建一个新类,将对象的isa指向新创建的类,新类是原类的子类,命名规则是NSKVONotifying_xxx的格式。...1、利用RuntimeAPI动态生成一个子类NSKVONotifying_XXX,并且让instance对象的isa指向这个全新的子类NSKVONotifying_XXX 2、当修改对象的属性时,会在子类...,如果不记录旧的值,那就没有改变一说了 3、直接修改成员变量会触发KVO吗 不会触发KVO,因为KVO的本质就是监听对象有没有调用被监听属性对应的setter方法,直接修改成员变量,是在内存中修改的,不走

    1.1K00

    Java中的三大特性 - 超详细篇

    ,它没有方法体,即方法实现代码为空,比如abstract public void fun(); 抽象方法一般在子类中进行实现,它就好像是在说:我不写代码,我只是声明一个方法名,剩下的交给我的子孙后代(继承类...那个D类好像是多余的 不多余 这个D类其实就是上面讲到的抽象类的作用:将共有的部分fun()抽象出来(或者提供一个基础的实现),然后子类分别去实现各自的,这也是多态的一种体现(下面会将多态) 如果没有D...(男人是人,is-a关系) 如果子类和父类只是包含或者引用的关系,那么这个继承关系就很糟糕(猫是猫笼,包含关系) 有没有什么办法可以阻止类的继承?...有,如果一个方法内容过长,又误被当做内联处理,那么就会影响性能 比如你的代码多个地方都调用这个方法,那么你的代码就会膨胀变得很大,从而影响性能 那有没有办法可以解决呢?...场景很多,这里说两个最常用的 场景一:方法的参数,即方法定义时,父类作为方法的形参,然后调用时传入子类作为方法的实参 场景二:方法的返回值,即方法定义时,父类作为方法的返回值,然后在方法内部实际返回子类

    54510

    Java 中的三大特性(超详细篇)

    ,它没有方法体,即方法实现代码为空,比如abstract public void fun(); 抽象方法一般在子类中进行实现,它就好像是在说:我不写代码,我只是声明一个方法名,剩下的交给我的子孙后代(继承类...那个D类好像是多余的 不多余 这个D类其实就是上面讲到的抽象类的作用:将共有的部分fun()抽象出来(或者提供一个基础的实现),然后子类分别去实现各自的,这也是多态的一种体现(下面会将多态) 如果没有...(男人是人,is-a关系) 如果子类和父类只是包含或者引用的关系,那么这个继承关系就很糟糕(猫是猫笼,包含关系) 有没有什么办法可以阻止类的继承?...有,如果一个方法内容过长,又误被当做内联处理,那么就会影响性能 比如你的代码多个地方都调用这个方法,那么你的代码就会膨胀变得很大,从而影响性能 那有没有办法可以解决呢?...场景很多,这里说两个最常用的 场景一:方法的参数,即方法定义时,父类作为方法的形参,然后调用时传入子类作为方法的实参 场景二:方法的返回值,即方法定义时,父类作为方法的返回值,然后在方法内部实际返回子类

    1.2K10

    Python中的接口协议和抽象基类

    __setitem__ = set_card shuffle(deck) 这就是一段猴子补丁技术的实现代码,没有修改FrenchDeck类的源码,而是在运行时动态修改。...抽象基类 Python的抽象基类是指必须让继承它的子类去实现它所要求的方法的类。...交流群和公司都有人问过我这个问题,写了太多的ifelse有没有更好的实现方式,我想这里已经给出了答案。 鸭子类型和白鹅类型 Python鸭子类型是指对象的类型无关紧要,只要实现了特定的协议即可。...白鹅类型是指只要cls是抽象基类(即cls的元类是abc.ABCMeta),就可以使用isinstance(obj, cls)。它的基本特性是,即便不继承,也有办法把一个类注册为抽象基类的虚拟子类。...Python不会检查虚拟子类是否实现了抽象基类要求实现的方法,而是由我们自己保证,并捕获异常。具体会在下篇文章《Python抽象基类的定义与使用》进行介绍。

    1.9K30

    关于IoC与AOP的一些理解

    在没有IOC的时代,A依赖B接口,但是接口又不能实例化,因此A需要知道B的子类,然后实例化B的子类,这种依赖实际上是依赖具体实现,而不是依赖接口,不符合面向对象设计原则依赖倒置原则。...那么IOC的出现就是为了反转这个依赖,也就是控制反转的意义。有了IOC,A只需要依赖B的接口,运行时需要B的实现子类会自动注入进来,这是IOC的魅力所在。...B的创建依赖A public B(A a) { this.a = a; } } 那么结果自然是死锁,A需要B才能实例化,B需要A才能实例化,系统中有没有两个类的实例,互相僵持就是死锁,无法解决循环依赖问题...解决办法也很简单,就是获取到代理类,然后再执行这个方法,对于Spring,可以从ApplicationContext中获取到当前的HelloService实例,这里获取到的自然是代理类,然后利用该实例调用...动态代理之后会产生一个代理类,那么把这个类当成target,也就是AOP后要转向的真实类操作,封装后然后接着AOP,就实现了嵌套.本质上是一样的道理,既然都是实实在在的类,那么就可以一直嵌套下去,这样的嵌套一般会形成一个功能链

    61110

    减少该死的 if else 嵌套!

    把ShareItem抽象出来,作为基础类,然后针对每种业务各自实现其子类: ?...(注意:上面每个子类的构造方法还对每个字段做了空值处理,为空的话,赋值default,这样如果用户传了空值,在调试就会发现问题。) 实现了多态后,分享接口的就简洁多了: ?...但如果是第三方分享SDK的功能的话,这样暴露给用户的类增加了很多(各ShareItem的子类,相当于把if else抛给用户了),用户的接入成本提高,违背了“迪米特原则”了。...把ShareItem的子类的访问权限降低,在暴露给用户的主类里定义几个方法,在内部帮助用户创建具体的分享类型,这样用户就无需知道具体的类了: ? 或者有人会说,这样用户也需额外了解多几个方法。...2、利用多态,把业务判断消除,各子类分别关注自己的实现,并实现子类的创建方法,避免用户了解过多的类。 3、把分支状态信息预先缓存在Map里,直接get获取具体值,消除分支。

    1.4K20

    为Java程序员金三银四精心挑选的五十道面试题与答案

    新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。...【基础】 答:JVM 中类的装载是由ClassLoader 和它的子类来实现的,Java ClassLoader是一个重要的Java 运行时系统组件。它负责在运行时查找和装入类文件的类。...然而可以创建一个变量,其类型是一个抽象类,它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例并让它指向具体子类的一个实例。...Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。...是否可以implements(实现)interface(接口)? 【基础】 答:可以继承其他类或实现其他接口,在swing 编程中常用此方式。 45、内部类可以引用他包含类的成员吗?有没有什么限制?

    87360

    【设计模式】工厂方法模式

    《 另外,简单总结一下简单工厂,其实就是将复杂的创建对象的流程封装到一个类中,我们称之为工厂,然后由该工厂实现对象的创建,从而将对象创建和对象使用分割开来。...当需要创建新一类对象时,我们需要修改原来的工厂类(注意,这里不是创建新对象,是需要创建新一类对象,就比如原来可以创造A类对象,现在需要创造B类对象,就必须要修改工厂类)。...那有什么办法可以解决吗,没错,就是我们的工厂方法模式。 工厂方法模式 现在总结下我们的需求 可以动态增加创建对象的类别 不需要修改原工厂类 这时候你有没有什么解决方法?...那想一下,为什么要满足里氏代换呢,也就是父类可以直接引用子类,然后直接使用子类的功能呢?...如果你现在需要创建多个对象,并且多个对象的具体实现并不相同,基于创建的对象还要执行相同的操作,可以采用该模式,这样可以保证你后期维护时,只需要添加工厂对象和产品对象,并不需要修改原有的逻辑,以免出现问题

    6100

    Kotlin学习日志(五)类与对象

    1.3 带默认参数的构造函数 说到默认参数,不知道你有没有想起之前的带默认参数的函数呢?...其实很简单,open不控制某个对象的访问权限,只决定该对象能否繁衍开来,说白了,就是公告这个叼毛有没有资格繁衍下一代,只有头戴open帽子的类,才允许作为基类派生出子类来,而头戴open帽子的函数,表示它允许在子类中进行重写...,如果没戴open帽子,该类就只好打光棍了,函数没戴open帽子的话,类的孩子就没有办法修改它。...四、特殊类 4.1 嵌套类 一个类可以在单独的代码文件中定义,也可以在另一个类内部定义,后一种情况叫作嵌套类,即A类嵌套在B类之中,听起来和Java的嵌套类是一样的,但其实有所差别,Java的嵌套类允许访问外部类的成员...4.2 内部类 Kotlin限制了嵌套类不能访问外部类的成员,那还有什么方法可以实现此功能呢?

    1.2K20

    SpringMVC结合设计模式:解决MyBatisPlus传递嵌套JSON数据的难题

    引出 我们经常会遇到需要传递对象的场景。有时候,我们需要将一个对象的数据传递给另一个对象进行处理,但是又不希望直接暴露对象的内部结构和实现细节。这时,我们可以使用模板模式来实现优雅的对象传递。...为了实现这个场景,我们可以使用模板模式。 模板模式是一种行为设计模式,它定义了一个抽象类或接口作为模板,其中包含了一个或多个抽象方法,用于定义算法的骨架。...具体的子类可以根据需要实现这些抽象方法,从而完成算法的定制化。...还有很多...各种嵌套 于是我想 有没有一种办法能规定好所有的嵌套方法的逻辑 然后他们只需要说明自己是什么类型 就能套进去?...和sql语句 也能轻松查询嵌套的复杂的JSON数据啦 实现效果 这样就形成了复杂的嵌套的数据的自动构造

    22810

    Kotlin中级(9)- - - Kotlin类之数据类、密封类、内部类.md

    Int) 2.数据类声明条件 主构造函数最少要有一个参数 数据类的主构造器的所有参数必须标记为val或var 数据类不能是抽象类、open类、封闭类、内部类 数据类不能继承自任何其他类(但可以实现接口)...(Koltin要修改数据类的属性,则使用其独有的copy()函数。其作用就是:修改部分属性,但是保持其他不变) 密封类 1....但是,其密封类的子类的扩展是是可以在程序中任何位置的,即可以不在同一文件下 2.声明 sealed class SealedExpr() 内部类(嵌套类) 在实际开发中,用到内部类的地方是很多的。...().嵌套类方法/属性 } 注意 调用嵌套类的属性或者方法格式为: 外部类.嵌套类().嵌套类方法/属性。...从声明类上看,继承的两个类单独声明,子类通过(子类:父类)继承父类,而内部类必须声明在外部类里面,并且用关键字inner标记 从访问上看,继承的父类不能直接访问子类,外部类可以通过“外部类().内部类

    1.2K20

    常见代码重构技巧(非常实用)

    子类可以扩展父类的功能,但不能改变父类原有的功能 父类中凡是已经实现好的方法(相对于抽象方法而言),实际上是在设定一系列的规范和契约,虽然它不强制要求所有的子类必须遵从这些契约,但是如果子类对这些非抽象方法任意修改...与方法调用不同的是,继承打破了封装性。子类依赖于其父类中特定功能的实现细节,如果父类的实现随着发行版本的不同而变化,子类可能会遭到破坏,即使他的代码完全没有改变。...自从Java8为接口增加缺省方法(default method),这两种机制都允许为实例方法提供实现。主要区别在于,为了实现由抽象类定义的类型,类必须称为抽象类的一个子类。...因为这些默认方法是被注入到现有实现中的,它们的实现者并不知道,也没有许可 接口缺省方法的设计目的和优势在于: 为了接口的演化 Java 8 之前我们知道,一个接口的所有方法其子类必须实现(当然,这个子类不是一个抽象类...不提供任何会修改对象状态的方法 保证类不会被扩展(防止子类化,类声明为final) 防止粗心或者恶意的子类假装对象的状态已经改变,从而破坏该类的不可变行为 确保对任何可变组件的互斥访问 如果类具有指向可变对象的域

    64910

    常见代码重构技巧(非常实用)

    数据泥团/基本类型偏执 两个类、方法签名中包含相同的字段或参数 应该使用类但使用基本类型,比如表示数值与币种的Money类、起始值与结束值的Range类 不合理的继承体系 继承打破了封装性,子类依赖其父类中特定功能的实现细节...子类可以扩展父类的功能,但不能改变父类原有的功能 父类中凡是已经实现好的方法(相对于抽象方法而言),实际上是在设定一系列的规范和契约,虽然它不强制要求所有的子类必须遵从这些契约,但是如果子类对这些非抽象方法任意修改...与方法调用不同的是,继承打破了封装性。子类依赖于其父类中特定功能的实现细节,如果父类的实现随着发行版本的不同而变化,子类可能会遭到破坏,即使他的代码完全没有改变。...自从Java8为接口增加缺省方法(default method),这两种机制都允许为实例方法提供实现。主要区别在于,为了实现由抽象类定义的类型,类必须称为抽象类的一个子类。...因为这些默认方法是被注入到现有实现中的,它们的实现者并不知道,也没有许可 接口缺省方法的设计目的和优势在于: 为了接口的演化 Java 8 之前我们知道,一个接口的所有方法其子类必须实现(当然,这个子类不是一个抽象类

    88520

    读书笔记 | 类的使用 | Effective Java 3

    图形的父类定义核心计算面积的抽象方法,交由具体的子类实现 子类差异化实现,业务对标签的强管控转化为业务使用具体的子类 子类和子类之间的运算逻辑互相独立,业务关注自身使用的子类即可,不会导致类文件膨胀 子类的相似实现也会更加灵活...,可以通过子类继承子类来实现,如正方形的面积计算就可以继承矩形,长和宽都传入正方形的边长即可 // Class hierarchy replacement for a tagged class abstract...尽管句法相似,但这两种嵌套类是非常不同的。 非静态成员类的每个实例都隐含地与其包含的类的宿主实例相关联。...如果嵌套类的实例可以与其宿主类的实例隔离存在,那么嵌套类必须是静态成员类:不可能在没有宿主实例的情况下创建非静态成员类的实例。...非静态成员类实例和其宿主实例之间的关联是在创建成员类实例时建立的,并且之后不能被修改。通常情况下,通过在宿主类的实例方法中调用非静态成员类构造方法来自动建立关联。

    38620
    领券