搜尋
首頁php教程php手册沈逸老师PHP魔鬼特训笔记(4)

上一課我們透過shell腳本拷貝程式碼,了解了靜態方法和靜態屬性。 (還有附件PHAR包,我直接無視了)

然後在GOD檔案中寫了一些參數,

  我們也可以這樣,把方法名稱像拼湊字串一樣拼起來。

 <span style="color: #800080;">$get_param</span>=<span style="color: #800080;">$argv</span>[1<span style="color: #000000;">];
 godinit</span>::<span style="color: #800080;">$get_param</span>();

  好,下面我們還是按照老師課程,進行需求實現:如果參數帶“-”,那麼說明就是屬性。直接調用類別的靜態屬性。如果不帶“-”,那麼說明是方法,我們直接呼叫類別的靜態方法。

  於是,我先把上課寫過的god檔改成下面這樣:

<span style="color: #008000;">#</span><span style="color: #008000;">!/usr/local/bin/php</span>
<span style="color: #000000;">php

</span><span style="color: #0000ff;">require</span>('god_func7'<span style="color: #000000;">);
</span><span style="color: #0000ff;">require</span>("godinit.php"<span style="color: #000000;">);

    </span><span style="color: #800080;">$result</span>=''<span style="color: #000000;">;
    </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$argc</span>>=2<span style="color: #000000;">)
    {     
        </span><span style="color: #008000;">/*</span><span style="color: #008000;">'-v'==$argv[1]  && $result=godinit::$V;
        'make'==$argv[1]  && $result=godinit::make();
        'init'==$argv[1] && $result=godinit::init();</span><span style="color: #008000;">*/</span>
        <span style="color: #800080;">$p</span> = <span style="color: #800080;">$argv</span>[1];  <span style="color: #008000;">//</span><span style="color: #008000;">获取参数</span>
        <span style="color: #0000ff;">if</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,0,1)=='-')     <span style="color: #008000;">//</span><span style="color: #008000;">  代表获取并匹配变量,</span>
<span style="color: #000000;">        {
          </span><span style="color: #008000;">//</span><span style="color: #008000;">如果传过来的是-v,就会变成v</span>
          <span style="color: #800080;">$p</span> = <span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,1<span style="color: #000000;">);
           </span><span style="color: #800080;">$result</span> = godinit::$<span style="color: #800080;">$p</span><span style="color: #000000;">;
        }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
            </span><span style="color: #800080;">$result</span> = godinit::<span style="color: #800080;">$p</span><span style="color: #000000;">();
        }
    }
</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$result</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">echo</span> <span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">;
</span>?>

  結果如下圖:

  

  

  我們回到上面的命令行,如果隨便輸出一個非-v的字符,就會出現錯誤,所以我們還需要把程式碼完善下。 

<span style="color: #800080;">$p</span> = <span style="color: #800080;">$argv</span>[1];  <span style="color: #008000;">//</span><span style="color: #008000;">获取参数</span>
<span style="color: #0000ff;">if</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,0,1)=='-')     <span style="color: #008000;">//</span><span style="color: #008000;">  代表获取并匹配变量,</span>
<span style="color: #000000;">    {
      </span><span style="color: #008000;">//</span><span style="color: #008000;">如果传过来的是-v,就会变成v</span>
        <span style="color: #800080;">$p</span> = <span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,1<span style="color: #000000;">);
        </span><span style="color: #800080;">$result</span> =<span style="color: #0000ff;">isset</span>(godinit::$<span style="color: #800080;">$p</span>)?godinit::<span style="color: #800080;">$p</span>:<span style="color: #000000;">error;
    }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
        </span><span style="color: #800080;">$result</span> = godinit::<span style="color: #800080;">$p</span><span style="color: #000000;">();
    }</span>  

  這裡我們將要用到一個PHP魔法函數 __callStatic($m,$args) 。這個方法如果你要用,必須寫到類別裡面,而且必須是static。它的作用是,如果你呼叫了一個未定義的靜態方法,則會自動觸發這個函數。 第一個參數是 方法名,第二個參數是方法參數。我們可以用它來做一個容錯處理(只要學到這個地步),在godinit檔案中,我們加入這個方法:

