上一課我們通過shell腳本拷貝代碼,瞭解了靜態方法和靜態屬性。(還有個附件PHAR包,我直接無視了) 然後在GOD文件中寫了一些參數, 我們也可以這樣,把方法名像拼湊字元串一樣拼起來。 好,下麵我們還是按照老師課程,進行需求實現:如果參數帶“-”,那麼說明就是屬性。直接調用類的靜態屬性。如果不帶“ ...
上一課我們通過shell腳本拷貝代碼,瞭解了靜態方法和靜態屬性。(還有個附件PHAR包,我直接無視了)
然後在GOD文件中寫了一些參數,
我們也可以這樣,把方法名像拼湊字元串一樣拼起來。
$get_param=$argv[1]; godinit::$get_param();
好,下麵我們還是按照老師課程,進行需求實現:如果參數帶“-”,那麼說明就是屬性。直接調用類的靜態屬性。如果不帶“-”,那麼說明是方法,我們直接調用類的靜態方法。
於是,我先把上節課寫過的god文件改成下麵這樣:
#!/usr/local/bin/php <?php require('god_func7'); require("godinit.php"); $result=''; if($argc>=2) { /*'-v'==$argv[1] && $result=godinit::$V; 'make'==$argv[1] && $result=godinit::make(); 'init'==$argv[1] && $result=godinit::init();*/ $p = $argv[1]; //獲取參數 if(substr($p,0,1)=='-') // 代表獲取並匹配變數, { //如果傳過來的是-v,就會變成v $p = substr($p,1); $result = godinit::$$p; }else{ $result = godinit::$p(); } } echo $result; echo PHP_EOL; ?>
結果如下圖:
我們回到上面的命令行,如果隨便輸出一個非-v的字元,就會出現錯誤,所以我們還需要把代碼完善下。
$p = $argv[1]; //獲取參數 if(substr($p,0,1)=='-') // 代表獲取並匹配變數, { //如果傳過來的是-v,就會變成v $p = substr($p,1); $result =isset(godinit::$$p)?godinit::$p:error; }else{ $result = godinit::$p(); }
這裡我們將要用到一個PHP魔法函數 __callStatic($m,$args) 。這個方法如果你要用,必須寫到類裡面,且必須是static。它的作用是,如果你調用了一個未定義的靜態方法,則會自動觸發這個函數。 第一個參數是 方法名,第二個參數是方法參數。我們可以用它來做一個容錯處理(只要學到這個地步),在godinit文件中,我們加入這個方法:
static function __callStatic($p1,$p2){ echo '$p1'; }
然後,我們看看結果:
現在再來看一般類定義和實例化以及調用,在我們新建一個godconfig文件,創建一個只有屬性的godconfig類
<?php class godconfig { public $prj_name; public $prj_author; } ?>
在godinit里的實例化類godconfig,使用 1、json_encode(實例化過後的類):返回一個json格式的字元串 2、json_decode(json字元串) : 返回一個對象。
<?php require('godconfig.php'); //引入gonconfig這個文件 class godinit //創建一個類,godinit { static $v="god version is 1.2"; //聲明一個靜態屬性$VERSION static function init() //靜態方法 init { $gc = new godconfig(); //實例化godconfig里定義的類 echo "input your project name?".PHP_EOL; $gc -> prj_name = fgets(STDIN); //從標準輸入中獲取用戶輸入的字元並賦值給實例化屬性$prj_name echo "input your author name?".PHP_EOL; $gc -> prj_author=fgets(STDIN); $ret = array(); //初始化一個數組; $ret[] = $gc; echo json_encode($ret); //return "" } static function __callStatic($p1,$p2){ echo "error function"; } } ?>
然後我們看結果:
惡補幾個簡單的知識點:
()?():();
substr();
isset();
__callStatic($m,$args)
json_encode()
json_decode()
版權聲明:筆記整理者亡命小卒熱愛自由,崇尚分享。但是本筆記源自www.jtthink.com(程式員在囧途)沈逸老師的《 PHP魔鬼訓練課第一階段》。本學習筆記小卒於博客園首發, 如需轉載請尊重老師勞動,保留沈逸老師署名以及課程來源地址。
上一課:沈逸老師PHP魔鬼特訓筆記(3)
下一課: