由于是用来测试的, 可能有些会用php7的语法来写, 不过未来的主流肯定是php7, 就像现在的主流是5.6一样, PHP7 的性能无疑是超越了5.6一大截。
练习的时候我们可以使用php内置的http服务器,来减少部署的时间, 将php7加入到环境变量中, 在需要执行的目录中运行
php -S 127.0.0.1:80
字符串类
/**
* 翻转字符串
* @param string $str
* @return string
* @throws Exception
*/
function reverse(string $str) :string {
if (!function_exists('mb_strlen')){
throw new Exception('mbstring module not found.');
}
$reject = [];
for ( $len = mb_strlen($str); $len >= 0; --$len ){
$reject[] = mb_substr($str, $len, 1, 'utf8');
}
return implode($reject);
}
/**
* 解析url请求的文件类型
* @param string $url
* @return string
*/
function getExt(string $url) :string {
$path = parse_url($url)['path'];
return pathinfo($path)['extension'];
}
文件相关
/**
* 使用generate 遍历路径下的所有文件(生成器)
* @param $dirpath
* @return Generator
*/
function listall (string $dirpath) {
$obj = new DirectoryIterator($dirpath);
foreach ($obj as $file) {
if ($file->isDot()) continue;
if ($file->isDir()) {
foreach (listall($file->getRealPath()) as $item)
yield $item;
}
yield $file;
}
}
foreach (listall('./') as $item)
{
echo $item->getRealPath() . PHP_EOL;
}
数学计算
/**
* 对一个数进行因式分解, 返回分解后的数组
* @param int $num
* @return array
*/
function factorization(int $num) {
$num = abs($num);
$res = [];
$i = 2;
while (true){
if ($num%$i == 0){
$num /= $i;
$res[] = $i;
}elseif($i<$num){
$i++;
}else{break;}
}
return $res;
}
/**
* 求两个数的最大公约数
* @param int $a
* @param int $b
* @return int
*/
function max_divisor2(int $a, int $b)
{
if($b==0) return $a;
return max_divisor2($b,($a%$b));
}
/**
* 求任意多个数的最大公约数
* @return int
*/
function max_divisors(){
$args = func_get_args();
rsort($args);
$a = array_pop($args);
$b = array_pop($args);
$max = max_divisor2($a, $b);
foreach ($args as $num){
$max = max_divisor2($max, $num);
}
return $max;
}