我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个。
虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的颜色。比如每个人族的机枪兵。
而且大多数玩家只用到常用的一些兵种,很多时候不会制造所有的兵种。
待解决的问题:把把兵种的图像动画共享。
思路:我们把每个兵种的图像动画建模作为对象,放入内存共享。一旦有某个画面用到这个兵种,只要把共享的图像动画拿出来,更改颜色就可以了。
享元(Flyweight)模式示例:
代码如下 | 复制代码 |
<?php //机枪兵享元 class MarineFlyweight { //绘制机枪兵的图像动画,参数为状态,比如属于哪一个玩家 public function drawMarine($state) { //绘制机枪兵 } } //享元工厂 class FlyweightFactory { //享元数组,用于存放多个享元 private $flyweights; //获取享元的方法 public function getFlyweight($name) { if (!isset($flyweights[$name])) { $flyweights[$name] = new $name."Flyweight"; } return $flyweights[$name]; } } //初始化享元工厂 $flyweightFactory = new FlyweightFactory(); //当我们需要绘制一个机枪兵的时候,同时传递一个状态数组,里面包含剩余的血等等 $marine = $flyweightFactory->getFlyweight("Marine"); $marine->drawMarine($status); ?> |
用途总结:享元模式可以将需要共享的资源集中起来,统一管理,防止重复消耗。
实现总结:需要一个享元工厂管理共享的资源,比如上面的FlyweightFactory。把所有共享的资源的生产全部交给个享元工厂。
Memcache是php中常用到的一个高性能的分布式的内存对象缓存系统,我们可以利用它来对网站进行性能提高并且减少服务器负载,下面是我的学习笔记本大家一起看看。 最简单的连接方法例子
代码如下 | 复制代码 |
<?php |
应用中会做一个类
代码如下 | 复制代码 |
class MCache private static $server = array('127.0.0.1', 11211); private static function get_memcache() public static function set($key, $value, $expire=600) public static function get($key) } MCache::set('test_one', 'value_one', 60); # 60 Sec |
PHP的Memcache客户端所有方法总结
memcache函数所有的方法列表如下:
Memcache::add – 添加一个值,如果已经存在,则返回false
Memcache::addServer – 添加一个可供使用的服务器地址
Memcache::close – 关闭一个Memcache对象
Memcache::connect – 创建一个Memcache对象
memcache_debug – 控制调试功能
Memcache::decrement – 对保存的某个key中的值进行减法操作
Memcache::delete – 删除一个key值
Memcache::flush – 清除所有缓存的数据
Memcache::get – 获取一个key值
Memcache::getExtendedStats – 获取进程池中所有进程的运行系统统计
Memcache::getServerStatus – 获取运行服务器的参数
Memcache::getStats – 返回服务器的一些运行统计信息
Memcache::getVersion – 返回运行的Memcache的版本信息
Memcache::increment – 对保存的某个key中的值进行加法操作
Memcache::pconnect – 创建一个Memcache的持久连接对象
Memcache::replace -对一个已有的key进行覆写操作
Memcache::set – 添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold – 对大于某一大小的数据进行压缩
Memcache::setServerParams – 在运行时修改服务器的参数
我爱水煮鱼有个微信插件,会时不时的退出一些插件的 “插件”,直接下载一个提供的 PHP 文件,上传到插件一个指定的目录即可,插件会自动检测、引入并执行这个文件,研究了下,也想弄一个类似的功能。
代码如下 | 复制代码 |
/* *引入一个目录的所有文件 *http://www.111cn.net */ function Bing_include_all_php( $folder ){ foreach( glob( "{$folder}/*.php" ) as $filename ) require_once $filename; } |
使用方法就是直接调用这个函数,第一个参数放上要引入的相对目录即可。
还有一种办法可以使用魔术方法__autoload来加载
代码如下 | 复制代码 |
set_include_path('aa' . PATH_SEPARATOR . get_include_path()); |
我们一般使用_autoload自动加载类如下:
代码如下 | 复制代码 |
<?php |
一:顺序结构
二:分支结构(条件结构,选择结构)
1.单路分支:
//条件:bool,true或false,> < == != & || ! isset()
if(条件)
执行下面一条语句
if(条件)
{
代码段:
代码段:
}
例子:
代码:
$a=10;
$b=5;
if($a > $b)
echo “$a是大于$b的”;
2.双路分支:
使用else语句
if(条件)
执行一条语句
else
执行一条语句
if(条件){
一条或多条代码
}else{
一条或多条代码
}
例子:
代码:
$a=10;
$b=20;
if($a > $b){
echo “$a大于$b<br>”;
}else{
echo “$a小于$b<br>”;
}
3.多路分支:
可以使用 if else if 和swich case
//这是一种互斥的关系
if(条件){
}elseif(条件){
}elseif(条件){
}elseif(条件){
}else{
}
switch(变量){
case 值:
代码:
break;
case 值1:
代码;
break;
default;
}
例子:
代码:
$hour=date(“H”);
if($hour > 6 && $hour < 9){
echo “早上好”;
}elseif($hour > 9 && $hour < 12){
echo “上午好”;
}elseif($hour > 12 && $hour < 14){
echo “中午好”;
}elseif($hour > 14 && $hour < 17){
echo “下午好”;
}elseif($hour > 17 && $hour < 19){
echo “傍晚好”;
}elseif($hour > 19 && $hour < 22){
echo “晚上好”;
}elseif($hour > 22 && $hour < 24){
echo “深夜好”;
}else{
echo “凌晨好”;
}
以上代码也可以写成
$hour=date(“H”); //因为有互斥关系,当执行到正确代码时,就不会执行下一段代码。
if($hour < 6){
echo “凌晨好”;
}
if($hour < 9){
echo “早上好”;
}elseif($hour < 12){
echo “上午好”;
}elseif($hour < 14){
echo “中午好”;
}elseif($hour < 17){
echo “下午好”;
}elseif($hour < 19){
echo “傍晚好”;
}elseif($hour < 22){
echo “晚上好”;
}elseif($hour < 24){
echo “深夜好”;
}else{
echo “您好”;
}
例子:
代码:
$week=date(“D”);
//switch(变量) 这里的变量只使用整型和字符串
//default 如果变量没有匹配的值,则执行default中的区域
//break 是退出switch语句,用来设置多个值匹配执行同一段代码
switch($week){
case “Mon”:
echo “星期一”;
break;
case “Tue”:
echo “星期二”;
break;
case “Wed”:
echo “星期三”;
break;
case “Thu”:
echo “星期四”;
break;
case “Fri”:
echo “星期五”;
break;
default:
echo “周末”;
}
如果是判断一段范围我们使用elseif
如果是单个值我们使用switch
4.嵌套分支:
if(){
if(){
}else{
if(){
}else{
}
}
}else{
if(){
}else{
switch(){
}
}
}
例子:
代码:
$sex=$_GET["sex"];
$age=$_GET["age"];
if($sex=”man”){
if($age >= 60){
echo “这位男士已经退休,他退休”.($age-60).”年了”;
}else{
echo “这位男士还在工作,还有”.(60-$age).”年退休”;
}
}else{
if($age >= 55){
echo “这位女士已经退休了,她退休”.($age-55).”年了”;
}else{
echo “这位女士还在工作,还有”.(55-$age).”年退休”;
}
}
//以上代码用了GET,所以访问的话是 ?sex=man&age=33
这里列举几个跳转方法:
网上最常见的一种方法:
代码如下 | 复制代码 |
<?php $url = $_GET['url']; |
把这段代码放到一个文件夹,命名为 比如go.php
然后go.php?url=需要跳转的网址,如果需要跳转淘宝客等产品链接,由于带有参数,需要修改下代码,用如下的代码
代码如下 | 复制代码 |
<?php $qstring = $_SERVER['QUERY_STRING']; $url = substr($qstring,4); header("Location: $url"); ?> |
另外还有很多js html的代码等等,就不介绍了,有需要的网上搜索一大把。