02-PHP的流程控制与模板语法

1、PHP的值传递

<?php

namespace _0809;

//变量命名与js规则一样

//变量赋值

//1.默认:值传递

$username = '朱老师';

//更新

$myname = $username;

printf('$username=%s | $myname = %s',$username,$myname);

echo '<hr>';

//2.引用传递
//变量前:&取地址符,表示引用

//引用传递,会同步更新原始变量,因为你引用的是同一个变量.
//其实引用传递,并没有创建新变量,而是给原始变量,起了一个别名
//所以可以给同一个变量,起多个别名,是完全可以的,大家可以试试看.
$yourName = &$username;

$yourName = '张老师';

printf('$username=%s | $yourName = %s<br>',$username,$yourName);

上述运行结果:

2、PHP数据类型 

<?php

namespace _0809;

//数据类型

//1.基本类型:不可再分

//数值类型:int(整形),float(浮点型)
$age = 20;
$price = 88.88;

//string
$username = 'admin';

//boolean

$isDel = true;

//-----------------------

//2.复合类型

//数组
$arr = [20, 'admin', true];

//对象

// class Demo{};

// $obj = new Demo();

//或者用匿名类的方式声明类

//new的时候要传参,参数会传递给构造函数

$obj = new class(15000)
{
  public float $salary;
  //!构造函数要用两个下划线+construct
  public function __construct(float $salary)
  {
    //设置属性初始值
    $this->salary = $salary;
  }
};

echo gettype($obj);

echo '<br>';
echo $obj->salary .'<br>';

//null
//null:表示变量没有值
//三种情况为null
//1.赋值null,2.没赋值,3.被销毁unset()
$x = null;
$x = 123;
// unset($x);
echo gettype($x) . '<br>';

//资源类型
$f = fopen('demo1.php','r');
echo gettype($f) . '<br>';

//回调类型callback
//php用字符串来传递函数,所以可以以任何形式传递函数.
//所以回调函数不仅包括函数,还包括对象方法,静态类方法等.
//接收回调的函数很多,例如前面遇到的array_filter

function hello(string $name,float $salary): string
{
  return 'Hello' . $name . ',工资是' . $salary;
};
echo hello('王老师',12345) . '<br>';

//也可以用回调的方式来执行
//echo call_user_func(函数名,参数列表) 调用用户的自定义函数
echo call_user_func('_0809\hello','张老师',56789) . '<br>';

//!在有命名空间的条件下会报这样一个错

//!Warning: call_user_func() expects parameter 1 to be a valid callback, function '
//!barber' not found or invalid function name in

//如果想不报错,需要在函数名前面加 命名空间名\
//命名空间就是在函数 方法前面拼接了命名空间的字符串 在函数的 hashtable里名字已经变成 命名空间拼接上 函数名 

//call_user_func还支持数组传参_array
$params = ['张老师',56789];
echo call_user_func_array('_0809\hello',$params) . '<br>';

/**
 * call_user_func(函数名,参数列表)
 * call_user_func_array(函数名,[参数列表...])
 * 哪怕只有一个参数,也尽量使用第二种
 * 这个函数参数可以有三个来源
 * 1.用户自定义的函数
 * 2.对象方法
 * 3.类方法/静态方法
 */

 //如果这个函数来自对象方法

 class Demo1{
  public function hello(string $name):string
  {
    return 'Hello ,' . $name;
  }
 }
 $obj = new Demo1;
 //由于hello不是一个全局函数,是一个对象方法,所以要写道数组里[对象,对象中的方法]
 echo call_user_func_array([$obj,'hello'],['刘老师']) . '<br>';

 //如果这个函数来自:类方法(静态方法)

class Demo2
{
    public static function hello(string $name): string
    {
        return 'Hello ,' . $name;
    }
}
 echo call_user_func_array(['_0809\Demo2','hello'],['王老师']) . '<br>';

上述运行结果:

  

3、PHP流程控制

<?php

namespace _0809;

//流程控制:分支

//单分支
$age = 25;
if($age >= 18){
    echo '已成年,可以观看<hr>';
}
//双分支
if($age >= 18){
    echo '已成年,可以观看<hr>';
}else{
    //默认分支
    echo '未成年,请在父母陪同下观看<hr>';
}
//双分支语法糖:三元运算符
//条件?true:false

echo $age >=18?'已成年,可以观看<hr>' : '未成年,请在父母陪同下观看<hr>';
//多分支

