最近在做一個系統的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 協議》,轉載必須註明作者和本文連結