• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

php第一课

Data: 2020-03-10 23:29:12Form: JournalClick: 0

demo1:php与html的关系
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>php与html的关系</title>
</head>

<body>
    <h2>Hello <span style="color:red">猪老师</span></h2>

    <!-- 换个姿势 -->

    <h2>Hello

        <!-- php标签,内部是php代码  -->
        <?php
        // 这是一段php代码
        echo '<span style="color:red">猪老师</span>';
        ?>

    </h2>

    <!--
        观察源码,发现二者无任何区别,从而得到出以下结论:
       
        1. html中所有元素必须以标签形式出现
        2. php做为元素嵌入到html中也要使用标签
        3. php与html混编时,必须使用双标签
        4. html代码中嵌入php代码,则扩展必须改为'php'
        5. html中的php代码,由服务器安装的php解析器执行
        6. php执行结果,最终以文本形式嵌入到html中,与为html一部分
        7. 嵌入到html中的php执行结果, 就和普通html代码一样可以被浏览器识别,解析
        8. php代码对前端浏览器来说是不可见的,安全的
     -->

</body>

</html>
demo2:变量与函数
<?php
// ! 纯php文件,不要加结束标签,除非与html混编

// ! 变量与函数

// 一个页面就是一个应用程序, 相当于exe, 可以被执行,只不过在服务器执行

// ? (一). 变量

// 1. 声明
// 类型由值决定,命名规范与js一样,只不过前面加上 $
$username = '猪老师';

// 2. 查看
echo $username . '<br>';

// 3. 查看值和类型
var_dump($username);
echo '<br>';

// 4. 可更新
$username = '牛老师';
echo $username . '<hr>';

// ? (二). 函数

// 1. 声明与js是一样,但是可以限定参数与返回值的类型,和TypeScript类似
function getUsername(string $username): string
{
    return 'Hello, ' . $username;
}

// 2. 调用,与js一样
echo getUsername('欧阳老师') . '<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;
    });
}

print_r(getItems($arr, 20));

/**
 * 总结
 * 1. 变量不用声明,直接用
 * 2. 使用双号号声明字符串模板中可嵌入变量
 * 3. 函数先声明,再调用
 * 4. 函数参数不足: 默认值
 * 5. 函数参数过多: 剩余参数...rest
 * 6. 函数默认单值返回,返回多值请用数组或对象
 */
demo3:查看与保存结果
<?php
// 查看与保存结果

// ! 1. echo
// echo 字符串,如果不是就转为string
// echo 用来输出计算结果的字符串表示, 或html
// echo '<h3 style="color:red">php中文网</h3>';
// echo 'hello , ' . [1, 2, 3] . '<br>';
// echo 'hello , ' . implode([1, 2, 3]) . '<br>';
// echo 'hello , ' . implode(', ', [1, 2, 3]) . '<hr>';

// ! 2. var_dump
// 值,类型,支持多个变量查询
// var_dump(10, 'php', [1, 2, 3], true);
// 不能用在生产环境/项目上线交付, 用在开发调试
echo '<hr>';

// ! 3. 格式化打印
// 数组格式化
$arr = ['red', 'green', 'blue'];
// var_dump($arr);
// echo '<br>';
// 只关心值
// print_r($arr);
// echo '<br>';
// print_r($arr),不应该直接打印,而是应该返回一个字符串
// 传入第二个参数true,就不会打印输出,而是返回
// echo '<pre>' . print_r($arr) . '</pre>';
echo '<pre>' . print_r($arr, true) . '</pre>';
// echo gettype(print_r($arr, true));

// C语言, 有一个printf(模板,模板中的变量)
// %s: string, %d: int, %f: float
printf('<pre>%s</pre>', print_r($arr, true));

// printf()需要只返回,不打印
echo sprintf('<pre>%s</pre>', print_r($arr, true));

printf('品名: %s, 单价: %.2f 元, 数量: %d 部<br>', '手机', 5000, 3);
$arr = ['手机', 5000, 3];
vprintf('品名: %s, 单价: %.2f 元, 数量: %d 部<br>', $arr);
// 它也有一个只返回不打印的版本
echo vsprintf('品名: %s, 单价: %.2f 元, 数量: %d 部<br>', $arr);

// PDO: DSN
// new PDO($dsn, $usrname,$password);
// $dsn = 'mysql:host=localhost;dbname=phpedu;port=3306;charset=utf8';
$params = ['mysql', 'localhost', 'phpedu', '3306', 'utf8'];
$dsn = vsprintf('%s:host=%s;dbname=%s;port=%s;charset=%s', $params);
$username = 'root';
$password = 'root';

echo $dsn;

$pdo = new PDO($dsn, $username, $password);

if ($pdo) echo '<h1>连接成功</h1>';

?>

<!-- <pre>
    床前明月光,
    我是郭德纲.
</pre> -->
demo4:值传递, 引用传递
<?php

// 值传递, 引用传递

$username = '猪老师';

// ! 1. 值传递
$myname = $username;

// echo $myname;
$myname = '牛老师';
// echo $myname;

printf('$username = %s | $myname = %s  <br>', $username, $myname);
echo $myname === $username ?  '相等' : '不相等', '<hr>';

// ! 2. 引用传递

// &
$yourname = &$username;

$yourname = '牛老师';

printf('$username = %s | $yourname = %s  <br>', $username, $yourname);
echo $yourname === $username ?  '相等' : '不相等', '<hr>';

// 其实引用就是给原变量起个别名,并没有创建新变量
Name:
<提交>