自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(174)
  • 资源 (1)
  • 收藏
  • 关注

原创 php5对象的浅复制与深复制

本文实例讲述了php5对象复制、clone、浅复制与深复制。分享给大家供大家参考,具体如下:对象复制的由来为什么对象会有“复制”这个概念,这与PHP5中对象的传值方式是密切相关的,让我们看看下面这段简单的代码PHP代码/*** 电视机类*/class Television{ /** 屏幕高度 */ protected $_screenLength = 300; /** 屏幕宽度 */ protected $_screenHight = 200; /

2021-04-09 15:08:00 216

原创 你现在还用 if/else 走天下?不妨试试这几种改进方法

想当年,其实我也特别钟情于 if/else连环写法,上来就是一顿SAO操作,比如举个好理解的简单栗子:一般来说我们正常的后台管理系统都有所谓的角色的概念,不同管理员权限不一样,能够行使的操作也不一样,比如:系统管理员( ROLE_ROOT_ADMIN):有 A操作权限订单管理员( ROLE_ORDER_ADMIN):有 B操作权限普通用户( ROLE_NORMAL):有 C操作权限比如一个用户进来,我们需要根据不同用户的角色来判断其有哪些行为,这时候SAO代码出现了:public class

2021-04-09 15:01:10 174

原创 工厂模式

工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。本文从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和利弊。1. 简单工厂模式该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象,其UML类图如下:下面我们使用手机生产来讲解该模式:Phone类:手机标准规范类(Abs

2021-04-09 14:54:37 161

原创 装饰者模式

装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。优点:装饰者模式比继承灵活性,在不改变原有对象的情况下给对象扩展功能,符合开闭原则。继承关系是静态的,在编译的时候就已经决定了行为,不便于控制增加行为的方式和时机。装饰者模式可以动态使用不同的装饰类排列组合,创造出多样的行为

2021-03-17 17:35:39 127

原创 抽象工厂模式详解 —— head first 设计模式

项目实例假设你有一家 pizza 店,你有很多种 pizza,要在系统中显示你所有 pizza 种类。实现这个功能并不难,使用普通方式实现:public class PizzaStore { Pizza orderPizza(String type) {   Pizza pizza = null;   if (type.equals("cheese")) {     pizza = new CheesePizza();   } else if (type

2021-03-17 15:23:08 173

原创 代理模式

代理模式概述代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过

2021-03-17 14:43:47 97 1

原创 深入理解 Java 动态代理机制

Java 有两种代理方式,一种是静态代理,另一种是动态代理。对于静态代理,其实就是通过依赖注入,对对象进行封装,不让外部知道实现的细节。很多 API 就是通过这种形式来封装的。代理模式结构图(图片来自《大话设计模式》)下面看下两者在概念上的解释:静态代理静态代理类:由程序员创建或者由第三方工具生成,再进行编译;在程序运行之前,代理类的.class文件已经存在了。静态代理类通常只代理一个类。静态代理事先知道要代理的是什么。动态代理动态代理类:在程序运行时,通过反射机制动态

2021-03-17 14:41:03 123

原创 中介者模式

中介者模式概述中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须告诉其他所有的朋友修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“

2021-03-15 17:55:05 79

原创 桥接模式

设计模式文章桥接模式中介者模式代理模式抽象工厂模式详解 —— head first 设计模式装饰者模式适配器模式策略模式观察者模式建造者模式 (Builder)概述在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和功

2021-03-11 16:28:55 95

原创 设计模式六大原则详解

文章目录设计模式六大原则,具体如下:`单一职责原则的定义(类、方法、接口)`单一职责原则的优点单一职责原则的实现方法示例`开闭原则` (扩展开放,修改关闭)实例`里氏替换原则` (基类和子类之间的关系)里氏替换原则的作用里氏替换原则的实现方法(继承)`依赖倒置` (依赖抽象接口,而不是具体对象)依赖、倒置原则的作用依赖倒置原则的实现方法`接口隔离原则`(接口按照功能细分)接口隔离原则的优点接口隔离原则的实现方法`迪米特法则` (类与类之间的关系)迪米特法则的优点迪米特法则的实现方法设计模式六大原则,具体如

2021-03-11 16:06:40 411

原创 策略模式和工厂模式搭配使用

策略模式和工厂模式的搭配使用可以很好地消除代码if-else的多层嵌套需求针对店下商铺,有这样一个需求,对用户客户分为了普通客户、vip客户、超级vip用户、专属vip用户4个等级,每当用户购买商品时,针对不同的用户等级和消费金额采取不同的打折优惠策略。在平常的开发当中,必然会出现多层的if-else嵌套判断,先判断用户的等级再判断用户购买商品的消费金额。弊端以上的情况出现了多层的if-else嵌套,除此之外,以后如果需求再有变动,需要再增加一个用户等级,那么又会再次添加if-else的嵌套判断.

2021-03-05 10:07:31 118 1

原创 策略模式和工厂模式的区别

文章目录策略模式和工厂模式的区别相似点差异用途不一样关注点不一样解决不同的问题举例说明策略模式和工厂模式的区别相似点在模式结构上,两者很相似;差异用途不一样工厂是创建型模式,它的作用就是创建对象;策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为;关注点不一样一个关注对象创建一个关注行为的封装解决不同的问题工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用

2021-03-05 09:54:41 1700 2

原创 mysql 幻读的详解、实例及解决办法

事务隔离级别(tx_isolation)mysql 有四级事务隔离级别 每个级别都有字符或数字编号级别symbol值描述读未提交READ-UNCOMMITTED0存在脏读、不可重复读、幻读的问题读已提交READ-COMMITTED1解决脏读的问题,存在不可重复读、幻读的问题可重复读REPEATABLE-READ2mysql 默认级别,解决脏读、不可重复读的问题,存在幻读的问题。使用 MMVC机制 实现可重复读序列化SERIALIZABLE

2021-02-20 16:00:22 329

原创 MySQL详解--锁(三)

InnoDB在不同隔离级别下的一致性读及锁的差异前面讲过,锁和多版本数据是InnoDB实现一致性读和ISO/ANSI SQL92隔离级别的手段,因此,在不同的隔离级别下,InnoDB处理SQL时采用的一致性读策略和需要的锁是不同的。同时,数据恢复和复制机制的特点,也对一些SQL的一致性读策略和锁策略有很大影响。将这些特性归纳成如表20-16所示的内容,以便读者查阅。表20-16 InnoDB存储引擎中不同SQL在不同隔...

2020-11-19 15:10:55 148

原创 MySQL详解--锁(二)

InnoDB行锁实现方式InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!在实际应用中,要特别注意InnoDB行锁的这一特性,不然的话,可能导致大量的锁冲突,从而影响并发性能。下面通过一些实际例子来加以说明。(1)在不通过索引条件查询的时候,InnoDB确实使用的是表锁,而不是行锁。在如表20

2020-11-19 15:10:19 144

原创 MySQL详解--锁(一)

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。本章我们着重讨论MySQL锁机制的特点,常见的锁问题,以及解决MySQL锁问题的一些方法或建议。MySQL锁概述相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是

2020-11-19 15:09:16 84

原创 事务的一致性和原子性

其实我认为一致性是为了使计算机模拟的虚拟世界更加贴近我们的现实世界而提出来的。我们来考虑这样的一个场景:你买一瓶可乐,然后倒了100ml到杯子里面。那么你的杯子里面必然是从原来一滴可乐都没的状态变成装有100ml可乐的状态,而你的可乐瓶子里面必然是少了100ml可乐。这是毋庸置疑的,因为在自然界中,我们必须遵循“质量守恒定律”。我们再考虑一个场景:你上班挤地铁的时候,口袋里装了1000块现金,不料被小偷偷了300块钱。那么你将损失了300,而小偷收入300,这是必然的。在我们的生活中还有很多这样的例子

2020-11-19 10:03:37 329

原创 电商系统架构全链路解析

1、电商系统可能是世界上最复杂的业务系统说个有意思的小事,和一位PM同行聊工作,问我电商做的如何,我说并不是一件易事。对方哈哈一笑,说电商不就那么回事吗,有啥难的,是个PM都能做,我嘿嘿一笑,不作辩解。光说中国电商,发展至今已有20多年的历史,且一直处于高速的发展和竞争当中,时至今日,都不可妄语尘埃落定,对于大型公司来说,电商仅为销售渠道之一,而在此基础上衍生出来的研、产、供、销、服整套的信息系统体系,才是支撑其运作的核心。当你从销售或是用户这个点来看电商,会觉得无比简单,而当你从整个体系的面来看电

2020-07-15 17:36:15 1618

原创 MySQL---DDL语句、DML语句与DCL语句

SQL 分类:SQL 语句主要可以划分为以下 3 个类别。DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和select 等。(增添改查

2020-07-15 17:28:17 161

原创 理解MySQL insert into ... select 的锁情况

摘要: 一直以为"insert into tb select * from tbx" 这样的导入操作是会把tbx表给锁住的,在锁期间是不允许任何操作(保证一致性)。看完这篇写的之后,发现tbx表是会被锁住,但这个锁有2种情况,现在逐一进行分析:分析环境:[email protected] : test 02:10:40>select @@global.tx_isolation,@@session.tx_isolation;+-----------------------+-----...

2020-07-15 17:19:04 301

原创 深入理解:str_replace & strtr

$search = [ 'xyz', '123' ]; $replace = [ '123', '@@@' ];//$str = '#xyz123#';//循环替换$ret1 = str_replace($search, $replace, $str); //#@@@@@@#//对位元素替换$ret2 = strtr($str, ['xyz' => '123', '123' => '@@@']); //#123@@@#//按 char 位替换

2020-07-03 15:51:35 157

原创 IoC基础

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器

2020-06-30 11:42:06 150

原创 表结构:第三方登录用户

CREATE TABLE `__PREFIX__third` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '会员ID', `platform` varchar(30) NOT NULL DEFAULT '' COMMENT '第三方应用', `openid` varchar(50) NOT NULL D

2020-06-24 11:38:15 219

原创 数据库表设计-第三方登录用户表结构设计

说起用户表,大概是每个应用/网站立项动工(码农们)考虑的第一件事情。用户表结构的设计,算是整个后台架构的基石。如果基石不稳,待到后面需求跟进了发现不能应付,回过头来反复修改用户表,要大大小小作改动的地方也不少。与其如此,不妨设计用户表之初就考虑可拓展性,争取不需要太多额外代价的情况下一步到位。先前设计idusernamepassword用户名加上密码,解决简单需求,留个id作为其他表的外键。当然,那时候密码还可能是明文存储,好点的知道md5。后来呢,随着业务需求的拓展,要加个用户状态 st

2020-06-24 11:37:13 1889

原创 Oauth2的授权码模式为什么要用code获取token?而非回跳时直接返回token呢

为什么oauth2中的授权码模式 在获取token之前非要先到资源服务器获取一个code 然后才使用资源服务器的code去资源服务器去申请token?而不能在回跳时直接返回token呢?首先,从产品交互上,我们需要浏览器跳转到“认证服务器”,让用户明确表态同不同意“第三方站点”的授权请求。这个时候,浏览器访问的地址已经到“认证服务器”去了,不跳转回来的话,网页不在“第三方站点”的控制中,怎么进行授权成功后的下一步交互呢?授权码模式的安全考量,是基于产品交互能完成的前提下,考虑如何不在浏览器这种暴露 url

2020-06-24 11:30:27 3006 2

原创 php缓冲机制及嵌套级别 ob_get_level

ob_get_level(void):int返回嵌套的输出缓冲处理程序的级别;或者是,如果输出缓冲区不起作用,返回零。php.ini中配置缓冲在php的配置文件php.ini中有以下这项配置 output_buffering ,php.ini默认设置了output_buffering = 4096,php已经设置了一个缓冲区。如果php.ini 中打开了此项: echo,print 后的输出顺序就是-> php output_buffring -> server buffering

2020-05-28 14:07:22 966 1

原创 探究PHP中new self()和new static()的区别

1.new static()是在PHP5.3版本中引入的新特性。2.无论是new static()还是new self(),都是new了一个新的对象。3.这两个方法new出来的对象有什么区别呢,说白了就是new出来的到底是同一个类实例还是不同的类实例呢?为了探究上面的问题,我们先上一段简单的代码:1.new static()是在PHP5.3版本中引入的新特性。2.无论是new static()还是new self(),都是new了一个新的对象。3.这两个方法new出来的对象有什么区别呢,说白

2020-05-14 16:36:28 179

原创 Closure::bind && Closure::bindTo

Closure::bindClosure::bind — 复制一个闭包,绑定指定的$this对象和类作用域。其实后半句表述很不清楚。 我的理解: 把一个闭包转换为某个类的方法(只是这个方法不需要通过对象调用), 这样闭包中的$this、static、self就转换成了对应的对象或类。创建并返回一个 匿名函数, 它与当前对象的函数体相同、绑定了同样变量,但可以绑定不同的对象,也可以绑定新的类作用域。从我个人理解,和js里面的call函数有点类似。可以改变闭包对象指定的作用域。简单说,就是把闭包当成

2020-05-14 10:18:23 166

原创 php 内置的 web 服务器 php -s

从 PHP 5.4.0 起,PHP内置了Web服务器,这对于认为需要Apache或Nginx才能预览PHP应用的开发者来说又是一个隐藏功能。这个内置的Web服务器不应该用于生产环境,但对于本地开发来说是个极好的工具。Laravel Valet 起初就是使用这个内置的服务器,但是在1.1.0版本后将其替换为Caddy(查看相关新闻)。1、启动这个内置的Web服务器很容易启动,打开终端(Windows下对应是cmd命令行),进入项目根目录,执行如下命令即可:php -S localhost:8000 #

2020-05-14 10:13:31 393

原创 php 魔术方法

php 的一大特色应该就是以两个 __ 开头的魔术方法了。魔术方法有 这些,虽然很多魔术方法一般都没有什么机会碰到但是有时候研究源代码的时候碰到了会楞__construct__destruct__call__callStatic__get__set__isset__unset__toString__invoke__clone__awake__sleep__set_state__debugInfoconstruct毫无疑问调用频率最高的魔术方法。该方

2020-05-14 10:12:29 138

原创 php 数组高级函数

php 数组高级函数数组高级函数PHP 中数组的高级函数可以优雅地解决不少问题 可惜 php.net 上面的文档实在是云里雾里,要理解很久(至少对初学者)不如直接举个非常直白的栗子 最本能的遍历实现我们一般都通过 foreach 实现:假设我们现在有一个文件名的数组<?php$filenames = [ 'man', 'woman', '李凌飞',];但是这一堆文件可能有很多种存储格式 .sql, .md, .json, .xml …假设现在的

2020-05-14 10:11:35 217

原创 PHP foreach原理详解

当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。如果移动指针的结果超出了数组单元的末端,则退出循环。例子:$array = [ 'name' => 'Jobs', 'age' => 50,];foreach ($array as $key => $value) { $value = 22; //赋值,但是没有影响到$array[$key]位置的值,除非加上 $array[$key] = $value;}上面的foreach

2020-05-14 10:09:17 374

原创 理解回调函数

回调函数Callback(即call then back)被主函数调用后执行其他操作,然后再返回主函数的函数,称之这个被调用的函数为主函数的回调函数。通俗的来说,回调函数是一个我们定义的函数,但是不是我们直接来调用,而是通过另一个函数来调用,这个函数通过接收回调函数的名字和参数来实现对它的调用。就是把函数作为参数传入进另一个函数中使用,被作为参数的函数称之为调用者的回调函数;PHP的回调函数其实和C、Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数

2020-05-14 10:07:37 102

原创 var_export 与 var_dump的不同

var_export & var_dump 不同var_dump – 输出var_export – 输出或返回一个变量的字符串表示此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。比较比较:var_dump 直接输出,如果 var_export,不设置第2个参数为true的话,也是直接输出,输出和var_dump差不多;但是如果 var_export 第2个参数设置为true的话,就不会输出了,而是返回

2020-05-14 10:06:38 213

原创 前端提交大量数组至PHP后台,后台接受数据会被截断

默认值php接受接受1000个元素,解决办法:修改php.ini中的max_input_vars ,表单提交数据上限

2020-05-12 11:10:58 431

原创 Nginx下出现Access denied (403) see security.limit_extensions错误的解决方法

采用nginx+php作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单,是需要动态执行php脚本。本文的主要内容为如何在nginx server中正确配置php调用方法,以及配置的基本原理。知道了配置和基本原理后,我们也就知道了他们之间是怎么通信的。一、普及N...

2020-05-09 17:42:33 742

原创 【Vagrant】网络模式: host-only & NAT & 桥接

基本上,Host-only相当于虚拟机和宿主机通过交叉线相连;NAT,宿主机相当于虚拟机的路由器;桥接,相当于把宿主机和虚拟机同时接到交换机上,然后交换机接到外网。连接性上说,可参考下表:连接 宿主机和虚拟机 虚拟机对外网访问 外网对虚拟机访问 Host-only 可以互访 不能直接访问 不能直接访问 NAT 虚拟机可访问宿主机 ...

2020-05-09 17:40:00 1383

原创 curl请求,服务器接受curl发送的数据

模拟一个服务器(Client)向另外一个服务器(Serve)发送数据,另外一个服务器接受数据1. 本地起一个PHP服务(服务器一)php -S 192.168.0.102:8888 C:\Users\laozhongyi\Desktop\phpService.php或者写一个bat ,名为 phpService.bat:: php 启动一个web服务:: 192.168.0.102 ...

2020-05-08 10:32:43 1279

原创 理解:同步、异步、阻塞与非阻塞

四、同步、异步、阻塞与非阻塞4.1、引言近来遇到了一些常见的概念,尤其是网络编程方面的概念,如:阻塞、非阻塞、异步I/O等等,对于这些概念自己也没有太清晰的认识,只是很模糊的概念,说了解吧也了解,但是要让自己准确的描述概念方面的具体细节,却说的不那么准确,这也是自己在这几个方面也没有细细考究过的原因吧。经过看了些这几个概念的资料,发现同步、异步、阻塞、非阻塞的概念其实也并不难以理解,在此写...

2020-05-08 10:32:10 196

原创 PHP 的 CGI、FastCGI、PHP-FPM

一、案例分析1.1、分析当 Web Server 收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是 PHP 的解析器。接下来 PHP 解析器会解析 php.ini 文件,初始化执行环境,然后处理请求,再以规定 CGI 规定的格式返回处理后的结果,退出进程,Web server 再把结果返回给浏览器。这就是一个完整的动态 PHP Web 访问流程,接下来再引...

2020-05-08 10:31:35 143

giiGenerators.rar

使用Gii生产Model时,我们顺便强制一起生成对应的ar文件,我们为了不修改原来的框架的文件,我们自定义生成器。Yii生成表model时,强制自动生成AR

2020-05-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除