PHP基础(常量、双引号、数组、分支控制)
一、常量的创建与访问
- 常量是一种特殊的变量, 仅允许初始化一次, 不允许更新, 可以理解为只读变量
- 常量没有作用域限制, 在编程的时候非常有用, 经常用来表示状态, 或数据共享
- 常量不是变量, 不需要”$”, 但是常量名仍然要遵守PHP标识符的命名规范
1、使用define()函数创建常量
2、使用const指令创建常量
3、常量的访问
4、两种创建方法的不同之处
define
不可以创建类常量,const
可以创建类常量
class A
{
//const可以创建类常量
const NATION = 'CHINA';
//define不可以创建类常量
//会报错
//define('USER_NAME', 'admin');
}
echo A::NATION,'<br>';
define
可以使用表达式, 而const
中能用字面量
实例代码:
$domain = 'php.cn';
//define可以使用表达式,
define ('MY_EMAIL', 'admin@' . $domain);
echo MY_EMAIL, '<br>';
const NEW_EMAIL = 'admin@' . domain;
//报错
- 代码解析效果:
二、双引号对变量和特殊字符的处理方式
- 单引号: 内部的值,按字面量的形式进行处理
- 双引号: 内部的值, 将被解析,如果值是变量名或者特殊字符,会被解析出来
实例
//单引号中的内容会原样输出,不解析内部的变量和特殊字符
echo '$name\t的值是\t$name <br>';
//双引号中的特殊字符会被解析
echo "$name\t的值是\t$name <br>";
//不希望第一个变量被解析,可以能过在变量前添加转义字符“\”
echo "\$name\t的值是\t$name <br>";
//在单引号或双引号中引用自身,也是通过转义字符
echo '$name\t的值是\t\'$name\' <br>';
echo "\$name\t的值是\t\"$name\" <br>";
//在字符串中输出转义字符
echo "\\$name" , '<br>';
//双引号中的变量标识符如果与其它字符串连接在一起会引起解析错误
echo "\$name\t的值是$namehello <br>";
//处理办法
echo "\$name\t的值是{$name}hello <br>";
三、索引数组和关联数组的常用操作
1、创建数组(两种)
- 逐个添加: 将每一个元素,通过赋值的方式, 直接添加/追加到数组中
- 字面量: 将多个数组元素放在一对中括号
[]
中, 多个元素之间用逗号分隔开
创建索引数组
//赋值,把'user1[0]看成变量名'
$user1[0] = 10;
$user1[1] = 'admin';
$user1[2] = 'admin@php.cn';
//查看全部元素
//不行,输出类型
echo $user1 . '<br>';
//查看类型
echo gettype($user1) . '<br>';
//加'true'参数,返回成字符串
$str = print_r($user1, true) . '<br>';
echo gettype($user1) . '<br>';
//<pre>标签格式化
echo '<pre>' . print_r($user1, true) . '</pre>' . '<br>';
<?php
//键名连续,整数可省略
$user2[] = 10;
$user2[] = 'admin';
$user2[] = 'admin@php.cn';
//追加
$user2[] = 'php中文网';
echo '<pre>' . print_r($user2, true) . '</pre>';
- 字面量: 将多个数组元素放在一对中括号
[]
中, 多个元素之间用逗号分隔开
$user1[0] = 10;
$user1[1] = 'admin';
$user1[2] = 'admin@php.cn';
$user2[] = 10;
$user2[] = 'admin';
$user2[] = 'admin@php.cn';
//追加
$user2[] = 'php中文网';
//通过字面量一次添加多个元素
$user3 = [20, '*jack', 'jack@php.cn'];
echo '<pre>' . print_r($user3, true) . '</pre>';
//如果想获取到变量或数组的更多 信息,可以 使用var_dump()——可以同时输出多个
var_dump($user1, $user2,$user3);
访问索引数组
$user2[] = 10;
$user2[] = 'admin';
$user2[] = 'admin@php.cn';
//访问索引数组的某个元素,当成变量echo输出
echo $user2[2], '<br>';
- 遍历索引数组:foreach
- 遍历过程:相当于把数组元素的值,临时赋值给变量$value,然后echo输出
$user2[] = 10;
$user2[] = 'admin';
$user2[] = 'admin@php.cn';
$user2[] = 'php中文网';
//遍历索引数组:foreach
foreach ($user2 as $value) {
echo $value, '<br>';
}
数组元素与变量之间的转换——mvc模板赋值用到
- list 语法结构:
- list不是函数,是语言结构,与echo类似
- 函数绝对不允许放在等号左边接受赋值
$user3 = [20, 'jack', 'jack@php.cn'];
list($id, $name, $email) = $user3;
echo "id=>$id, name=>$name, email=>$email <br> ";
将索引数组转为字符串——数组存储到数据库用到
$user3 = [20, 'jack', 'jack@php.cn'];
$str = implode(',', $user3);
//第一个参数:分隔;
echo gettype($str), ' : ', $str, '<br>';
//sql语句
$sql = "INSERT 'users' SET 'comment' = ${str}";
将一个字符串,再转换成索引数组
//将一个字符串,再转换成索引数组
$str = 'html=css=js=php=laravel';
$arr = explode(',', $str);
//第一个参数:分隔;
echo '<pre>' . print_r($arr, true) . '</pre>';
——————————————————————————————————————————————
创建关联数组
//通过赋值的方式, 直接添加/追加到数组中
$products1['id'] = 100;
$products1['name'] = '手机';
$products1['price'] = 5000;
echo '<pre>' . print_r($products1, true) . '</pre>';
$products2 = ['id'=>105, 'name'=> '电脑', 'price'=>9000];
//也用foreach()遍历
foreach ($products2 as $value) {
echo $value , '<br>';
}
//输出键名+键值
foreach ($products2 as $key=>$value) {
echo "['$key'] => $value <br>";
}
关联数组与变量之间的转换
$products2 = ['id'=>105, 'name'=> '电脑', 'price'=>9000];
//关联数组与变量之间的转换
extract($products2);
//没有创建'$id,$name,$price'也能调用
echo "id=>$id, name=>$name, price=>$price <br>";
将一些独立的变量,组装成一个关联数组
$dsn = 'mysql:host=localhost;dbname=php';
$username = 'root';
$password = 'root';
$linkParams = compact('dsn', 'username', 'password');
//compact参数对应变量名
echo '<pre>' . print_r($linkParams, true) . '</pre>';
剩余参数
$dsn = 'mysql:host=localhost;dbname=php';
$username = 'root';
$password = 'root';
function connect(...$linkParams)
{
// 返回的是索引数组
print_r($linkParams);
}
connect($dsn, $username, $password);
将关联数组转索引数组
$products2 = ['id'=>105, 'name'=> '电脑', 'price'=>9000];
$indexArr = array_values($products2);
echo '<pre>' . print_r($products2, true) . '</pre>';
echo '<pre>' . print_r($indexArr, true) . '</pre>';
多维数组
- 数组元素, 除了可以是原始类型, 也可以还是一个数组, 这时就形成也多维数组
- 从数据表中的读取的记录, php会转为二维数组, 日常开发, 二维数组用得最多
$users = [
['id'=> 101, 'name'=> '小王', 'grade'=> 88],
['id'=> 102, 'name'=> '小张', 'grade'=> 78],
['id'=> 103, 'name'=> '小李', 'grade'=> 68],
];
// 访问一个
echo $users[1]['name'], '<br>';
//遍历
foreach ($users as $user) {
// print_r($user);echo '<br>';
//'{}'包装
echo "id=>${user['id']}, name=>${user['name']}, price=>${user['grade']} <br>";
}
——————
四、分支控制的所有形式的基本实现
if
: 单分支
- 语法格式:
if (expr)
statement - expr:条件; statement: 执行语句
//实例:如果$a大于$b, 则输出:“a大于b”
$a = 15;
$b = 13;
if ($a > $b)
echo "a大于b";
if - else
: 双分支
if (expr)
statement1
else
statement2
/*
* 如果表达式expr为真,执行statement1
* 如果表达式expr为假,执行statement2
* */
// 单价
$price = 50;
// 金额
$total = 0;
// 折扣率
$discount = 1;
//数量
$count = 16;
//$count = 3;
if ($count >= 10 && $count < 20) {
$discount = 0.9;
} else {
$discount = 1;
}
$total = $count * $price * $discount;
echo "购买数量: $count, 总金额: $total, 折扣率: $discount <hr>";
if - elseif - else
: 多分支
// 3. 多分支
$count = 5;
$count = 15;
$count = 25;
$count = 35;
if ($count >= 10 && $count < 20) {
$discount = 0.9;
} elseif ($count >= 20 && $count < 30) {
$discount = 0.8;
} elseif ($count >= 30) {
$discount = 0.7;
} else {
$discount = 1;
}
$total = $count * $price * $discount;
echo "购买数量: $count, 总金额: $total, 折扣率: $discount <hr>";
switch - case - break
: 多分支简化方案
// 单价
$price = 50;
// 金额
$total = 0;
// 折扣率
$discount = 1;
// 4. switch(), 简化多分支
$count = 8;
switch (true) {
case $count >= 10 && $count < 20:
$discount = 0.9;
break;
case $count >= 20 && $count < 30:
$discount = 0.8;
break;
case $count >= 30:
$discount = 0.7;
break;
default:
$discount = 1;
}
$total = $count * $price * $discount;
echo "购买数量: $count, 总金额: $total, 折扣率: $discount <hr>";
年底比较忙; 掉队了,只能争取利用过年时间来赶了,用周未时间先补上一天的的作业了。
php以前自学过一段时间,也可能是因为才刚开始,感觉还不难。
Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:其实群中几乎每一个同学, 都或多或少有些基础的, 有一些甚至就中程序员, 咱们教的知识 , 都是大家在工作中经常会用到, 但却常常会犯错的地方....你有一些基础, 更应该对自己狠一点
对于引号中数据的处理, 非常重要, 建议自己再多做一些练习...