wog_act.php 簡潔寫法

提供WOG各方面的技術問題,並提供最新path更新。

版主: 涅魂, 簫哥, 10度C~

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

wog_act.php 簡潔寫法

文章stu6707 » 2011-11-20 4:06 pm

繼昨天發表的switch 簡潔寫法,今天又發現可以上wog_act.php 更加簡潔更加效率的寫法

廢話不多說,直接上程式碼

當前寫法
代碼: 選擇全部
switch($_POST["f"])
{
...
   case "chara":
      include("./class/wog_act_chara.php");
      $wog_act_class = new wog_act_chara;
      switch ($_POST["act"])
      {
         case "login":
            $wog_act_class->login($bbs_id,$p_ip);
         break;
         case "status_view":
            $wog_act_class->show_chara($HTTP_COOKIE_VARS["wog_cookie"],$userid,3);
         break;
         case "make":
            $wog_act_class->chara_make();
         break;
         case "save":
            $wog_act_class->chara_save($bbs_id);
         break;
         case "revive":
            $wog_act_class->revive($HTTP_COOKIE_VARS["wog_cookie"]);
         break;
         case "logout":
            if($HTTP_COOKIE_VARS["wog_cookie"]=="")
            {
               alertWindowMsg($lang['wog_act_nologin']);
            }
            $wog_act_class->logout($HTTP_COOKIE_VARS["wog_cookie"]);
         break;
         case "view2":
            $wog_act_class->system_view2($HTTP_COOKIE_VARS["wog_cookie"]);
         break;
         case "cp":
            $wog_act_class->cp_view();
         break;
         case "kill":
            $wog_act_class->kill();
         break;
      }
   break;
...
}

wog功能一多,一大串的case都眼花了

今天發現了非常簡潔的寫法
代碼: 選擇全部
$className='wog_act_'.$_POST["f"]; //class名稱,因為post f 值為後半部class名稱,這邊合併成完整的名稱 (wog_act_chara)
$path='./class/'.$className.'.php'; //class所在的php文件路徑 (./class/wog_act_chara.php)
if(file_exists($path)) //php文件是否存在
{
   include($path); //include進來
   if(class_exists($className)) //class是否存在
   {
      $wog_act_class=new $className(); //等同於 $wog_act_class=new wog_act_chara;
      $methodName=$_POST["f"].'_'.$_POST["act"]; //要呼叫的函式,函式名稱通常都是由f & act組成的 (chara_save)
      if(method_exists($wog_act_class,$methodName)) //函式是否存在
      {
         $wog_act_class->$methodName($_COOKIE["wog_cookie"]); 呼叫函式
      }
   }
}

以上方法使wog_act.php從數百行縮至數十行,加上不用一個一個的去對case,效率應該多了不少

不過需求就是需要post f的值為php文件的名稱以及class名稱的後半部,php文件的名稱以及class名稱也要相同

class裡的函式名稱也須要由post f 和 post act 組成 (chara_save),當然也可以只有act (save),不過容易跟其它class裡的函式搞混 (shop_view & bid_view ---> view & view)

還有php版本也要注意,不確定用變量建立class以及訪問class裡的函式需要幾版的php,我想至少要php 5.3吧 @@




ETERNAL
 
文章: 2937
註冊時間: 2003-12-03 11:08 pm
性別: 男生

Re: wog_act.php 簡潔寫法

文章ETERNAL » 2011-11-20 5:05 pm

可以參考最果的寫法
最果是類似這樣方式來做

WOG要改成這樣的話
少數的class跟function會對應不到,要注意


水色論壇 http://www.et99.net
簡恩峻分享

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

Re: wog_act.php 簡潔寫法

文章stu6707 » 2011-11-20 6:01 pm

原來最果是這樣的寫法阿,還沒看過最果的程式碼 XD 等我全部吃下wog在換最果

現在在考慮要不要用static,效率更高

不過還不大了解static的運作方式,還要判斷兩種方法的優缺點




ETERNAL
 
文章: 2937
註冊時間: 2003-12-03 11:08 pm
性別: 男生

Re: wog_act.php 簡潔寫法

文章ETERNAL » 2011-11-21 1:03 pm

stu6707 寫:原來最果是這樣的寫法阿,還沒看過最果的程式碼 XD 等我全部吃下wog在換最果

現在在考慮要不要用static,效率更高

不過還不大了解static的運作方式,還要判斷兩種方法的優缺點


最果寫的比WOG好很多,簡潔很多

畢竟n年前的WOG老態了沒辦法,全部改寫太痛苦

static 很少用,不太清楚他的優點

不過倒是知道他的特色

若他效率更高的話,在任務的固定變數可以使用static :D


水色論壇 http://www.et99.net
簡恩峻分享


回到 Online FF Battle-WOG官方聯盟推廣處

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 10 位訪客