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

来源:http://www.cnblogs.com/xz1024/archive/2016/08/29/5818675.html
-Advertisement-
Play Games

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

 

下一課:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  •  Django 中的 csrf_token 與單元測試 在 "《Python Web開發:測試驅動方法》" 一書中作者使用的 Django 版本是 1.7,而我使用的是1.9.7版(官網已經更新到1.10了)。這就導致書中給出的代碼可能有“過時”的部分。 比如,下麵是第三章一個單元測試 的代碼,運 ...
  • 題目描述有以下幾個問題:1 給定正整數 求方程 的最小非負整數解。2 給定正整數 求方程 的最小非負整數解。3 給定正整數 求方程 在模 意義下解的數量。4 給定正整數 求 的值。其中 是歐拉函數, 是莫比烏斯函數。輸入格式輸入文件共四行,按上述描述中四個問題的順序,給出每個問題。第一行三個正整數 ... ...
  • 初衷:本人初學SpringMVC的時候遇到各種稀奇古怪的問題,網上各種技術論壇上的帖子又參差不齊,難以一步到位達到配置好的效果,這裡我將我配置的總結寫到這裡供大家初學SpringMVC的同僚們共同學習使用! ...
  • 因為打算全屏顯示一個對話框,而對話框內有幾個QLabel的尺寸要在確定QLabel可用的最大尺寸後,再根據內容調整一次,所以在對話框構造函數內就想確定QLabel的最大尺寸,但因為QWidget::updateGeometry()和QWidget::update()都只能用於可見的控制項,所以如何在控 ...
  • 學習地址:http://www.rm5u.com/ 或 http://www.runoob.com/ iPhone或iTouch的寬為320像素,高為480像素,狀態欄高為20像素,toobar高為44像素,tabbar高為49像素,導航欄高為44像素。 typealias:類型別名對當前的類型定義 ...
  • thinkphp配置文件路徑在入口文件index.php中配置。 如果Public目錄在應用程式目錄同等級位置: 2.如果Public在app內部則: 3.如果使用Public在app外部,但定義為: ...
  • "390. Elimination Game題解" 隨便寫幾個小例子查看,發現每次數字個數減少一半,每一層的數之間的間隔相等,然後考慮模擬刪除過程,需要記錄如下幾個變數 1. 每一層的第一個數 2. 當前層的數字個數 3. 當前層每兩個數字的間隔 然後依次模擬刪除,當個數只剩一個的時候返回,然後考慮 ...
  • 一般來說,字元串、數組、資料庫類的函數是相對來使用比較多的類別。// 時間日期 //y返回年最後兩位,Y年四位數,m月份數字,M月份英文。d月份幾號數字,D星期幾英文$date=date("Y-m-d");//include,include_once.require,require_once//re ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...