php Chain of Responsibility 职责链模式
比如一颗原子弹投下的瞬间,在杀伤范围内的部队或者建筑都会减少血,但是随着距离中心点的远近,受损程度是不同的,而且不同的兵种和建筑受损情况是不同的。
待解决的问题:原子弹投下的瞬间,将杀伤的处理分别交给杀伤范围内的部队或者建筑自己的方法处理。
思路:建立一个接口,让所有的部队或者建筑实现。
职责链模式(Chain of Responsibility)示例:
代码如下 | 复制代码 |
<?php //被原子弹攻击的接口 interface NuclearAttacked { //处理被原子弹攻击的方法,参数为投放点的x和y坐标 public function NuclearAttacked($x, $y); } //人族的基地,实现被原子弹攻击的接口,其他的内容暂时不考虑 class CommandCenter implements NuclearAttacked { //处理被原子弹攻击的方法,参数为投放点的x和y坐标 public function NuclearAttacked($x, $y) { //根据离原子弹中心的距离,定义减少的血,如果超出了剩余的血,就炸掉 } } //巡洋舰(俗称大和),实现被原子弹攻击的接口,其他的内容暂时不考虑 class Battlecruiser implements NuclearAttacked { //处理被原子弹攻击的方法,参数为投放点的x和y坐标 public function NuclearAttacked($x, $y) { //根据离原子弹中心的距离,定义减少的血,如果超出了剩余的血,就炸掉 } } //原子弹类 class Nuclear { //被原子弹攻击的对象 public $attackedThings; //添加被原子弹攻击的对象 public function addAttackedThings($thing) { //添加被原子弹攻击的对象 $this->attackedThings[] = $thing; } //原子弹爆炸的方法,参数为投放点的x和y坐标 public function blast($x, $y) { //把爆炸的事情交给所有涉及的对象,让他们自己处理 foreach ($this->attackedThings as $thing) { //把爆炸的事情交给所有涉及的对象,让他们自己处理 $thing->NuclearAttacked($x, $y); } } } //新建一个基地对象 $CommandCenter = new CommandCenter(); //新建一个巡洋舰对象 $Battlecruiser = new Battlecruiser(); //造了一颗原子弹 $Nuclear2 = new Nuclear(); //假设投放成功,那个瞬间一个基地对象和一个巡洋舰对象在杀伤范围内 $Nuclear2->addAttackedThings($CommandCenter); $Nuclear2->addAttackedThings($Battlecruiser); //原子弹爆炸,这样就把这个事件交给那些涉及的对象的处理方法,假设投放点的x和y坐标是2353, 368 $Nuclear2->blast(2353, 368); ?> |
用途总结:职责链模式可以将一个涉及到多个对象的事件的处理交给对象自己处理,减少关联性。
最近在开发站群软件,用到了根据访问域名判断子站点的相关问题。PHP获取当前域名有两个变量 HTTP_HOST 和 SERVER_NAME,我想知道两者的区别以及哪个更加可靠先我想说,百度上那些转来转去的文章都是扯淡!
有说相同的,有说不同的,都没说明原因,没经过验证就互相转来转去的,浪费观众时间。
下面说说本人经过亲自验证 + 查阅官方文档 + 官方BUG列表 + 官方邮件列表 + sitepoint + webmasterworld + google的总结:
相同点:
当满足以下三个条件时,两者会输出相同信息。
1. 服务器为80端口
2. apache的conf中ServerName设置正确
3. HTTP/1.1协议规范
不同点:
1. 通常情况:
_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。
_SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。
2. 当服务器为非80端口时:
_SERVER["HTTP_HOST"] 会输出端口号,例如:111cn.net:8080
_SERVER["SERVER_NAME"] 会直接输出ServerName值
因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT
3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:
httpd.conf配置如下:
代码如下 | 复制代码 |
<virtualhost *> |
所以,在实际程序中,应尽量使用_SERVER["HTTP_HOST"] ,比较保险和可靠。
在php中获取图片大小我们可以使用getimagesize函数,这个函数是用于获取图像的尺寸的函数,下面我们一起来看例子。利用getimagesize函数就可以获取
代码如下 | 复制代码 |
/* */ $url='/images/201203/08/1331189004_28093400.jpg'; ( ) |
利用我们获取的宽度与高度我们对图片进行设置
代码如下 | 复制代码 |
<?php/* 1.jpg为你想获得其尺寸的图片 */ |
前几天到贴吧晒度娘收录的时候
我晒了一幅图
有吧友问我:
文章上面的"百度已收录(仅管理员可见)"是怎么实现的
只要在主题的function.php里添加以下代码就可以实现啦~
例子。
代码如下 | 复制代码 |
function d4v($url){ |
php中有一个不为很多人所用的超全局变量$GLOBALS。合理使用这个变量能使工作变得更加有效率,本篇文章主要分析一下这个超全局变量的用法以及$GLOBALS和global的区别。
$GLOBALS定义:引用全局作用域中可用的全部变量(一个包含了全部变量的全局组合数组。变量的名字就是数组的键),与所有其他超全局变量不同,$GLOBALS在PHP代码中任何地方总是可用的,自己可以通过打印$GLOBALS这个变量的结果就知道了。
global与$GLOBALS['']区别
$GLOBALS
$GLOBALS — 引用全局作用域中可用的全部变量
说明 ¶
一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
在PHP生命周期中,定义在函数体外部的所谓全局变量,函数内部是不能直接获得的。如果要在函数体内访问外部定义的全局变量,可以通过global声明或者直接使用$GLOBALS来进行访问,例如:
<?php
$var1='www.111cn.net';
$var2='www.google.cn';
test();
function test(){
$var1='taobao';
echo $var1,'<br />';
global $var1;
echo $var1,'<br />';
echo $GLOBALS['var2'];
}
结果将打印为:
taobao
www.111cn.net
www.google.cn
下面主要说明一下global和$GLOBALS的区别:
$GLOBALS['var']是外部的全局变量本身,而global $var是外部$var的同名引用或者指针,也就是说global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量,而$GLOBALS[]确确实实调用的是外部的变量,函数内外会始终保持一致。
下面通过例子说明一下:
$var1=1;
$var2=2;
function test(){
$GLOBALS['var2']=&$GLOBALS['var1'];
}
test();
echo $var2;
打印结果为1
$var1=1;
$var2=2;
function test(){
global $var1,$var2;
$var2=&$var1;
}
test();
echo $var2;
打印结果为2。为什么会打印结果为2呢?其实就是因为$var1的引用指向了$var2的引用地址。导致实质的值没有改变。我们再来看一个例子吧。
$var1=1;
function test(){
unset($GLOBALS['var1']);
}
test();
echo $var1;
因为$var1被删除了,所以什么东西都没有打印。
$var1=1;
function test(){
global $var1;
unset($var1);
}
test();
echo $var1;
打印结果为1。证明删除的只是别名|引用,起本身的值没有受到任何的改变。也就是说global $var其实就是$var=&$GLOBALS['var']。调用外部变量的一个别名而已。
相关文章
python-for x in range的用法(注意要点、细节)
这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10- 这篇文章主要介绍了gin 获取post请求的json body操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-15
- 这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
- PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
- 这篇文章主要为大家介绍了JavaScript设计模式中的装饰者模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
- 神马是“解释器模式”?先翻开《GOF》看看Definition:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如...2014-06-07
- 这篇文章主要介绍了Postgresl 如何选择正确的关闭模式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-18
- phpmyadmin config.inc.php配置示例...2013-09-29
- index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
- 很多集成的PHP环境(PHPnow WAMP Appserv等)自带的MySQL貌似都没有开启MySQL的严格模式,何为MySQL的严格模式,简单来说就是MySQL自身对数据进行严格的校验(格式、长度、类型等),比如一个整型字段我们写入一个字符串类型的数...2013-10-04
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04vue-admin-template配置快捷导航的代码(标签导航栏)
这篇文章主要介绍了vue-admin-template配置快捷导航的方法(标签导航栏),本文通过实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-04- 这篇文章主要介绍了Javascript for in的缺陷总结的相关资料,需要的朋友可以参考下...2017-02-08
- 这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
- 这篇文章主要介绍了Mybatis plus中使用in查询出错的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-06
- 这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
- 这篇文章主要为大家详细介绍了使用jQuery.Pin垂直滚动时固定导航的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-05-27
- 这篇文章主要介绍了JavaScript设计模式之职责链模式,对设计模式感兴趣的同学,可以参考下...2021-04-25
- 多个网站共用一个Mysql数据库时,为使数据库管理不混乱,一般采用不同的网站使用不同前缀名的方式进行区分。而如何批量修改已有数据库的前缀名呢?全部导出修改后再导入?还是一个表一个表的修改?今天我要介绍的是相对简单的...2015-10-21
- phpmyadmin是一款很不错的WEB对mysql数据库管理软件,如果你想创建数据库与设置用户权限我们必须操作用户的很高的权限,如ROOT权限,下面我来给大家介绍介绍。 先来配...2016-11-25