奇领yy6608在线观看官网

  • <acronym id="y46sa"></acronym>
  • <kbd id="y46sa"></kbd>
  • 空間訪問權限:游客, 頭像訪問權限:自己
    [登錄]后可以瀏覽更多信息
    博客正文
    【操作】
    PHP回調函數

    一、預備知識
     
    1、把匿名函數賦給變量,利用變量調用函數
     $fun = function($a,$b){  //注意,這里的函數必須是匿名的
          echo "{$a}, {$b}!";
     };                       //注意,這里的分號不可少
     $fun('hello', 'world');  //調用

    2、用USE關鍵字引用父作用域中的變量
     $c='2019';
     $d='03';
     $fun=function($a,$b){
          echo "{$a}, {$b}! {$c}{$d}";
     };
     $fun('hello', 'world');

    上面的代碼回出錯,在匿名函數里無法直接調用父對象域定義的變量$c,$d,必須用use關鍵字,改成下面的代碼即可
     $fun=function($a,$b) use($c, $d){
          echo "{$a}, {$b}! {$c}{$d}";
     };
    注意,use里的變量如果在父作用域里沒有定義,也會出錯。


    3、用call_user_func_array調用預定義函數
    call_user_func_array第一個參數為函數名,第二個參數為函數參數,以數組形式傳入
     function debug($a, $b){
          echo "{$a}, {$b}!";
     }
     call_user_func_array('debug', array("hello", "world"));

    4、用create_function創建匿名函數,再array_walk調用并傳入參數
     $av = array("the ", "a ", "that ", "this ");
     $fun = create_function('&$v, $k', '$v = $k . "," . $v . "mango";');
     array_walk($av, $fun);
     print_r($av);

    注意 array_walk把數組$av作為參數傳給$fun指向的匿名函數,第1個參數$v為數組中元素的值,第2個參數$k為元素的鍵

    運行結果為
    Array
    (
        [0] => 0,the mango
        [1] => 1,a mango
        [2] => 2,that mango
        [3] => 3,this mango
    )

    省掉$fun 變量也可以
     $av = array("the ", "a ", "that ", "this ");
     array_walk($av, create_function('&$v, $k', '$v = $k . "," . $v . "mango";'));
     print_r($av);

    二、應用

        我有個兩個互不干擾的獨立的類fiewView和Prermission,這樣做的目的是更精簡便于代碼分離

  • fiewView類:從數據庫讀取文件名、擴展名,縮略圖,轉成xml發送給js
  • Prermission類:根據用戶的UID和GID跟文件或文件夾的權限設置、文件的UID、文件的狀態(只讀鎖定,隱藏,刪除)進行權限運算,返回檢測成功和失敗的條目。

       我一直用著2個類進行獨立運作,以實現獲取數據->權限檢測-> 輸出數據的流程,最初的解決辦法是,fiewView獲取常規字段,Prermission獲取權限字段,二者再求交集,符合條件的讓fiewView輸出為XML,F在利用回掉技術,只要讀一次數據庫,定義一個方法就能實現了。

    整改過程如下:

    第1步、修改fiewView 的filesGet方法。增加回掉函數參數$callbackfun_chekPerm
    public function filesGet($fatherid, $callbackfun_chekPerm, ...){
        根據 $fatherid讀取條目常規字段和權限字段等信息,存入$_info

        $_exclude = $callbackfun_chekPerm($_info,$permval);//利用回調函數進行權限檢測,把不符合條件條目的存入$_exclude

         foreach($_info as $_iteminfo){
              排除$_exclude的條目
              生成xml發送給js
         }
    }

    第2步、定義回調函數$callbackFunChkPerm

    • $pms是Prermission類的實例化
    • $permval是要檢測的權限類型,包括列出、下載、刪除、上傳、管理……

    snap1.jpg

    snap2.jpg

    $callbackFunChkPerm = function($_info, $permval=PERM_VISIT) use($pms, $quid, $_qgid){
         return $pms->chkPermByInfoArray($_info, $type, $permval, $quid, $_qgid);
    }

    第3步、把$callbackFunChkPerm作為參數傳遞給fiewView->filesGet
    $fv->filesGet($fatherid, $callbackFunChkPerm, ……);

  • 欄目劃分
    WEB應用程序 (33)
    桌面應用程序 (10)
    Windows操作系統 (12)
    xNix操作系統 (5)
    數據庫技術 (3)
    多媒體技術 (1)
    硬件技術 (4)
    辦公軟件 (2)
    以史為鑒 (2)
    教學反思1 (2)
    奇聞趣事 (5)
    其它 (11)
    教學反思 (4)
    電子技術 (2)
    中學生科技 (3)
     
    主人推薦
    音象定位和音箱喇叭的排步
    我國高層意向已定:制造大飛機
    “運十”悲劇
    日爾曼人
    細說百越族
    宇宙深處的秘密——星云
    [強烈推薦]中華56民族FLASH完整珍藏版
    一組漂亮的植物
      
    奇领yy6608在线观看
    友情链接:dafa888手机典版网页登录 白小姐四肖必选期期中