存档

2013年2月 的存档

PHP 迭代器介绍

2013年2月27日 评论已被关闭

说到迭代器这个东西,PHP内置的迭代器还真多。迭代器到底来做什么的呢,其实就是用来遍历一个对象内部数据并且获得想要的结构。迭代器它可以控制foreach 语句的循环结构,通过适当的拓展可以获得指定情况下遍历的结果。就例如,PHP提供搜索,递归,聚集,XMl等各类型的迭代器。种类繁多,功能齐全,比如要处理个XML,用个simplexmliterator 就立马见效。

下面介绍一下最基础的几个迭代器的接口:
Traversable : 这个是最初始的接口,他提供了控制foreach 语句的内置功能。所谓内置,就是只由PHP核心器去控制,外部无法调用。也就是说这个接口是无法被外部应用所应用。
Iterator : 这个接口继承了Traversable ,并且包含了控制foreach 的五个重要的函数 : rewind() , valid(), key(),current(),next() ,它实现了foreach每一步的动作。
iteratoraggregate : 这个接口以继承了Traversable, 它最大的功能是可以将实现Iterator的类移除在外,自身不用去实现那五个方法便可实现控制foreach的目的。
 
一个简单的例子:
 
class MyIterator implements Iterator{
protected $position;
protected $arr;
public function __construct($array){
$this->arr = $array;
$this->postion = 0;
}
public function rewind(){
var_dump(__METHOD__);
$this->position = 0;
}
public function valid(){
var_dump(__METHOD__);
return isset($this->arr[$this->position]);
}
public function key(){
var_dump(__METHOD__);
return $this->position;
}
public function current(){
var_dump(__METHOD__);
return $this->arr[$this->position];
}
public function next(){
var_dump(__METHOD__);
return ++$this->position;
}
}
例子:

$array = array(1,2,3,3,4);
$it = new MyIterator($array);
foreach($it as $key=>$value){
echo $key.':'.$value.'<br/>';
}

使用iteratoraggregate :

class MyIteratorAggregate implements IteratorAggregate{
protected $arr;

public function __construct($array){
$this->arr = $array;
}

public function getIterator(){
return new MyIterator($this->arr);
}
}
例子:

$array = array(1,2,3,3,4);
$it = new MyIteratorAggregate($array);
foreach($it as $key=>$value){
echo $key.':'.$value.'<br/>';
}

对于PHP其他的那些迭代器,实在多不胜数,我反反复复查询官网的手册,终于整理出大体的结构草图,在这里分享给各位吧。

 
 

其实,之前我又在思考一个问题,为什么要使用迭代器,我们不可以在foreach中去实现我们想要的处理呢。 其实,以上迭代器它本身的实现都是通过C拓展的,所以自己编写的遍历和PHP自身提供的迭代器是有性能的差异,第二个,因为遍历的是对象而不是数组,面不来我们在遍历的时候遇到不少麻烦,即使我们解决了,也不能确保我们应用到的算法是最好的,而迭代器就是集成了最优化的算法。所以,以后开发中尽量使用迭代器去做想做的事情吧。

 

分类: php 标签:

jQuery 插件开发模板

2013年2月22日 评论已被关闭

1.不带参数

(function($){
 
    //将这个新的方法附加到 jQuery 上
    $.fn.extend({ 
         
        //这个地方是插件名称
        switching: function() {
			
            //遍历匹配的元素
            return this.each(function() {
             
                //这里编写代码

            });
        }
    });
     
//传递 jQuery 对象给这个方法, 
//可以使用任何有效的 Javascript 变量名
})(jQuery);

2.传递参数

(function($){
 
    $.fn.extend({ 
         
        //给方法传参数
        switching: function(options) {
			
		//设置默认参数,使用','分隔
		//example:
		var defaults = {
			padding: 20,
			mouseOverColor : '#000000',
			mouseOutColor : '#ffffff'
		}
		
		//传递的参数 options 与默认参数 defaults 合并
		// extend介绍: http://phpff.com/501.html
		var options =  $.extend(defaults, options);

		//遍历匹配的元素
		return this.each(function() {

		//这里编写代码

		});
        }
    });
     

})(jQuery);
分类: jQuery 标签:

jQuery 图片切换插件 picture switching 制作

2013年2月20日 评论已被关闭

js文件

(function($){
  
     //Attach this new method to jQuery
     $.fn.extend({
         
         //This is where you write your plugin's name
         switching: function() {
    //参数
    var option={
     paused:true
    }
    //方法
    var methods={
     changeImage:function(obj){
      if(option.paused==false){
       return;
      }
      var $currBig = $(".big li:visible",obj);

     if($currBig.next().length==1){

      $next=$currBig.next();

     }else{

      $next=$(".big li:first",obj)
      }
      
      $currBig.fadeOut("slow");
      $(".big li",obj).eq($next.index()).fadeIn("slow");
     }
    }
             //Iterate over the current set of matched elements
             return this.each(function() {
             
                 //code to be inserted here
     //点击小图切换大图
     var obj = $(this);
     $(".small li",obj).bind('click',function(){
      var $index=$(this).index();
      var $currBig = $(".big li:visible",obj);
      if($currBig.index()!=$index){
       $currBig.fadeOut("slow");
       $(".big li",obj).eq($index).fadeIn("slow");
      }
     });

    //自动切换图片
     setInterval(function(){
      methods.changeImage(obj);
     },3000);

    //鼠标经过停止自动切换
     $(".small li",obj).hover(function(){
       option.paused=false; 
      },function(){
       option.paused=true;  
      });


            });
         }
     });
     
 //pass jQuery to the function,
 //So that we will able to use any valid Javascript variable name
       
 })(jQuery);

css

ul{ list-style: none}
ul.big{ position: relative; width: 400px; height: 200px; text-align: center}
ul.big li{ position: absolute; width: 400px; height: 200px;}
ul.small{ height: 100px;}
ul.small li{ float: left; border: 1px solid #ccc; margin: 3px; cursor: pointer}
                                                                                                                    

html

<div class="picbox">
<ul class="big">
<li><img src="images/1.jpg" width="400" /></li>
<li style="display: none"><img src="images/2.jpg" width="400" /></li>
<li style="display: none"><img src="images/3.jpg" width="400" /></li>
</ul>
<ul class="small">
<li><img src="images/1.jpg" width="100" /></li>
<li><img src="images/2.jpg" width="100" /></li>
<li><img src="images/3.jpg" width="100" /></li>
</ul>
</div>

使用方法

$(document).ready(function() {
	$(".picbox").switching();
});
分类: jQuery 标签:


标签

ajax apache array array_slice CentOS checkbox composer cookie csv curl date DATE_FORMAT excel FCKEditor file_get_contents laravel Magento Certified Developer mb_substr memcache Memcached MySQL String Functions Netbeans openssl php面试题 preg_match_all preg_replace QQ登录 rewrite SaeStorage serialize session setTimeout Sphinx spl Storage strtotime ueditor vsftp vsftpd Zend zip 分割字符串 图片处理 新浪云 正则表达式

存档