從 PHP5.2 升級到 PHP7.1 遇到的函式引數問題

colbertwong發表於2018-03-22

最近在做一個系統的ID管理系統php升級,從php5.2升級到php7.1,經常會遇到一些問題。今天遇到一個小問題,拿出來分享一下。廢話少說,上示例程式碼。

SC.php

<?php

class SC {
    static function out($str) {
        echo 'input str:' . $str;
    }
}

// 有引數呼叫
SC::out('one param');
// 無引數呼叫
SC::out();
  • php5.2中的實行結果:

         input str:one param
         Warning: Missing argument 1 for SC::out(), called in C:\Users\colbe\Documents\SC.php on line 11 and defined in   C:\Users\colbe\Documents\SC.php on line 4
         input str:
  • php7.1中的實行結果:

    input str:one param
    Fatal error: Uncaught ArgumentCountError: Too few arguments to function SC::out(), 0 passed in C:\Users\colbe\Documents\SC.php on line 11 and exactly 1 expected in C:\Users\colbe\Documents\SC.php on line 4
    
    ArgumentCountError: Too few arguments to function SC::out(), 0 passed in C:\Users\colbe\Documents\SC.php on line 11 and exactly 1 expected in C:\Users\colbe\Documents\SC.php on line 4
    
    Call Stack:
    0.0069     348536   1. {main}() C:\Users\colbe\Documents\SC.php:0
    0.0088     348568   2. SC::out() C:\Users\colbe\Documents\SC.php:11

Warning變Fatal,直接就崩了。修改倒是很簡單,給函式的引數加個預設值就可以了。修改一下方法的簽名部分為[static function out($str = null) {]就可以了。再次執行,結果如下:

    input str:one paraminput str:

我擦,才發現木加換行!就這樣吧,太晚了,睡覺去了。

PS:來自TimJuly的重要提示:

TimJuly  1  ⋅ 
#1 ⋅ 2小時前
說白了就是程式碼不規範。Warning 是錯誤的一種型別,並不是說你這個沒有錯,可以這樣用。就算是 Notice 的錯誤也應該處理完再上線。
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章