if($age >=18 && $age < 30){
    echo "{$age}岁,彩礼能按揭吗?<hr>";
}else
if($age >=30 && $age < 45){
    echo "{$age}岁,应该成个家了<hr>";
}else
if($age >=45 && $age<100){
    echo "{$age}岁,房贷快还完了<hr>";
}else
if($age >=100 || $age<=0){

}
else{
    echo "{$age}岁,我送你回家<hr>";
}
//多分支语法糖:switch
$age = 43;
switch ($age){
    case $age >=18 && $age < 30 :
        echo "{$age}岁,彩礼能按揭吗?<hr>";
        break;
    case $age >=30 && $age < 45 :
        echo "{$age}岁,应该成个家了<hr>";
        break;
    default:
    echo "{$age}岁,我送你回家<hr>";
}
/**
 * 分支
 * 1.单分支
 * 2.双分支:三元
 * 3.多分支:switch
 */

上述运行结果:

4、PHP循环 

<?php

namespace _0809;
//循环的本质还是分支
$colors = ['red', 'green', 'blue'];
$i = 0;
echo '数组长度', count($colors), '<hr>';
$list = '<ul style="border:1px solid orange">';

//php中.是连接字符串用的,“.=”就是将等号后面的字符串加至变量str的尾部,
//那是一个循环,就是不停的为str变量增加字符串,直到条件为假。

if ($i < count($colors)) {
    $list .= "<li>{$colors[$i]}</li>";
}
// $i +=1;
$i++;

if ($i < count($colors)) {
    $list .= "<li>{$colors[$i]}</li>";
}
$i++;

if ($i < count($colors)) {
    $list .= "<li>{$colors[$i]}</li>";
}
$i++;

$list .= '</ul>';

/**
 * 循环三要素
 * 1.$i = 0 初始化
 * 2.$i < count($colors),循环条件
 * 3.$i++,更新循环条件.否则进入到死循环
 */
$list .= '<ul style="border:1px solid">';
//1.$i = 0 初始化
$i = 0;
//2.$i < count($colors),循环条件

//while是入口判断
while ($i < count($colors)) {
    $list .= "<li>{$colors[$i]}</li>";
    //3.$i++,更新循环条件.否则进入到死循环
    $i++;
}
$list .= '</ul>';

$list .= '<ul style="border:1px solid red">';

//1.$i = 0 初始化
$i = 0;
//2.$i < count($colors),循环条件
//do while是出口判断
//出口判断条件为false,也会执行一遍
do {
    $list .= "<li>{$colors[$i]}</li>";
    //3.$i++,更新循环条件.否则进入到死循环
    $i++;
} while ($i < count($colors));
$list .= '</ul>';

$list .= '<ul style="border:1px solid green">';

for ($i = 0; $i < count($colors); $i++) {
    // if($i>1){
    //     break;
    // }
    //break直接结束循环
    //continue跳过某次循环,提前进入下一次
    if ($i === 1) {
        continue;
    }
    $list .= "<li>{$colors[$i]}</li>";
}
$list .= '</ul>';
echo $list;

上述运行结果:

 5、PHP数组遍历

<?php
//数组遍历
namespace _0809;

//1.索引数组:键名默认是从0开始递增的正整数(键名是数值类型)
//完整的声明语法

//$colors = ['0'=>'red','1'=>'green','2'=>'blue'];

//也可以用默认的键名,不写键名
$colors = ['red','green','blue'];
print_r($colors);

printf('<pre>%s</pre>',print_r($colors,true));

//2.关联数组:键名是字符串(语义化)
$user = ['10'=>5,'1'=>'朱老师','20'=>88];
//因为默认是数值,所以不写引号也可以
$user = [10=>5,1=>'朱老师',20=>88];

print_r($user);

//也可以把索引换成有意义的字符串

$user = ['id'=>5,'name'=>'朱老师','score'=>88];

printf('<pre>%s</pre>',print_r($user,true));

echo $user['name'];

/**
 * $arr[$key]
 * $key:数值->索引数组
 * $key:字符串->关联数组
 */
echo '<hr>';

//数组的遍历:while for
//数组的专用遍历语法:foreach
//foreach($arr as $key=>$value){...}
foreach($colors as $value){
    echo $value . '<hr>';
}
foreach($colors as $key=>$value){
    printf('[%s]=>%s <br>',$key,$value);
}
echo '<hr>';
foreach($user as $key=>$value){
    printf('[%s]=>%s <br>',$key,$value);
}
echo '<hr>';