<span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> __callStatic(<span style="color: #800080;">$p1</span>,<span style="color: #800080;">$p2</span><span style="color: #000000;">){
    </span><span style="color: #0000ff;">echo</span> '$p1'<span style="color: #000000;">;
}<br></span>

  然後,我們來看看結果:

  

  現在再來看一般類定義和實例化以及調用,在我們新建一個godconfig文件,創建一個只有屬性的godconfig類

<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> godconfig
{
    </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$prj_name</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$prj_author</span><span style="color: #000000;">;
    
}
</span>?>

  在godinit裡的實例化類別godconfig,使用 1、json_encode(實例化過後的類別):傳回一個json格式的字串 2、json_decode(json字串) : 傳回一個物件。

<span style="color: #000000;">php

</span><span style="color: #0000ff;">require</span>('godconfig.php');                <span style="color: #008000;">//</span><span style="color: #008000;">引入gonconfig这个文件</span>
<span style="color: #0000ff;">class</span> godinit                           <span style="color: #008000;">//</span><span style="color: #008000;">创建一个类,godinit</span>
<span style="color: #000000;">{
    </span><span style="color: #0000ff;">static</span>  <span style="color: #800080;">$v</span>="god version is 1.2";     <span style="color: #008000;">//</span><span style="color: #008000;">声明一个静态属性$VERSION</span>

    <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> init()               <span style="color: #008000;">//</span><span style="color: #008000;">静态方法 init</span>
<span style="color: #000000;">    {
        </span><span style="color: #800080;">$gc</span> = <span style="color: #0000ff;">new</span> godconfig();          <span style="color: #008000;">//</span><span style="color: #008000;">实例化godconfig里定义的类</span>
        <span style="color: #0000ff;">echo</span> "input your project name?".<span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">;
        </span><span style="color: #800080;">$gc</span> -> prj_name = <span style="color: #008080;">fgets</span>(STDIN);            <span style="color: #008000;">//</span><span style="color: #008000;">从标准输入中获取用户输入的字符并赋值给实例化属性$prj_name</span>

        <span style="color: #0000ff;">echo</span> "input your author name?".<span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">;
        </span><span style="color: #800080;">$gc</span> -> prj_author=<span style="color: #008080;">fgets</span><span style="color: #000000;">(STDIN);

        </span><span style="color: #800080;">$ret</span> = <span style="color: #0000ff;">array</span>();                 <span style="color: #008000;">//</span><span style="color: #008000;">初始化一个数组;</span>
        <span style="color: #800080;">$ret</span>[] = <span style="color: #800080;">$gc</span><span style="color: #000000;">;
        </span><span style="color: #0000ff;">echo</span> json_encode(<span style="color: #800080;">$ret</span><span style="color: #000000;">);
        </span><span style="color: #008000;">//</span><span style="color: #008000;">return ""</span>
<span style="color: #000000;">    }
    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> __callStatic(<span style="color: #800080;">$p1</span>,<span style="color: #800080;">$p2</span><span style="color: #000000;">){
        </span><span style="color: #0000ff;">echo</span> "error function"<span style="color: #000000;">;
    }
}
</span>?>

  然後我們看結果:

  

 

 

惡補幾個簡單的知識點:

()? ():();

substr();

isset();

__callStatic($m,$args) 

json_encode()

json_decode() 

 

版權聲明:筆記整理者亡命小卒熱愛自由,崇尚分享。但這篇筆記源自www.jtthink.com(程式設計師在囧下)沈逸老師的《 PHP魔鬼訓練課第一階段》。本學習筆記小卒於博客園首發, 如需轉載請尊重老師勞動,保留沈逸老師署名以及課程來源地址。

 

上一課:沈逸老師PHP魔鬼特訓筆記(3)

 

下一課:

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境