1.常量的创建与访问
- 常量是一种特殊的变量,只能初始化一次,不允许更新。没有作用域限制,常量不是变量不需要”$”,但是常量还是要遵守php标识符的命名规范
- 常量的创建有两种方式: 函数:
define()
以及 指令:const
。两者的相同之处是都可以定义常量,不同之处是define()
可以使用表达式,而const
中能用字面量
<?php
//define()创建常量
define('APP_NAME','淘宝');
//const创建常量
const APP_PATH = 'app/admin/index/index.php';
echo APP_NAME ,'<br>', APP_PATH ,'<br>';
//define()与const的不同之处
//1.const可以创建类常量而define不能
class A
{
const NATION = 'USA';
//define('USER_NAME','admin');
}
echo A::NATION,'<br>';
//2.define()定义的常量允许使用表达作为值,而const只能用字面量
$domain = 'qq.cn';
define('MY_EMAIL','admin@'.$domain);
echo MY_EMAIL,'<br>';
//const MY_EMAIL = 'admin@qq.cn'
2.双引号对变量和特殊字符的处理方式
- 双引号内部的值如果是变量名或者特殊字符会被解析出来。单引号内部的值按字面量的形式进行处理。
<?php
//双引号的变量盒特殊字符会被解析
$name = 'oyster';
echo "$name\t的值是\t$name <br>";
//如果不希望第一个变量被解析,使用转义字符,在第一个$name前加/
echo "\$name\t的值是\t$name <br>";
//如果想在双引号或者单引号中引用自身,也可以使用转义字符
echo '$name\t的值是\t\'$name\' <br>';
echo "\$name\t的值是\t\"$name\" <br>";
//在字符串中输出转义字符
echo "\\$name",'<br>';
//双引号中的变量标识符,如果和其他字符串连接在一起回引起解析错误
echo "\$name\t的值是\t$namehello <br>";
//将变量进行包装{}即可被解析
echo "\$name\t的值是\t${name}hello <br>";
echo "\$name\t的值是\t{$name}hello <br>";
3 索引数组与关联数组的常用操作
3.1 索引数组
<?php
// 1. 索引数组
// 1.1 创建索引数组
$user1[0] = 10;
$user1[1] = 'admin';
$user1[2] = 'admin@php.cn';
//查看全部元素,使用print_r()函数
print_r($user1);
//echo gettype($user1);获取变量类型
//print_r($user1,true);第二个参数设为true回返回给调用者
$str = print_r($user1,true);//保存到一个变量里
echo '<pre>' . $str . '</pre>'; //格式化
//可以省略键名
$user2[] = 10;
$user2[] = 'admin';
$user2[] = 'admin@php.cn';
$user2[] = 'oyster';
echo '<pre>' . print_r($user2,true) . '</pre>';
// 通过字面量一次性添加多个元素
$user3 = [20,'oyster','oyster@qq.com'];
echo '<pre>' . print_r($user3,true) . '</pre>';
// 如果想获取到变量或者数组元素的类型和值,可以使用var_dump()
var_dump($user1,$user2,$user3); echo '<br>'; echo '<br>'; //可打印多个数据
// 1.2 访问索引数组
// 访问某一个元素,当成变量
echo $user3[1],'<br>','<br>';
// 访问多个值,用foreach,$item是临时变量
foreach($user3 as $item)
{
echo $item,'<br>';
}
// 1.3 数组元素与变量之间的转换
$user3 = [20,'oyster','oyster@qq.com'];
list($id,$name,$email) = $user3;
//list()里面的变量名是用户自己定义的,list()是语言结构,不是函数
echo "id=>$id,name=>$name,email=>$email <br>";
// 1.4 将索引数组转为字符串:拉平一个数组,存到数据表里
$str = implode(',',$user3); //第一个参数是分割符,自己定义,这里用逗号分割
echo gettype($str), ':',$str ,'<br>';
//$sql = "INSERT `users` SET `comment`= ${str};
//将一个字符串,再转换成索引数组
$str = 'html,css,js,php,laravel';
$arr = explode(',',$str); //用逗号切割
echo '<pre>' . print_r($arr,true) . '</pre>';
?>
3.2 关联数组
// 2.关联数组
// 2.1 键名采用语义化的字符串,访问时不再依赖于元素在数组中的位置
$products1['id'] = 100;
$products1['name'] = '手机';
$products1['price'] = 5000;
echo '<pre>' . print_r($products1,true) . '</pre>';
echo '<br>';
// 2.2 字面量方式创建
$products2 = ['id'=>105,'name'=>'电脑','price'=>9000];
//也用foreach遍历
foreach($products2 as $value)
{
echo $value,'<br>';
}
//拿到键
foreach($products2 as $key=>$value)
{
echo "['$key'] => $value <br>";
}
// 2.3 关联数组与变量之间的转换
extract($products2); //使用extract()函数 将数组解析为一个一个变量
echo "id=>$id,name=>$name,price=>$price <br>";
//使用compact()函数,将一些独立的变量组装成一个关联数组
$dsn = 'mysql:hosr=localhost;dbname=php';
$username = 'root';
$password = 'root';
$linkParams = compact('dsn','username','password');
echo '<pre>' . print_r($linkParams,true) . '</pre>';
// 2.4 将关联数组转为索引数组 使用array_values() 它支取值,不取键
$indexArr = array_values($products2);
echo '<pre>' . print_r($products2,true) . '</pre>';
echo '<pre>' . print_r($indexArr,true) . '</pre>';
// 3. 多维数组
// 二维数组的创建
$users = [
['id'=>101,'name'=>'小智','grade'=>98],
['id'=>105,'name'=>'小刚','grade'=>99],
['id'=>106,'name'=>'小霞','grade'=>100],
];
//访问
echo $users[1]['id'],'<br>';
foreach($users as $user)
{
echo "id=>{$user['id']},name=>{$user['name']},price=>{$user['grade']} <br>";
}
4 分支控制的所有形式基本实现
<?php
//流程控制之分支
// 1 单分支
// 购买数量
$count = 15;
// 单价
$price = 50;
// 金额
$total = 0;
// 折扣率
$discount = 1;
if($count >=10 && $count < 20)
{
$discount = 0.9;
}
$total = $count * $price * $discount;
echo "购买数量:$count, 总金额:$total, 折扣率: $discount <hr>";
// 2. 双分支
$count = 25;
if($count >=10 && $count < 20)
{
$discount = 0.9;
}else{
$discount = 1;
}
$total = $count * $price * $discount;
echo "购买数量:$count, 总金额:$total, 折扣率: $discount <hr>";
// 3 多分支
$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>";
// 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>";
//switch()更多用于单值判断
$discount = 0.55;
$count = 8;
switch($discount)
{
case 1:
$total = $count * $price * 1;
break;
case 0.9:
$total = $count * $price * 0.9;
break;
case 0.8:
$total = $count * $price * 0.8;
break;
case 0.97:
$total = $count * $price * 0.97;
break;
default:
exit('不支持的折扣率');
}
?>