程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 沈逸老師PHP魔鬼特訓筆記(4),沈逸魔鬼

沈逸老師PHP魔鬼特訓筆記(4),沈逸魔鬼

編輯:關於PHP編程

沈逸老師PHP魔鬼特訓筆記(4),沈逸魔鬼


上一課我們通過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)

 

下一課:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved