那些奇技淫巧

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

同样,也会返回一个致命错误,提示返回类型有误。

不得不说,这些新特性,掌握之后,对编程还是有不小帮助的,天知道在写接口时,报错有多少次就是因为数据不统一。

猜你喜欢

转载自blog.csdn.net/MShuang6666/article/details/78136624