<?php
// 一个页面就是一个应用程序, 相当于exe, 可以被执行,只不过在服务器执行
// ? (一). 变量
// 1. 声明
// 类型由值决定,命名规范与js一样,只不过前面加上 $
$number = '123';
// 2. 查看
echo $number . '<br>';
// 3. 查看值和类型
var_dump($number);
echo '<br>';
// 函数
// 1. 声明与js是一样,但是可以限定参数与返回值的类型
function getUsername(string $number): string
{
return 'Hello, ' . $number;
}
// 2. 调用,与js一样
echo getUsername('234') . '<br>';
// 3. 参数不足: 默认值
function getTotal(float $price, int $num = 1): float
{
return $price * $num;
}
echo '总金额: ' . getTotal(68.5) . ' 元 <br>';
echo '总金额: ' . getTotal(68.5, 5) . ' 元 <br>';
// 在js中, 有模板字面量,可以使用插值表达式,变量,函数
// 在php中,也有类似的模板,不过有二个限制
// 1. 必须用双引号声明
// 2. 只解析变量
echo "总金额: getTotal(68.5, 5) 元 <br>";
// 声明一个匿名函数/函数表达式
$getTotal = function (float $price, int $num = 1): float {
return $price * $num;
};
// echo "总金额: $getTotal(68.5, 5) 元 <br>";
// 应该告诉模板,这是一个变量,要一个界定标准,边界
echo "总金额: {$getTotal(68.5, 10)} 元 <br>";
$total = $getTotal(68.5, 10);
echo "总金额: {$total} 元 <br>";
// echo "总金额: ${total} 元 <br>";
// 4. 参数过多, js 剩余参数 ...rest
$sum = function (float $a, float $b, float $c): float {
return $a + $b + $c;
};
echo $sum(3, 4, 5), '<br>';
echo $sum(3, 4, 5, 6, 7), '<br>';
$sum = function (...$args) {
// print_r($args);
// [1,2,3].reduce(....)
return array_reduce($args, function ($acc, $cur) {
return $acc + $cur;
}, 0);
};
echo $sum(3, 4, 5, 6, 7);
// 5. 返回值
// return : 默认返回单值
// 返回多值: 数组/对象
$arr = [33, 2, 54, 7, 12, 23, 9];
function getItems(array $arr, $value): array
{
// 在js中, 外部 变量自动穿透到内部,闭包
// 在php回调方法中,使用外部变量,用use进行声明
return array_filter($arr, function ($item) use ($value) {
return $item > $value;
});
}