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

  接上一堂課,我們專門新建了一個godconfig類,設定了兩個屬性prj_name(項目名稱),prj_author(作者),然後我們取得標準輸入(stdin)把結果保存在了類別裡面。

  好吧,這節課的名字比較奇葩-我得了”懶癌”,假如我們忘記寫godconfig類的屬性,我們的程式還會運行嗎?答案是依舊可以,PHP會自動為你的類別增加屬性(這是老師PPT原話)。
GOON,繼續懶得下去,現在godconfig類別都不想創建了。這裡我們用到$gc = new stdClass();

  前面這個點很簡單,我就不貼程式碼和運行結果了。

  下面,我們有另一個實戰需求:我們在函數檔案裡寫一個方法,functionTC() //temp class的意思(這名字都是老師隨意的)。代表傳回一個臨時類別。

  第一種寫法:

<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: #008000;">//</span><span style="color: #008000;">$gc = new godconfig();             //实例化godconfig里定义的类
        //$gc = new stdClass();</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: #008000;">//</span><span style="color: #008000;">$gc -> prj_name = fgets(STDIN);            //从标准输入中获取用户输入的字符并赋值给实例化属性$prj_name</span>
        <span style="color: #800080;">$prj_name</span> = <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: #008000;">//</span><span style="color: #008000;">$gc -> prj_author=fgets(STDIN);</span>
        <span style="color: #800080;">$prj_author</span> = <span style="color: #008080;">fgets</span>(STDIN);         <span style="color: #008000;">//</span><span style="color: #008000;">重新获取用户输入,并赋值给$prj_author</span>

        <span style="color: #0000ff;">echo</span> json_encode(TC(<span style="color: #0000ff;">array</span>('prj_name'=><span style="color: #800080;">$prj_name</span>,'prj_author'=><span style="color: #800080;">$prj_author</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>?>

 

  同時,我們在god_func7這個檔案中,寫一個TC方法:

<span style="color: #000000;">php
</span><span style="color: #008000;">//</span><span style="color: #008000;">functions for PHP7</span>
<span style="color: #0000ff;">function</span> genConfig(<span style="color: #800080;">$cnt</span>):<span style="color: #0000ff;">string</span><span style="color: #000000;">
{
    </span><span style="color: #0000ff;">return</span> <span style="color: #008080;">file_put_contents</span>(<span style="color: #008080;">getcwd</span>().'/god.json',<span style="color: #800080;">$cnt</span>).' of bytes is written.'.<span style="color: #ff00ff;">PHP_EOL</span>.'god config is created'<span style="color: #000000;">;
}
</span><span style="color: #0000ff;">function</span> TC(<span style="color: #800080;">$p</span><span style="color: #000000;">){
    </span><span style="color: #ff0000;">$get_class = new</span><span style="color: #000000;"><span style="color: #ff0000;"> stdClass();</span>
    </span><span style="color: #ff0000;">foreach ($p as $k => $v){
        $get_class -> $k=$v;
    }
    return $get_class</span><span style="color: #000000;"><span style="color: #ff0000;">;</span>
}</span>

  然後我們看下結果,還是和原來的寫法得到的結果一毛一樣:

  

  OK,現在可以實作godconfig都不用建置了。

  還有第二種寫法:我懶球得記了。好吧,這才是真正的懶。

 

   第三種寫法,和PHP7匿名類有關。

  PHP中的建構子是__construct(參數) {} ,類別在實例化的時候會先執行這個函式。接下來我們來看PHP7 的匿名類別(其實沒啥神秘,所謂匿名就是沒名字而已).只不過區別在於,如果匿名類別要使用外部變量,需要傳進去,否則無法使用。 

<span style="color: #000000;">php
</span><span style="color: #008000;">//</span><span style="color: #008000;">functions for PHP7</span>
<span style="color: #0000ff;">function</span> genConfig(<span style="color: #800080;">$cnt</span>):<span style="color: #0000ff;">string</span><span style="color: #000000;">
{
    </span><span style="color: #0000ff;">return</span> <span style="color: #008080;">file_put_contents</span>(<span style="color: #008080;">getcwd</span>().'/god.json',<span style="color: #800080;">$cnt</span>).' of bytes is written.'.<span style="color: #ff00ff;">PHP_EOL</span>.'god config is created'<span style="color: #000000;">;
}
</span><span style="color: #0000ff;">function</span> TC(<span style="color: #800080;">$p</span><span style="color: #000000;">){
     </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span> <span style="color: #0000ff;">class</span>(<span style="color: #800080;">$p</span>){          <span style="color: #008000;">//</span><span style="color: #008000;">this is 匿名类</span>
         <span style="color: #0000ff;">function</span> __construct(<span style="color: #800080;">$p</span><span style="color: #000000;">){
             </span><span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$p</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$k</span> => <span style="color: #800080;">$v</span><span style="color: #000000;">){
                 </span><span style="color: #800080;">$this</span> -> <span style="color: #800080;">$k</span> = <span style="color: #800080;">$v</span><span style="color: #000000;">;
             }
         }
     };
}</span>

  其實上面這個一點都不懶,寫這麼多代碼^_^;

  還是看看結果吧:

  

 

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

惡補知識點:

1、stdClass:PHP內建頂層類,實際上是一個基類,空白的。啥都沒有。如果你臨時用的,其他地方很少用。那麼根本不需要新建什麼實體類別。直接new 一個stdClass就可以了。
2、foreach遍歷數組

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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

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

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境