1. 程式人生 > >那些奇技淫巧

那些奇技淫巧

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);

同樣,也會返回一個致命錯誤,提示返回型別有誤。

不得不說,這些新特性,掌握之後,對程式設計還是有不小幫助的,天知道在寫介面時,報錯有多少次就是因為資料不統一。