//二维数组
//因为从数据表中的查询结果,php用二维数组来表示

$user = [
    0=>['id'=>5,'name'=>'朱老师','gender'=>0,'score'=>88],
    1=>['id'=>6,'name'=>'张老师','gender'=>1,'score'=>56],
    2=>['id'=>7,'name'=>'刘老师','gender'=>0,'score'=>78],
];
printf('<pre>%s</pre>',print_r($user,true));

//foreach + table 渲染到页面中
$table = '<table border="1" width="400" cellspacing="0",cellpadding="3" align="center">';
$table .= '<caption>用户信息表</caption>';
$table .= '<thead bgcolor="#ccc"><tr><th>ID</th><th>用户名</th><th>性别</th><th>年龄</th>';
$table .= '<tbody align="center">';

//遍历
foreach($user as $user){
    // print_r($user);
    $table .= '<tr>';
    $table .= "<td>{$user['id']}</td>";
    $table .= "<td>{$user['name']}</td>";
    $table .= '<td>' . ($user['gender']?'女':'男') . '</td>';
    $table .= '<td>' . $user['score'].'</td>';
    $table .= '</tr>';
}

$table .= '</tbody>';
$table .= '</table>';
//打印表格到页面中
echo $table;

上述运行结果:

 

 6、用二维数组来模拟数据表查询结果

<?php

namespace _0809;
//用二维数组来模拟数据表查询结果
$stus = [
    ['id' => 1, 'name' => '刘备', 'course' => 'js', 'score' => 83],
    ['id' => 2, 'name' => '关羽', 'course' => 'php', 'score' => 75],
    ['id' => 3, 'name' => '张飞', 'course' => 'js', 'score' => 52],
    ['id' => 4, 'name' => '孙权', 'course' => 'php', 'score' => 88],
    ['id' => 5, 'name' => '周瑜', 'course' => 'js', 'score' => 65],
    ['id' => 6, 'name' => '孔明', 'course' => 'php', 'score' => 53],
    ['id' => 7, 'name' => '赵云', 'course' => 'js', 'score' => 63],
    ['id' => 8, 'name' => '马超', 'course' => 'php', 'score' => 77],
    ['id' => 9, 'name' => '姜维', 'course' => 'js', 'score' => 93],
    ['id' => 10, 'name' => '黄忠', 'course' => 'php', 'score' => 41],
];
?>
<!DOCTYPE html>
<html lang="en">

<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>学生信息管理系统</title>
    <style>
        table {
            border-collapse: collapse;
            width: 360px;
            text-align: center;
        }

        table th,
        table td {
            border: 1px solid #000;
            padding: 5px;
        }

        table caption {
            font-size: 1.3em;
        }

        table thead {
            background-color: lightcyan;
        }

        .active {
            color: red;
        }
    </style>
</head>

<body>
    <table>
        <caption>学生成绩表</caption>
        <thead>
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>课程</th>
                <th>成绩</th>
            </tr>
        </thead>
        <tbody>
            <?php
            //遍历数据表的内容,并渲染到页面中
            //{=>:
            //}=>endforeach,endfor
            foreach ($stus as $stu) : ?>
                <tr>
                    <!-- <td>
                        <?= $stu['id'] ?>
                    </td>
                    <td>
                        <?= $stu['name'] ?>
                    </td>
                    <td>
                        <?= $stu['course'] ?>
                    </td>
                    <td>
                        <?php echo $stu['score'] ?>
                    </td> -->
                    <?php if ($stu['score'] >= 70) : ?>
                        <td>
                            <!-- 短标签 -->
                            <?= $stu['id'] ?>
                        </td>
                        <td>
                            <?= $stu['name'] ?>
                        </td>
                        <td>
                            <?= $stu['course'] ?>
                        </td>
                        <td>
                            <?php echo $stu['score'] ?>
                        </td>
                    <?php endif ?>
                </tr>
            <?php endforeach?>
            <?php
            /**
             * 流程控制的替代语法/模板语法
             * 1.foreach -> endforeach
             * 2.for -> endfor
             * 3.if -> endif
             * 4.switch -> endswitch
             */
            ?>
        </tbody>
    </table>
</body>

</html>

 上述运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七色的天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值