那些奇技淫巧
阿新 • • 發佈:2018-11-05
1.交換兩個變數的值。
分析:常用的做法是新增第三個變數來作為中介完成,這裡分享一個不太常用的做法:
變數為字串時:
$a = "hello";
$b = "php";
list($a,$b) = array($b,$a);
或者:
$a = $a.$b;
$b = strlen($a);
$b = substr($a,0,(strlen($a)-$b));
$a = substr($a,strlen($b));
變數值為數字時:
$a=$a+$b;
$b=$a-$b;
$a=$a-$b;
可以取a=4,b=5代入,進行驗證。
對上述兩種情況有一個通用的方法:
$a = array($a,$b);
$b = $a[0];
$a = $a[1];
2.不使用php內建方法獲取到一個字串的長度
$str = "hello php";
for($length=0;true;$length++) {
if(!isset($str[$length])) {
break;
}
}
echo $length;//輸出$str的長度:9
3.利用php內建函式完成多級目錄的遞迴建立
分析:由於老版本(version<5.0)的mkdir函式不能夠遞迴建立目錄,因此需要找到新的解決方案。
方法1:
喜大普奔,新版本的mkdir已經可以遞迴建立目錄了(^_^),只需要將第三個引數設定為true即可。
方法2:
那麼對於舊版本該如何建立呢?下面給出解決程式碼(十分精簡的遞迴程式碼)
<?php
$path = 'D:/QQ/files/temp/tests';
function recursive($path)
{
if(is_dir($path)){
return true;
}else {
recursive(dirname($path));
mkdir($path);
}
}
4.php7.0新特性
php作為一門弱型別語言,函式的傳入與傳出的引數型別一直都比較隨意,看了一些書籍後,發現統一引數的型別是非常有必要的。好在新版本的PHP已經支援規定引數格式了。示例如下:
function TypeDeclare(array $param): array
{
return $param;
}
$ret = TypeDeclare('this only test');
print_r($ret);
當傳入的引數不符合預期時,會報錯:
Fatal error: Uncaught TypeError: Argument 1 passed to TypeDeclare() must be of the type array, string given, called
再測試返回資料格式不符合預期的情況:
function TypeDeclare(string $param): array
{
return $param;
}
$ret = TypeDeclare('this only test');
print_r($ret);
同樣,也會返回一個致命錯誤,提示返回型別有誤。
不得不說,這些新特性,掌握之後,對程式設計還是有不小幫助的,天知道在寫介面時,報錯有多少次就是因為資料不統一。