3-1、PHP—什么是常量
常量可以理解为值不变的量(如圆周率);
或者是常量值被定义后,在脚本的其他任何地方都不可以被改变。
php中的常量分为自定义常量和系统常量
自定义常量是根据我们开发的需要而定义的常量,
它通过使用php中的函数define()定义。
常量的命名规则与变量的一致,但是是不需要带美元符号的。
define()函数的语法格式为:
bool define(string $constant_name, mixed $value[, $case_sensitive = true])
它有3个参数:
第一个参数$constant_name为必选参数,常量名称,即标志符。
第二个参数$value为必选参数,它是常量的值。
第三个参数$case_sensitive为可选参数,指定是否大小写敏感,设定为true表示不敏感,一般不指定第三个参数的情况下,默认第三个参数的值为false。
(注:string表示参数类型为字符串类型, mixed表示参数类型可以接受为多种不同的类型, case_sensitive=true表示默认为布尔类型true)
代码示例
<?php
$p = "PII";
define("PI",3.14);
define($p,3.14);
echo PI; // 此结果为:3.14
echo "<br />";
echo PII; // 此结果为:3.14
?>
3-2、PHP-常量的作用
常量主要功效是可以避免重复定义,篡改变量值。
此外,使用常量还能提高代码的可维护性。
代码示例
<?php
define("PI",3.14);
$r=3;
echo "面积为:".(PI*$r*$r)."<br />";
echo "周长为:".(2*PI*$r)."<br />";
?>
3-3、PHP-认识一下系统常量
系统常量是php已经定义好的常量,我们可以直接拿来使用,
常见的系统常量有:
(1)、__FILE__:php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。
(2)、__LINE__:php程序文件行数。它可以告诉我们当前代码在第几行。
(3)、PHP_VERSION:当前解析器的版本号。它可以告诉我们当前php解析器的版本号,我们可以提前知道我们的php代码是否可被该php解析器解析。
(4)、PHP_OS:执行当前php版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。
代码示例
<?php
echo __FILE__;
echo "<br />";
echo __LINE__;
echo "<br />";
echo PHP_VERSION;
echo "<br />";
echo PHP_OS;
echo "<br />";
?>
3-4、PHP-常量如何取值
获取常量值的有两种方法取值。
第一种是使用常量名直接获取值;
第二种是使用constant()函数。
它和直接使用常量名输出的效果是一样的,但函数可以动态的输出不同的常量,在使用上要灵活、方便,其语法格式如下:
mixed constant(string constant_name)
第一个参数constant_name为要获取常量的名称,
也可为存储常量名的变量。
如果成功则返回常量的值,失败则提示错误信息常量没有被定义。
(注:mixed表示函数返回值类型为多种不同的类型,string表示参数类型为字符串类型)
代码示例
<?php
define("PI",3.14);
$r=1;
$area=constant("PI")*$r*$r; // 计算圆的面积
?>
<?php
$p="";
//定义圆周率的两种取值
define("PI1",3.14);
define("PI2",3.142);
//定义值的精度
$height = "中";
//根据精度返回常量名,将常量变成了一个可变的常量
if($height == "中"){
$p = "PI1";
}else if($height == "低"){
$p = "PI2";
}
$r=1;
$area = constant($p)*$r*$r; // 计算圆的面积
echo $area;
?>
3-5、PHP-如何判定常量是否被定义
defined()函数可以帮助我们判断一个常量是否已经定义,其语法格式为:
bool defined(string constants_name)
它只有参数constant_name,指的是要获取常量的名称,
若存在则返回布尔类型true,否则返回布尔类型false;
(注:bool表示函数返回值类型为布尔类型)
代码示例
<?php
define("PI1",3.14);
$p = "PI1";
$is1 = defined($p);
$is2 = defined("PI2");
var_dump($is1); // PI1已经被定义了,所以此结果为:bool(true)
var_dump($is2); // PI2没有被定义,所以此结果为:bool(false)
?>
第四章 PHP中常用的运算符
4-1、什么是运算符
运算符 是告诉php做相关运算的标识符号。
php运算符一般分为:
算术运算符 +加法、-减法、*乘法、/除法、%取模、-取反
赋值运算符 =赋值、&引用赋值、=>数组内赋值
比较运算符 ==等于、===全等、!=不等、<>不等、!==不全等、<小于、>大于、<=小于等于、>=大于等于
三元运算符 ?:三元比较运算
逻辑运算符 and逻辑与、or逻辑或、xor逻辑异或、!逻辑非、&&逻辑与、||逻辑或
字符串连接运算符 .连接运算符、.=连接赋值运算符
错误控制运算符 @错误控制运算符
4-2、PHP中的算术运算符
算术运算符 主要是用于进行算术运算的
算术运算符 名称 示例 结果 举例:
+ 加法 $a+$b $a和$b的和 3+4=7
- 减法 $a-$b $a和$b的差 6-4=2
* 乘法 $a*$b $a和$b的积 3*7=21
/ 除法 $a/$b $a和$b的商 8/2=4
% 取模 $a%$b $a除以$b的余数 6%3=0
取模算术符有啥用呢?
假设我们要在一个考场安排了一场考试,
对考生从1开始,都进行了编号,
那么怎么让服务器帮助我们计算考生在的位置呢,
进而打印考场的考生对照表呢?
代码示例
<?php
$maxLine = 4; //每排人数
$no = 17;//学生编号
$line = ceil($no/$maxLine);
$row = $no%$maxLine ? $no%$maxLine : $maxLine;
echo "编号<b>".$no."</b>的座位在第<b>".$line."</b>排第<b>".$row."</b>个位置"; // 此结果为:编号17的座位在第5排第1个位置
?>
4-3、PHP中的赋值运算符
php的赋值运算符有两种,分别是:
(1)"=":把右边表达式的值赋给左边的运算数。
它将右边表达式值复制一份,交给左边的运算数。
换而言之,首先给左边的运算数申请了一块内存,
然后把复制的值放到这个内存中。
(2)"&":引用赋值,意味着两个变量都指向同一个数据。
它将使两个变量共享一块内存,
如果这个内存存储的数据变了,
那么两个变量的值都会发生变化。
代码示例
<?php
$a = "我在慕课网学习PHP!";
$b = $a;
$c = &$a;
$a = "我天天在慕课网学习PHP!";
echo $b."<br />"; // 此结果为:我在慕课网学习PHP!
echo $c."<br />"; // $c引用了$a变量,$a被重新赋值了,所以此结果为:我天天在慕课网学习PHP!
?>
4-4、PHP中的比较运算符
比较运算符 主要是用于进行比较运算的。
比较运算符 名称 示例 结果
== 等于 $a==$b 如果$a等于$b,返回true。
=== 全等 $a===$b 如果$a等于$b,并且它们的类型也相等,返回true。
!= 不等 $a!=$b 如果$a不等于$b,返回true。
<> 不等 $a<>$b 如果$a不等于$b,返回true。
!== 非全等 $a!==$b 如果$a不等于$b,或者它们的类型不同,返回true。
< 小于 $a<$b 如果$a严格小于$b,返回true
> 大于 $a>$b 如果$a严格大于$b,返回true
<= 小于等于 $a<$b 如果$a小于或者等于$b,返回true
>= 大于等于 $a<$b 如果$a大于或者等于$b,返回true
4-5、PHP中的三元运算符
?: 三元运算符也是一个比较运算符,
对于表达式(expr1)?(expr2):(expr3),
如果exp1的值为true,则此表达式的值为expr2,否则为expr3。
代码示例
<?php
$a = 78; // 成绩
$b = $a>=60 ? "及格":"不及格";
echo $b; // 此结果为:及格
// 其expr1的作用是判断$a值是否大于60,若大于60,则$b变量的值为expr2的值“及格”,若小于60,则$b变量的值为expr3的值“不及格”
?>
4-6、PHP中的逻辑运算符
逻辑运算符 主要是用来进行逻辑运算的
例子 名称 结果
$a and $b and(逻辑与) 如果$a与$b都为true,返回true。
$a or $b or(逻辑或) 如果$a或$b任一为true,返回true
$a xor $b xor(逻辑异或) 如果$a与$b有且仅有一个为true,返回true
!$a not(逻辑非) 如果$a不为true,返回true
$a&&$b and(逻辑与) 如果$a与$b都为true,返回true
$a||$b or(逻辑或) 如果$a或$b任一为true,返回true
我们可以从投票的角度来理解逻辑运算:
1、逻辑与:要求所有人都投票同意,才会通过某协议;
2、逻辑或:只要求一个人投票同意就行;
3、逻辑异或:只能有且只能有一个人投票同意;
4、逻辑非:某个人要反对,但是通过逻辑非,使其反对无效;
“与”和“或”有两种不同形式运算符的原因是它们运算的优先级(就是运算的有限顺序,比如我们小学的时候学习四则运算,加减乘除混合在一起啦,优先计算乘除,再计算加减)不同。
代码示例
<?php
$a = TRUE; //A同意
$b = TRUE; //B同意
$c = FALSE; //C反对
$d = FALSE; //D反对
//咱顺便复习下三元运算符
echo ($a and $b) ? "通过" : "不通过"; // 逻辑与 此结果为:通过
echo "<br />";
echo ($a or $c) ? "通过" : "不通过"; // 逻辑或 此结果为:通过
echo "<br />";
echo ($a xor $c xor $d) ? "通过" : "不通过"; // 逻辑异或 此结果为:通过
echo "<br />";
echo !$c ? "通过" : "不通过"; // 逻辑非 此结果为:通过
echo "<br />";
echo $a && $d ? "通过" : "不通过"; // 逻辑与 此结果为:不通过
echo "<br />";
echo $b || $c || $d ? "通过" : "不通过"; // 逻辑或 此结果为:通过
?>
4-7、PHP中的字符串连接运算符
字符串连接运算符 是为了将两个字符串进行连接,php中提供的字符串连接运算符有:
(1)、. 连接运算符:它返回将右参数附加到左参数后面所得的字符串
(2)、.= 连接赋值运算符:它将右边参数附加到左边的参数后。
4-8、PHP中的错误控制运算符
PHP中提供了一个错误控制运算符“@”,
对于一些可能会在运行过程中出错的表达式时,
我们不希望出错的时候给客户显示错误信息,这样对用户不友好。
于是,可以将@放置在一个PHP表达式之前,
该表达式可能产生的任何错误信息都被忽略掉;
如果激活了track_error(这个玩意在php.ini中设置)特性,
表达式所产生的任何错误信息都被存放在变量$php_errormsg中,
此变量在每次出错时都会被覆盖,所以如果想用它的话必须尽早检查。
需要注意的是:
错误控制前缀“@”不会屏蔽解析错误的信息,
不能把它放在函数或类的定义之前,
也不能用于条件结构例如if和foreach等。
代码示例
<?php
$conn = @mysql_connect("localhost","username","password");
echo "出错了,错误原因是:".$php_errormsg;
?>
第五章 语言结构语句
5-1、PHP-顺序结构
顺序结构 就像一条直线,按着顺序一直往下执行。我们编写的代码默认都是按照顺序结构执行的。
代码示例
<?php
$shoesPrice = 49; //鞋子单价
$shoesNum = 1; //鞋子数量
$shoesMoney = $shoesPrice * $shoesNum;
$shirtPrice = 99; //衬衣单价
$shirtNum = 2; //衬衣数量
$shirtMoney = $shirtPrice * $shirtNum;
$orderMoney = $shoesMoney + $shirtMoney;
echo $orderMoney; // 此结果为:247
?>
5-2、PHP条件结构之 if...else...
条件结构 就像一个岔路口,可以向左走,也可以向右走。
<?php
if(条件){
//分配服务器干的任务A
}else{
//分配服务器干的任务B
}
?>
通过条件判断,
若返回值为布尔值true,则执行任务A,
若返回值为布尔值false,则执行任务B。
代码示例
<?php
date_default_timezone_set('Asia/ShangHai');
$today = date('m-d',time());//获取当天日期
$birthday = "02-14";//生日
$money = 238;//消费金额
$discount = 0.8;//八折优惠
if($today == $birthday){
$money = $money * $discount;
}else{
$money = $money * 1;
}
echo $money;
?>
5-3、PHP条件结构之 if...else if...
<?php
if(条件一){
//分配服务器干的任务A
}else if(条件二){
//分配服务器干的任务B
}
?>
通过条件一判断,
若返回值为布尔值为TRUE,则执行任务A,
若返回值为FALSE,则判断条件二,
若返回值为布尔值TRUE,则执行任务B,
否则既不执行任务A,也不执行任务B。
服务器会继续往下执行其他任务。
代码示例
<?php
$totalMoney = 0;//总工资
$basicMoney = 2000;//基本工资
$sex = "男";
if($sex == "男"){
$totalMoney = $basicMoney + 0;// 男的没奖金
}else if($sex == "女"){
$totalMoney = $basicMoney + 300;// 女的有奖金300元
}
echo $totalMoney; // 此结果为:2000
?>
5-4、PHP条件结构之 if...else if...else...
<?php
if(条件一){
//分配服务器干的任务A
}else if(条件二){
//分配服务器干的任务B
}else{
//分配服务器干的任务C
}
?>
通过条件一判断,
若返回值为布尔值TRUE,则执行任务A,
若返回值为FALSE,则判断条件二,
若返回值为布尔值TRUE,则执行任务B,
否则既不执行任务A,也不执行任务B,执行任务C。
<?php
date_default_timezone_set('asia/shanghai');
$week = date("w");//获取当天星期几
$info = "";//提示信息
if($week == 1){
$info = "上午有课";
}else if($week == 3){
$info = "下午有课";
}else{
$info = "今天没课";
}
echo $info; //输出提示信息
?>
5-5、PHP条件结构之 switch...case...
<?php
switch (条件){
case 条件值一:
//任务一
break;
case 条件值二:
//任务二
break;
default:
//默认任务
}
?>
首先判断条件,
若条件的返回值为条件值一,则执行任务一,
若条件返回的值为条件值二,则执行任务二,
若条件的返回值既不是条件值一也不是条件值二,则执行默认任务。
break的作用是结束switch(后面会有专门举例说明),
使用 switch 语句可以避免冗长的 “if..else if..else”代码块。
代码示例
<?php
$num = rand(1,50);//获取1至50的随机数
$info = "";//提示信息
switch($num){
case 1:
$info = "恭喜你!中了一等奖!";
break;
case 2:
$info = "恭喜你!中了二等奖!";
break;
case 3:
$info = "恭喜你!中了三等奖!";
break;
default:
$info = "很遗憾!你没有中奖!";
}
echo $info; //输出是否中奖
?>
5-6、PHP条件结构之 switch...case...中的break
break的作用是阻止代码进入下一个case 中继续执行。
代码示例
<?php
// 通过A例子有break和B例子没有break可以很明显地看出它的作用。
//A例子
$num = 2;
$sum = 10;
switch($num){
case 1:
$sum = $sum + 10;
break;
case 2:
$sum = $sum + 10;
break;
case 3:
$sum = $sum + 10;
break;
default:
$sum = $sum + 10;
}
echo "A例子的值是:".$sum."<br />"; // 此结果为:20
//B例子
$num = 2;
$sum = 10;
switch($num){
case 1:
$sum = $sum + 10;
case 2:
$sum = $sum + 10;
case 3:
$sum = $sum + 10;
default:
$sum = $sum + 10;
}
echo "B例子的值是:".$sum."<br />"; // 此结果为:40
?>
5-7、PHP中循环结构之 while循环语句
循环结构 就像一圈圈地跑足球场,跑完一圈再跑一圈。
也就是说,在符合的条件下,重复执行某项任务。
像400米一圈的跑道,跑800米的话就跑2圈,
当跑完第一圈接着跑第二圈,
第二圈结束已经达到800米,终止跑步。
<?php
while(条件){
//执行任务
}
?>
首先判断某个条件是否符合(条件返回值是否为TRUE),
若符合则执行任务,执行完毕任务,
再判断条件是否满足要求,
符合则重复执行此任务,否则结束任务。
代码示例
<?php
$sum = 12;//小宠物当前的饥饿程度
echo "我饿啦:-(";
echo "<br />";
while($sum<100){//小宠物的饥饿程度到100,表示小宠物吃饱啦,不用继续喂了,没吃饱继续喂食
$num = rand(1,20);//随机数,模拟喂食小宠物的小面包
$sum = $sum + $num; //小宠物吃小面包
echo "我还没吃饱呢!";
echo "<br />";
}
echo "终于吃饱啦^_^";
?>
5-8、PHP中循环结构之 do while循环语句
<?php
do{
//执行任务
}while(条件)
?>
首先执行任务(上一节的while语句是先判断条件是否成立,再执行任务),
执行任务完毕,
判断某个条件是否符合(条件返回值是否为TRUE),
若符合则再次执行任务,
执行完毕任务,继续判定条件。
代码示例
<?php
$i = 1 ; //从第1圈开始跑
do{ //跑10圈
echo "在跑第".$i."圈。";
$i++;
}while($i<=10);
?>
5-9、PHP中循环结构之 while 与 do...while语句的区别
while与do…while循环语句的区别是,
while先判断条件是否成立,后执行循环,
do...while先执行一次任务,再判断是否继续执行循环,
也就是说do...while至少会执行一次任务。
当条件为FALSE时,while中的任务会一次也不执行,
do...while中的任务会执行1次。
代码示例
<?php
//A例子
$num = 2;
$sum = 10;
while($num>3){
$sum = $sum + 10;
}
echo "A例子的结果:".$sum."<br />"; // 此结果为:10
//B例子
$num = 2;
$sum = 10;
do{
$sum = $sum + 10;
}while($num>3);
echo "B例子的结果:".$sum."<br />"; // 此结果为:20
?>
5-10、PHP中循环结构之 do...while语句的运用优势举例
while和do...while可以根据具体情况选用。
假设有一种棋类游戏,首先掷骰子,
若不为6,前进骰子的点数的步长;
若为6,前进骰子的点数的步长,并可以再掷一次。
代码示例
<?php
//while例子
$sum = 0;
$num = rand(1,6); //获取1至6的随机数,模拟掷骰子
$sum = $sum + $num;//前进步长
while($num==6){
$num = rand(1,6);//获取1至6的随机数,模拟掷骰子
$sum = $sum + $num;//前进步长
};
echo "while例子执行完毕,前进:".$sum ."<br />"; // 此结果为:2
//do...while例子
$sum = 0;
do{
$num = rand(1,6);//获取1至6的随机数,模拟掷骰子
$sum = $sum + $num;//前进步长
}while($num==6);
echo "do...while例子执行完毕,前进:".$sum ."<br />"; // 此结果为:10
?>
5-11、PHP中循环结构之 for循环语句
<?php
for(初始化;循环条件;递增项){
//执行任务
}
?>
for 语句中,
“初始化”在循环开始前无条件求值一次,
“循环条件”在每次循环开始前求值。
如果值为 TRUE,则继续循环,执行循环体语句(执行任务)。
如果值为 FALSE,则终止循环。
“递增项”在每次循环之后被求值(执行)。
其常用于循环执行代码块指定的次数。
代码示例
<?php
//for语句写法
for($i = 1,$sum = 0;$i <= 100;$i++){
$sum = $sum + $i; // 累加求和
}
echo "for语句的运行结果:".$sum."<br />" ; // 此结果为:5050
//while语句写法
$i = 1 ; // 从1开始累加
$sum = 0; //初始化和为0
while($i<=100){ //判断是否小于100
$sum = $sum + $i; // 累加求和
$i++; //递增1
}
echo "while语句的运行结果:".$sum."<br />" ; // 此结果为:5050
?>
5-12、PHP中循环结构之 foreach循环语句
在PHP中foreach循环语句,常用于遍历数组,
一般有两种使用方式:不取下标、取下标。
(1)、只取值,不取下标
<?php
foreach (数组 as 值){
//执行的任务
}
?>
(2)、同时取下标和值
<?php
foreach (数组 as 下标 => 值){
//执行的任务
}
?>
代码示例
<?php
$students = array(
'2010'=>'令狐冲',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向问天',
'2015'=>'任我行',
'2016'=>'冲虚',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'宁中则',
);//10个学生的学号和姓名,用数组存储
//使用循环结构遍历数组,获取姓名
foreach($students as $v){
echo $v;//输出(打印)姓名
echo "<br />";
}
//使用循环结构遍历数组,获取学号和姓名
foreach($students as $key => $v){
echo $key.":".$v;//输出(打印)学号:姓名
echo "<br />";
}
?>
5-13、PHP中结构嵌套之 条件嵌套
条件结构嵌套就像回家的路上会遇到多个十字路口。
代码示例
<?php
$totalMoney = 0;//总工资
$basicMoney = 300;//基本工资
$sex = "男";
$noHouse = TRUE; //是否有房
$houseMoney = 150;//住房补贴
$isPregnancy = TRUE; //是否怀孕
$pregnancyMoney = 100;//怀孕补贴
if($sex == "男"){
$totalMoney = $basicMoney + 0;// 男的没奖金
if($noHouse){
$totalMoney = $totalMoney + $houseMoney;
}
}else if($sex == "女"){
$totalMoney = $basicMoney + 300;// 女的有奖金300元
if($isPregnancy){
$totalMoney = $totalMoney + $pregnancyMoney;
}
}
echo $totalMoney;
?>
5-14、PHP中结构嵌套之 循环嵌套
循环结构嵌套,就是类似于跑多个足球场,
例如假设有两个足球场,一个大足球场,一个小足球场,
在大足球场跑一圈后,再到小足球场跑几圈,
跑完几圈后,再到大足球场中继续跑。
在遍历二维数组中很常用。
代码示例
<?php
$students = array(
'2010'=>array('令狐冲',"59"),
'2011'=>array('林平之',"44"),
'2012'=>array('曲洋',"89"),
'2013'=>array('任盈盈',"92"),
'2014'=>array('向问天',"93"),
'2015'=>array('任我行',"87"),
'2016'=>array('冲虚',"58"),
'2017'=>array('方正',"74"),
'2018'=>array('岳不群',"91"),
'2019'=>array('宁中则',"90"),
);//10个学生的学号、姓名、分数,用数组存储
foreach($students as $key=>$val){ //使用循环结构遍历数组,获取学号
echo $key; //输出学号
echo ":";
//循环输出姓名和分数
foreach($val as $v){
echo $v;
}
echo "<br />";
}
?>
5-15、PHP中结构嵌套之 循环结构与条件结构嵌套
有时候在执行任务时,
对于一些特殊的任务还需要进行额外处理,
这个时候就会将循环结构与条件结构嵌套使用。
代码示例
<?php
$students = array(
'2010'=>'令狐冲',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向问天',
'2015'=>'任我行',
'2016'=>'冲虚',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'宁中则',
);//10个学生的学号和姓名,用数组存储
$query = '2014';
//使用循环结构遍历数组,获取学号和姓名
foreach($students as $key =>$v){
//使用条件结构,判断是否为该学号
if($key == $query){
echo $v;//输出(打印)姓名
break;//结束循环(跳出循环)
}
}
?>