随笔分类 - PHP
摘要:一、使用视图的理由是什么?1.安全性。一般是这样做的:创建一个视图,定义好该视图所操作的数据。之后将用户权限与视图绑定。这样的方式是使用到了一个特性:grant语句可以针对视图进行授予权限。2.查询性能提高。3.有灵活性的功能需求后,需要改动表的结构而导致工作量比较大。那么可以使用虚拟表的形式达到少
阅读全文
摘要:我们先做个测试: 接上篇日志建的商品表g和订单表o和触发器 假设:假设商品表有商品1,数量是10; 我们往订单表插入一条记录: insert into o(gid,much) values(1,20); 会发现商品1的数量变为-10了。这就是问题的所在,因为我们之前创建的触发器是after,也就是说触发的语句是在插入订单记录之后才执行的,这样我们就无法判断新插入订单的购买数量。 ...
阅读全文
摘要:触发器(trigger):监视某种情况,并触发某种操作。 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 语法: create trigger triggerName after/before insert/update/dele...
阅读全文
摘要:一,什么触发器 1,个人理解触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了。你放炮仗,点燃了,一会就炸了。2,官方定义触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一
阅读全文
摘要:由于数据库查询的及插入的操作 耗费的实际时间要耗费比redis 要多, 导致 多人查询时库存有,但是实际插入数据库时却超卖 redis 会有效的减少相关的延时,对于并发量相对较少的 可以一用
阅读全文
摘要:抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。 重点在于第二个问题 常规写法: 查询出对应商品的库存,看是否
阅读全文
摘要:对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了 在PHP语言中并没有原生的提供并发的解决方案,因此就需要借助其他方式来实现并发控制。 方案一:使用文件锁排它锁 flock函数用于获取文件的锁,这个锁同时只能被一个线程获取到,其它没有获取到锁的线程要么阻塞,要么获
阅读全文
摘要:观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。 场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的
阅读全文
摘要:原创文章,转载请注明出处:http://www.cnblogs.com/hongfei/archive/2012/07/07/2580776.html 简单工厂模式: ①抽象基类:类中定义抽象一些方法,用以在子类中实现 ②继承自抽象基类的子类:实现基类中的抽象方法 ③工厂类:用以实例化对象 看完文章再回头来看下这张图,效果会比较好 1 采用封装方式 2 3 getMessag...
阅读全文
摘要:单例模式(职责模式): 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务; 单例类: 1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化; 2、拥有一个保存类的实例的静态成员变量 3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例...
阅读全文
摘要:介绍 策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 封装:把行为用接口封装起来,我们可以把那些经常变化的部分,从当前的类中单独取出来,用接口进行单独的封装。 互相替换:我们封装好了接口,通过指定不同的接口实现类进行算法的变化。 思维导图 php策略模式-鸭子游戏 我来解释下这个思维导图的过程: 1.Joe做了一套相当成功的模拟鸭...
阅读全文
摘要:程序运行输出: 一般的迭代器内部需要下面的方法: Iterator::current — Return the current element 返回当前元素 Iterator::key — Return the key of the current element 返回当前元素的键 Iterator
阅读全文
摘要:概念 迭代器模式(Iterator),又叫做游标(Cursor)模式。提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。 当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。
阅读全文
摘要:1.类中的常量,可以用类来引用: class MyClass() { const SUCCESS ="success"; const FAIL ="fail"; } print_r(MyClass::SUCCESS); 静态方法: 你不用实例化就可以使用它,不支持$this变量,因为他们没有绑定到任
阅读全文
摘要:接口 使用接口,你可以指定某个类必须实现那些方法,但是不需要定义这些方法的具体内容,我们可以通过interface来定义一个接口,就像定义标准类一样,但其中定义所有的方法都是空的,接口中定义的所有的方法都必须是public 实现一个接口,可以使用implement操作符,类中必须实现接口中定义的所用的方法,如果实现多个接口,可以用逗号来分割多个接口的名称 注意 实现多个接口时,接口...
阅读全文
摘要:final 用于类、方法前。 final类 不可被继承。 final方法 不可被覆盖。 final类不能被继承。 如果我们不希望一个类被继承,我们使用final来修饰这个类。这个类将无法被继承。比如我们设定的Math类,涉及了我们要做的数学计算方法,这些算法也没有必要修改,也没有必要被继承,我们把它
阅读全文
摘要:PHP5的另一个新成员是instdnceof关键字。使用这个关键字可以确定一个对象是类的实例、类的子类,还是实现了某个特定接口,并进行相应的操作。在某些情况下,我们希望确定某个类是否特定的类型,或者是否实现了特定的接口。instanceof操作符非常适合完成这个任务。instanceof操作符检查三
阅读全文
摘要:对于PHP程序员来说,最为难掌握的一点要数PHP抽象类应用这一块知识点。作为一个新手其实也还没有到要用面向对象的知识去编程,但以后进行开发,使用类进行封装或者使用接口之类,把程序进行各种模块式的开发,这当然是必然的。 在自然语言中,我们理解抽象的概念是,一个物体的一种大的描述,这种描述对某类物体来说
阅读全文
摘要:1、abstract class 抽象类 抽象类的定义: 1、类中至少有一个抽象方法 2、抽象方法不允许有{ } 3、抽象方法前面必须要加abstract 抽象类的使用必须同时满足以下2个条件: 1.只能在被继承的时候; 2.所有的抽象方法必须重载使用。 抽象类例子: abstract class
阅读全文
摘要:1、接口的定义: 接口:一种成员属性为抽象的特殊抽象类,在程序中同为规范的作用2、其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这 个时候PHP接口类interface就起到作用了,当我们定义了一个接口类
阅读全文