작업 이력 기록 기능 구현
- 실행 취소 및 실행 취소 기능과 유사한 기능입니다. (정방향 및 역방향 연산 구현)
- discuz 포럼에 로그인하면 게시물을 볼 수 있습니다. (지금까지 본 게시물과 게시물 조회 기록을 앞뒤로 이동할 수 있습니다.)
- Windows 탐색기 주소 표시줄의 앞으로 및 뒤로 기능과 논리는 동일합니다.
이러한 요구를 바탕으로 데이터 구조가 구현됩니다. 나는 일시적으로 역사 수업이라고 불리는 일반 수업을 썼습니다.
[원리는 시계와 비슷합니다. 객체를 인스턴스화할 때 길이가 N(필요에 따라 결정될 수 있음) 노드로 링을 구성할 수 있습니다.]
그런 다음 다양한 작업을 통합하세요. 앞으로, 뒤로, 삽입, 삽입 수정.
클래스는 배열을 구성할 수 있습니다. 또는 배열 매개변수를 전달하여 객체를 생성합니다.
각 작업이 끝나면 작업 후 배열을 얻을 수 있습니다.
완성된 데이터 는 필요에 따라 적절한 방법으로 저장할 수 있습니다. 쿠키나 세션에 넣거나, 직렬화하거나, json 데이터로 변환하여 데이터베이스에 저장하거나, 파일로 담아두는 것입니다. 다음번 사용에도 편리합니다. 확장을 촉진하려면 더 많은 데이터를 저장하세요. 특히 각 데이터 조각은 배열 레코드이기도 합니다.
예를 들어 필요에 따라 확장합니다: array('path'=>'D:/www/','sss'=>value)
---------- -------------
그런데 제가 작성한 변수 디버깅용 파일을 올려 놓았습니다.
- pr()은 출력 변수의 형식을 지정하고 강조 표시할 수 있습니다. pr($arr),pr($arr,1)은 출력 후 종료됩니다.
- debug_out()은 여러 변수를 출력하는 데 사용됩니다. 기본값은 종료하는 것입니다.
- debug_out($_GET,$_SERVER,$_POST,$arr) ;
- include 'debug.php';
- /**
- * 히스토리 연산 클래스
- * 배열을 전달하거나 구성합니다. 형식:
- array(
- 'history_num'=>20, //총 대기열 노드 수
- 'first'=>0, //시작 위치, 0부터 시작. 배열 인덱스 값
- 'last'=>0, //끝 위치는 0부터 시작합니다.
- 'back'=>0, //첫 번째 위치에서 몇 걸음 뒤로 이동했는지 =>array( //배열, 작업 대기열을 저장합니다.
- array('path'=>'D:/'),
- array('path'=>'D:/www/') ,
- array('path'=>'E:/'),
- array('path'=>'/home/')
- ……
- )
- )
- */
-
- 클래스 역사{
- var $history_num;
- var $first;
- var $last;
- var $back;
- var $history=array();
-
- 함수 __construct( $array=array(),$num=12){
- if (!$array) {//배열이 비어 있습니다.
- $history=array();
- for ($i=0; $i < $num; $i ) {
- array_push($history,array('path'=>'') );
- }
- $array=array(
- 'history_num'=>$num,
- 'first'=>0,//시작 위치
- 'last'=> ; 0,//위치 끝
- 'back'=>0,
- 'history'=>$history
- );
- }
- $this->history_num=$array [ 'history_num'];
- $this->first=$array['first'];
- $this->last=$array['last'];
- $this-> =$array['back'];
- $this->history=$array['history']
- }
-
- function nextNum($i,$n=1){ / 루프 아래의 /N 값. 클럭 루프와 유사합니다.
- return ($i $n)<$this->history_num ? ($i $n):($i $n-$this->history_num);
- }
- 함수 prevNum( $i,$n=1){//루프의 마지막 값 i입니다. N 위치로 돌아갑니다.
- return ($i-$n)>=0 ? ($i-$n) : ($i-$n $this->history_num)
- }
-
- 함수 마이너스 ($i,$j){//두 시계 방향 지점의 유일한 차이점은 i-j
- return ($i > $j) ? ($i - $j):($i-$j $this-> ; History_num);
- }
-
-
- 함수 getHistory(){//저장 또는 직렬화 작업에 사용되는 배열을 반환합니다.
- return array(
- 'history_num'=> $this->history_num,
- 'first' => $this->first,
- 'last' => $this- >마지막,
- '뒤로' => $this->뒤로,
- '역사' => $this->history
- );
- }
-
- function add($path){
- if ($this->back!=0) {//back 작업 기록이 있으면 삽입합니다.
- $this->goedit($path);
- return;
- }
- if ($this->history[0]['path']=='') {// 방금 생성되었으므로 추가할 필요가 없습니다.
- $this->history[$this->first]['path']=$path;
- return;
- }else{
- $this->first=$this->nextNum($this->first);//첫 번째 위치를 앞으로 이동
- $this->history[$this-> first]['path'] =$path;
- }
- if ($this->first==$this->last) {//시작 위치와 끝 위치가 만납니다
- $ this->last=$this ->nextNum($this->last);//끝 위치를 앞으로 이동합니다.
- }
- }
-
- function goback(){//처음부터 N단계 전의 주소를 반환합니다.
- $this->back =1;
- //최대 뒤로 이동할 수 있는 단계는 시작점과 끝점의 차이(시계 방향 차이)입니다.
- $mins=$this->minus ($this-> ;first,$this->last);
- if ($this->back >= $mins) {//마지막 지점으로 돌아가기
- $this->back =$mins;
- }
-
- $pos=$this->prevNum($this->first,$this->back);
- return $this->history[ $pos]['path '];
- }
-
- function gonext(){//N이 처음에서 뒤로 물러난 곳에서 한 걸음 앞으로 나아갑니다.
- $this->back-=1;
- if ($this->back<0) {//마지막 지점으로 돌아가기
- $this->back=0;
- }
- return $this->history[$this->prevNum($this->first,$this->back)]['path'];
- }
- 함수 goedit( $ path){//앞으로가 아니라 수정된 특정 지점으로 돌아갑니다.전나무 값은 마지막 값입니다.
- $pos=$this->minus($this->first,$this->back);
- $pos=$this->nextNum($pos);//다음
- $this->history[$pos]['path']=$path;
- $this->first=$pos;
- $this->back=0;
- }
-
- //돌아갈 수 있나요?
- function isback(){
- if ($this->back < $this->minus($this->first,$this- > ;last)) {
- return ture;
- }
- return false;
- }
- //앞으로 나아갈 수 있나요
- function isnext(){
- if ($this -> ;back>0) {
- return true;
- }
- return false;
- }
- }
-
-
- //테스트 코드.
- $hi=new History(array(),6);//빈 배열을 전달하여 배열 구성을 초기화합니다.
- for ($i=0; $i $hi->add('s'.$i)
- }
- pr($hi- >goback());
- pr($hi->goback());
- pr($hi->goback());
-
- pr($hi-> goneext());
- pr($hi->gonext());
- pr($hi->gonext());
- pr($hi->gonext());
- $hi->add('asdfasdf');
- $hi->add('asdfasdf2');
- pr($hi->getHistory());
-
-
- $ss=new History($hi->getHistory());//배열로 직접 구성됩니다.
- $ss->add('asdfasdf');
- $ss->goback();
- pr($ss->getHistory());
-
-
- ?>
코드 복사
- /**
- * 변수 이름 가져오기
- * 예 hello="123" ss 문자열 가져오기
- */
- function get_var_name(&$aVar){
- foreach($GLOBALS를 $로 표시 key=>$var)
- {
- if($aVar==$GLOBALS[$key] && $key!="argc"){
- return $key;
- }
- }
- }
-
- /**
- * 형식화된 출력 변수 또는 객체
- * @param Mixed $var
- * @param boolean $exit
- */
- function pr($var,$exit = false){
- ob_start();
- $style='< 스타일>
- pre#debug{margin:10px;font-size:13px;color:#222;font-family:Consolas ;line-height:1.2em;배경:#f6f6f6;border-left:5px solid #444 ;padding:5px;width:95%;word-break:break-all;}
- pre#debug b{font-weight:400;}
- #debug #debug_str{color:#E75B22;}
- #debug #debug_keywords{font-weight:800;color:00f;}
- #debug #debug_tag1{color:#22f;}
- #debug #debug_tag2{color:#f33;font-weight:800; }
- #debug #debug_var{color:#33f;}
- #debug #debug_var_str{color:#f00;}
- #debug #debug_set{color:#0C9CAE;}';
- if (is_array($var)){
- print_r($var);
- }
- else if (is_object($var)){
- echo get_class($var)." 개체 ";
- }
- else if(is_resource($var)){
- echo (string)$var;
- }
- else{
- echo var_dump($var);
- }
- $out = ob_get_clean();//$out 변수에 대한 버퍼 출력
-
- $out=preg_replace('/"(.*)"/','"'.'\1'.'"',$out);//문자열 변수 강조 표시
- $out=preg_replace('/=>(.*)/' ,' =>'.''.'\1'.'',$out);//=>
- $out= 뒤의 값 강조 표시 preg_replace('/[(.*)]/','['.'\1'. '< /b>]',$out);//변수 강조
-
- $from = array(' ','(' ,')' ,'=>');
- $to = array(' ','(',') ','=>');
- $out=str_replace($from,$to,$out)
-
- $keywords=array('Array','int','string','class','object','null');//키워드 강조
- $keywords_to=$ 키워드;
- foreach ($keywords as $key=>$val)
- {
- $keywords_to[$key] = ''.$val.'< ;/b>';
- }
- $out=str_replace($keywords,$keywords_to,$out)
- echo $style.'
<b id ="debug_keywords"> '.get_var_name($var).'</b> = '.$out.' ';
- if ($exit) exit;//true인 경우 종료
- }
-
- /**
- * 디버그 출력 변수, 개체 값.
- * 임의 개수의 매개변수(모든 유형의 변수)
- * @return echo
- */
- function debug_out(){
- $avg_num = func_num_args();
- $avg_list= func_get_args();
- ob_start();
- for ($i=0; $i pr($avg_list[$i]);
- }
- $out=ob_get_clean() ;
- echo $out ;
- 종료;
- }
-
-
- ?>
코드 복사
|