一、PHP入门
掌握PHP语法风格,PHP标记和注释
1、第一个脚本程序
<!DOCTYPE html>
<html>
<head>
<title>PHP程序</title>
</head>
<body>
<?php
echo "<h1>你好,这是第一个PHP脚本程序!</h1>";
?>
</body>
</html>
- PHP 文件的默认扩展名是 “.php”
- PHP 文件中可以包含
html
、CSS、JavaScript 代码 - PHP 标记
开始标记 <?php 和 结束标记 ?>
中间写 PHP 代码 - PHP 语句结束符
;
一条语句结束符,{}
一个段落结束符
2、PHP语言标记风格
- 开始标记
<?php
和 结束标记?>
中间写 PHP 代码
当解析一个文件时,PHP
会寻找起始和结束标记,也就是告诉PHP
开始和停止解析二者之间的代码。此种解析方式使得PHP
可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被PHP
解析器忽略。
php有4种标记方式:
标记方式 | 名称 | 描述 |
---|---|---|
<?php //PHP代码 ?> |
XML风格,标准风格 | 推荐使用 |
<? //PHP代码 ?> |
简短风格 | PHP默认关闭 |
<scrpit language="php" //PHP代码 </scrpit> |
PHP7已不支持 | |
<% //PHP代码 %> |
PHP7已不支持 |
简短风格 在 php.ini
中 通过 short_open_tag = On
来设置开启,设置后需要重启Apache
注:<?
与php
之间不能有空格
注:如果整个页面都是PHP代码,PHP结束符可以省略(推荐)
3、PHP页面输出
echo
可以输出一个或多个字符串,用逗号(,)隔开,无返回值print
只允许输出一个字符串,执行成功返回1,失败返回0print_r()
PHP内置函数,它可输出任意类型的数据,如字符串、数组等var_dump()
可以输出一个或多个任意类型数据,还可以获取数据的类型和元素个数
<?php
echo 111,222
print "aabbcc"
echo print 111;
$a = ['a' => 1, 'b' => 2];
echo $a;
echo "<hr/>";
print $a;
echo "<hr/>";
print_r($a);
echo "<hr/>";
var_dump($a);
?>
注:上面代码报错,因为没有结束符
4、语句结束符 ;
<?php
echo 111,222;
print 111;
?>
5、PHP程序注释
<?php
// echo "这是C++注释风格";
# echo "这是shell风格的注释";
/*
echo "这是C语言风格的多行注释";
echo "注释后,在浏览器和网页源码中,是看不到的。";
*/
?>
6、PHP使用JavaScript
<?php
echo "<script>";
echo "alert('我是JavaScript! ');";
echo "</script>";
?>
7、综合案列
<!DOCTYPE html>
<html lang="en">
<head>
<title>标记应用</title>
<style type="text/csss">
p {
text-align: center;
font-family: "黑体";
font-size: 24px;
}
</style>
</head>
<body>
<p>HTML5页面</p>
<?php
$str1 = "PHP 变量1";
$str2 = "PHP 变量2";
echo "<script>";
echo "alert('".$str1."');";
echo "</script>";
?>
<input type="text" id="tx" size="20"><br/>
<input type="button" name="bt" value="单击" onclick="tx.value='<?php echo $str2; ?>'">
</body>
</html>
注:注意代码编写规范
以下代码有错误,请修改
<? php
/ 这里是注释
echo "大家好";
echo "这是我的一个php程序"
echo "我正在查找错误";
?>
二、数据类型
掌握常用的数据类型与不同类型转换的方法
数据类型有两种:强类型和弱类型
PHP是弱类型,PHP7之后支持强类型
1、标量数据类型
类型 | 描述 |
---|---|
整型Integer |
整型包含所有的整数,可以是正数也可以是负数 |
浮点型Float |
带小数的数字 |
布尔型Boolean |
true 和false |
字符串String |
汉字、英文、符号、其它国家语言,被引号包含的内容 |
- 整型
在 PHP 中,整型变量称为 integer 或 int 类型,用来表示一个整数
PHP支持2、8、10、16进制的整数
<?php
$num1=10; //十进制
$num2=010; //八进制(数字前面加0)
$num3=0x10; //十六进制(数字前面加0x)
$num4=0b100101; //二进制数(数字前面加0b)
echo $num1,'<br>'; //10
echo $num2,'<br>'; //8
echo $num3,'<br>'; //16
echo $num4; //37
?>
进制转换
机制 | 缩写 | 单词 |
---|---|---|
十进制 | dec | decimalist |
二进制 | bin | binary |
八进制 | oct | octonary |
十六进制 | hex | hexdecimalist |
例题
PHP提供了进制转换函数
<?php
echo decbin(123),'<br>'; //十进制转二进制
echo bindec(1111011),'<br>'; //二进制转十进制
echo dechex(123),'<br>'; //十进制转十六进制
echo hexdec('7b'),'<br>'; //十六进制转十进制
echo decoct(123); //十进制转八进制
?>
建议:数字不要使用单引号或者双引号
<?php
var_dump("10");
echo '<br>';
var_dump("1");
echo '<br>';
var_dump("10"+"1");
echo '<hr>';
var_dump("0xe");
echo '<br>';
var_dump("0x1");
echo '<br>';
var_dump("0xe" + "0x1");
?>
- 浮点型 浮点型在 PHP 中被称为 float 类型,也可称为实数,可以用来存储整数和小数
<?php
$num1 = 3.1415926;
$num2 = 1.3e4;
$num3 = 7e-10;
$num4 = 0.0000000007;
var_dump($num1, $num2, $num3);
?>
浮点数在内存中保存的是近似值
浮点数不能参与比较
<?php
var_dump(0.9==(1-0.1)); //bool(true)
echo '<br>';
var_dump(0.1==(1-0.9)); //bool(false)
?>
如果浮点数要比较,必须确定比较的位数
<?php
var_dump(0.9==(1-0.1)); //bool(true)
echo '<br>';
var_dump(0.1==(1-0.9)); //bool(false)
echo '<br>';
//比较小数点后面5位 int(0) 0表示相等
var_dump(bccomp(0.1,1-0.9,5));
?>
bccomp(string $num1, string $num2, ?int $scale = null): int
比较 num1 和 num2, 并且返回整型数字的结果。
两个数相等时返回 0; num1 比 num2 大时返回 1; 其他则返回 -1。
<?php
echo bccomp('1', '2') . "\n"; // -1
echo '<br>';
echo bccomp('1.00001', '1', 3); // 0
echo '<br>';
echo bccomp('1.00001', '1', 5); // 1
echo '<hr>';
$num3 = 7e-10;
$num4 = 0.0000000007;
var_dump($num4 == $num3);
echo '<br>';
// bccomp会将参数转成字符串,需要将7e-10写成小数点模式才能比较
echo bccomp($num3, $num4, 20);
?>
- 布尔型
布尔型只有两种值,分别是 TRUE 和 FALSE(不区分大小写)
不能使用echo 和print输出布尔型,要使用var_dump()输出
<?php
$x = true;
$y = false;
var_dump($x, $y);
?>
- 字符串型
在PHP中单引号字符串和双引号字符串是有区别的
单引号字符串是真正的字符串
双引号字符串要解析字符串中的变量
例题
<?php
$name = 'tom';
echo '我的名字叫$name','<br>';
echo "我的名字叫$name",'<br>';
?>
例题:{ }取变量值
<?php
$name = 'tom';
echo '$name是我的名字','<br>';
echo "{$name}是我的名字",'<br>';
echo "${name}是我的名字",'<br>';
?>
输出特殊字符
<?php
echo '<a href="https://www.php.net/" title="PHP官网">PHP官网</a>','<br>';
echo '<a href=\'https://www.php.net/\' title=\'PHP官网\'>PHP官网</a>','<br>';
echo '文件保存在c:\\'; //文件保存在c:\
?>
字符串定界符
- 有
<<<
开头,后面跟的是标识符,符标识必须前后一致 - 字符串定界符的结束符必须顶格写,前面不能有任何的空白字符
- 字符串定界符分为两种,heredoc(双引号),nowdoc(单引号)
<?php
// heredoc
$name = 'tom';
echo <<<ABC
$name <br>
<strong>锄禾日当午</strong>
<em>汗滴禾下土</em>
<u>汗滴禾下土</u>
<a href="https://www.php.net/" title="PHP官网">PHP官网</a>
<hr>
ABC;
// nowdoc
echo <<<'ABC'
$name <br>
<strong>锄禾日当午</strong>
<em>汗滴禾下土</em>
<u>汗滴禾下土</u>
<a href='https://www.php.net/' title='PHP官网'>PHP官网</a>
ABC;
?>
2、复合类型
- 数组
在PHP中数组有两种形式,索引数组和关联数组
- 索引数组:用整数做下标,默认从0开始,后面依次加1
- 关联数组:用字符串做下标,通过=>符号将下标和值关联起来
例题:数组的声明
<?php
//1、索引数组的声明
$stu=array('tom','berry','ketty');
print_r($stu);
echo '<hr>';
echo $stu[0],'<br>';
echo $stu[1],'<br>';
echo $stu[2],'<hr>';
echo "<hr>";
//2、关联数组
$emp=array('name'=>'李大海','sex'=>'男','age'=>19);
print_r($emp);
echo '<hr>';
echo $emp['name'],'<br>';
echo $emp['sex'],'<br>';
echo $emp['age'];
?>
短数组语法,可以直接通过中括号声明数组
<?php
$stu=['tom','berry','ketty'];
var_dump($stu);
?>
二维数组的声明
<?php
$stu=[
['name'=>'tom','sex'=>'男','age'=>22],
['name'=>'berry','sex'=>'女','age'=>23]
];
var_dump($stu);
?>
游戏案例
<?php
//王者荣耀 用到了字符串、整型
$heros = [
"安琪拉" => [
"皮肤" => ["暗夜萝莉", "玩偶对对碰", "魔法小厨娘"],
"技能" => [
"火球术" => [350, 390, 430],
"混沌火种" => [130, 145, 160],
"炽热光辉" => [700, 1050, 1400],
],
"语音" => ["知识就是力量", "一不小心就干掉了个大家伙!", "生命就像人家的魔法师~涂涂改改又是一年!"]
],
"亚瑟" => [
]
];
?>
- 对象
对象(Object)可以用于存储数据。在 PHP 中对象必须声明。首先必须使用 class 关键字声明类对象。类是可以包含属性和方法的结构。然后在类中定义数据类型,在实例化的类中使用数据类型。
在支持面向对象的语言中,可以把各个具体事物的共同特征和行为抽象成一个实体,称之为一个“类”,而对象是类使用 new 关键字实例化后的结果。
<?php
class Car //使用 class 声明一个类对象
{
var $color;
function car($color="black") {
$this->color = $color;
}
function getColor() {
return $this->color;
}
}
$car = new Car();
$car->car('red');
echo $car->getColor();
?>
3、特殊类型
在 PHP 中,有用来专门提供服务或数据的数据类型,它不属于上述标准数据类型中的任意一类,因此也被称为特殊数据类型,主要包括 NULL 和资源数据类型。
- NULL 在 PHP 中NULL是一种特殊的数据类型,它只有一个值,即 NULL,表示空值(变量没有值),需要注意的是它与空格的意义不同。
当满足下列条件时,变量的值为 NULL:
- 变量被指定为 NULL 值;
- 变量在没有被赋值前,默认值为 NULL;
- 使用 unset() 函数删除一个变量后,这个变量值也为 NULL。
<?php
$var1=NULL; //直接赋值为NULL
$var2; //未赋值
$var3="value";
unset($var3); //被销毁
var_dump($var1); //输出NULL
var_dump($var2); //输出NULL
var_dump($var3); //输出NULL
?>
提醒:在PHP中 null和NULL是一样的,不区分大小写
- 资源类型 在 PHP 中资源(Resource)同样是一种特殊的数据类型。它主要描述一个 PHP 的扩展资源,例如一个数据库查询(Query)、一个打开的文件句柄(fopen)或一个数据库连接(Database Connection)以及字符流(stream)等扩展类型。
但是我们并不能直接操作这个变量类型,只能通过专门的函数来使用。
header("content-type:text/html;charset=utf-8");
$file = fopen("test.txt", "rw");//打开test.txt文件
var_dump($file);
4、类型转换
php中变量的数据类型通常不是开发人员设定的,而是根据该变量使用的上下文在运行时决定的。
<?php
$a = 1;
var_dump($a); //int(1)
//运算后
$a = $a +2.0;
var_dump($a); //float(3)
?>
数据类型转换分为自动类型转换和强制类型转换。
1、自动类型转换:当提供的类型和需要的类型不一致的时候会自动进行类型转换。常见有3种转换,分别为转换成布尔型、转换成整型和转换成字符串型。
<?php
//转换成布尔型
var_dump(0 == false);
var_dump(3.14 == false);
var_dump('abc' == false);
var_dump(NULL == false);
//转换成整型
var_dump('888php' == 888);
var_dump('php888' == 888);
var_dump(true + 1);
//转换成字符串型
var_dump('true is'. true);
var_dump('3');
var_dump('3.14'.15926);
?>
2、强制类型转换
就是在要转换的数据或变量之前加上(数据类型)即可
强转类型 | 功能描述 |
---|---|
(bool) | 强转为布尔型 |
(string) | 强转为字符串型 |
(int) | 强转为整型 |
(float) | 强转为浮点型 |
(array) | 强转为数组 |
(objec) | 强转为对象 |
<?php
$num1='12';
//string(2) "12" int(12) float(12)
var_dump($num1,(int)$num1,(float)$num1);
?>
其他类型和布尔之间的转换
规则:0、空为假,非0非空为真
<?php
var_dump((bool)'abc'); echo '<br>'; //bool(true)
var_dump((bool)''); echo '<br>'; //bool(false)
var_dump((bool)'0'); echo '<br>'; //bool(false)
var_dump((bool)'0.0'); echo '<br>'; //bool(true)
var_dump((bool)'00'); echo '<br>'; //bool(true)
var_dump((bool)'false'); echo '<br>'; //bool(true)
var_dump((bool)'null'); echo '<br>'; //bool(true)
var_dump((bool)1); echo '<br>'; //bool(true)
var_dump((bool)0); echo '<br>'; //bool(false)
var_dump((bool)-10); echo '<br>'; //bool(true)
var_dump((bool)0.0); echo '<br>'; //bool(false)
var_dump((bool)array()); echo '<br>'; //bool(false)
var_dump((bool)array(1)); echo '<br>'; //bool(true)
var_dump((bool)array(false)); echo '<br>';//bool(true)
var_dump((bool)null); echo '<br>'; //bool(false)
?>
常用取整方法
<?php
//直接取整,舍弃小数,保留整数intval()
echo intval(10.1);
echo "<hr>";
//四舍五入取整round()
echo round(10.1);
echo "<br>";
echo round(10.6);
echo "<br>";
echo round(3.14159, 2);
echo "<hr>";
//向上取整,有小数就加1,ceil()
echo ceil(10.1);
echo "<hr>";
//向下取整floor()
echo floor(10.1);
echo "<br>";
echo floor(10.6);
?>
三、变量与常量
掌握变量与常量的定义与使用
1、变量
变量就是临时存储值的容器,它可以储存数字、文本、或者一些复杂的数据等。PHP中由计算机操作系统分配好具体的内存空间后,自动将变量与真正的内存地址映射对应。
变量的命名规则
以 $ 符号开头
字母、数字、下划线,第一个字符必须是字母或者下划线
<?php
//合法变量名
$a=1;
$a12_3=1;
$_abc=1;
//非法变量名
$123=1;
$12Ab=1;
$a.r=1;
$好=1;
$*a=1;
?>
因为 PHP 是一种弱类型的语言,所以使用变量前不用提前声明,变量在第一次赋值时会被自动创建,这个原因使得 PHP 的语法和C语言、Java 等强类型语言有很大的不同。
声明 PHP 变量必须使用一个美元符号“$”后面跟变量名来表示,然后再使用“=”给这个变量赋值。如下所示:
<?php
//变量初始化
$a = 1;
$b = "abc";
$c = true;
echo $a.', '.$b.', '.$c;
?>
在 PHP 中,为一个变量赋值的方式有三种,分别是直接赋值、拷贝赋值和引用赋值。
<?php
// 直接赋值
$name = "PHP基础";
echo $name;
//拷贝赋值
$a = 100;
$b = $a; // 将$a的值复制一份,传给$b
$a = 200; // 重新为 $a 赋值
echo '$a = '.$a.', $b = '.$b;
//引用赋值
$a = 100;
$b = &$a; // 将$a的地址复制一份,传给$b
$a = 200; // 重新为 $a 赋值
echo '$a = '.$a.', $b = '.$b;
// 只有命名过的变量才可以引用赋值
// 错误用法
$c = &(25*5);
?>
变量的作用域 变量的作用范围(可以被使用的范围)称为变量作用域,变量必须在其有效范围内使用,如果超出有效范围,变量就会失去其意义。按作用域可以将 PHP 变量分为全局变量和局部变量两种。
1、局部变量 局部变量就是在函数的内部定义的变量,只能在定义的函数内使用。局部变量会在函数调用结束时自动销毁。
<?php
function example(){
$a = "PHP基础学习"; // 在函数内定义变量 a
echo "局部变量 a 的值为:".$a."<br>";
}
example();
if($a){ // 在函数外部调用 $a,如果 $a 存在则会打印下面的内容
echo "在函数外部调用函数内的局部变量 a,其值为:".$a;
}
?>
静态变量是一个特殊的局部变量。静态变量在初始化之后,会在程序运行期间会一直存在。
使用static 变量 = 值;
<?php
function demo(){
static $a; //定义静态变量
$b = 0;
$a++;
$b++;
echo '第 '.$a.' 次运行 demo 函数, 局部变量 $b 的值为:'.$b.'<br>';
}
demo();
demo();
demo();
demo();
?>
2、全局变量 全局变量就是定义在所有函数以外的变量,其作用域是当前源码的任何地方。在程序运行期间全局变量会一直存在,只有程序结束运行时才会被销毁
<?php
$a = "PHP基础学习"; // 在函数外部定义全局变量 a
function example(){
if($a){
echo "在函数内部调用全局变量 a,其值为:".$a;
}
}
example();
echo "在函数外部调用全局变量 a,其值为:".$a;
?>
在函数中使用全局变量必须使用global关键字先声明,global 关键字只能用来引用函数外部的全局变量,在引用时不能直接赋值,赋值和声明语句需要分开写.
<?php
$a = 1;
$b = 2;
$c = 3;
function demo(){
global $a, $b;
echo "变量 a:".$a;
echo "<br>变量 b:".$b;
echo "<br>变量 c:".$c;
}
demo();
?>
与 global 关键字功能类似的还有 $GLOBALS, $GLOBALS 是一个预定义的超全局数组,其中包含了全局作用域中的所有可用变量,变量的名字就是数组的键。 $GLOBALS 中并不包含函数中的局部变量和静态变量。
<?php
$a = 1;
$b = 2;
$c = 3;
$name = 'PHP基础';
function demo(){
static $str = 'PHP 学习';
echo "变量 a:".$GLOBALS['a'];
echo "<br>变量 b:".$GLOBALS['b'];
echo "<br>变量 c:".$GLOBALS['c'];
}
demo();
var_dump($GLOBALS);
?>
检查变量是否存在 要检查一个变量是否存在,可使用isset()函数。若存在,返回true,否则返回false.
<?php
$var1="";
$var2=123;
var_dump(isset($var1)); //返回boolean true
var_dump(isset($var2)); //返回boolean true
?>
销毁变量 用unset()来销毁变量,销毁的是变量名,变量值由PHP垃圾回收机制销毁.
<?php
$var1=123;
unset($var1);
var_dump($var1); //NULL
var_dump($GLOBALS);
?>
- 可变变量
可变变量就是一个变量以另外一个变量的值作为变量名。这种语法形式是 PHP 的特殊语法,其他语言中很少见.
可变变量使用时可能会出现非法变量名的情况。比如$a = 1
,则$$a
是非法的。
<?php
$name="Tom";
$$name=20;
echo $$name; //输出20
echo "${$name}"; //输出20
echo $Tom; //输出20
echo ${"Tom"}; //输出20
$name=123; //改变$name的值
?>
可变变量还可以用于数组。使用“{ }”将变量包裹可以让语义更明确,示例代码如下:
<?php
//理解$$arr[0] 的结果
$demo = 'PHP基础';
$test = 'https://www.php.net/';
$arr = array('demo', 'test');
echo ${$arr[0]}.'<br>'.${$arr[1]}.'<br>';
$arr2 = array('PHP 教程', 'PHP 可变变量');
$str = 'arr2';
echo ${$str}[0].'<br>'.${$str}[1];
?>
- 预定义变量
预定义变量又叫超全局变量,它们不需要提前声明就可以在所有的作用域中使用。通过这些预定义变量可以获取用户会话、用户操作系统的环境和本地操作系统的环境等信息。预定义变量 描述 $GLOBALS 全局作用域中的全部可用变量 $_SERVER 服务器和执行环境的信息 $_REQUEST 包含了 $_GET,$_POST 和 $_COOKIE 的所有信息 $_POST 通过 POST 方法提交的数据 $_GET 通过 GET 方法提交的数据 $_FILES 通过 POST 方式上传到服务器的文件数据 $_ENV 通过环境方式传递给当前脚本的变量组成的数组 $_COOKIE 通过 HTTP Cookies 方式传递给当前脚本的变量所组成的数组 $_SESSION 当前脚本可用 SESSION 变量组成的数组
<?php
var_dump($_COOKIE);
//$_SERVER["SERVER_PORT"]服务端口号
//$_SERVER["SERVER_NAME"]域名
//$_SERVER['REMOTE_ADDR']浏览当前页面的用户的 IP 地址
//$_SERVER['DOCUMENT_ROOT']当前运行脚本所在的文档根目录
var_dump($_SERVER);
?>
- 外部变量
在程序中定义或自动产生的变量叫内部变量,而由HTML表单、URL或外部程序产生的变量叫外部变量,主要是$_GET,$_POST,$_REQUEST这三个预定义变量.
课本案列
<!DOCTYPE html>
<html lang="en">
<head>
<title>外部变量演示</title>
</head>
<body>
<form action="" method="post">
学号:<input type="text" name="XH"><br/>
姓名:<input type="text" name="XM"><br/>
<input type="submit" name="postmethod" value="POST方法提交">
</form>
<form action="" method="get">
性别:<input type="radio" name="SEX" value="男">男
<input type="radio" name="SEX" value="女">女<br/>
专业:<select name="ZY">
<option>计算机应用技术</option>
<option>软件技术</option>
<option>数字媒体开发</option>
</select><br/>
<input type="submit" name="getmethod" value="GET方法提交">
</form>
</body>
</html>
<?php
//使用isset()函数判断是否是POST方法提交
if(isset($_POST['postmethod'])){
$xh = $_POST['XH'];
$xm = $_POST['XM'];
echo "接收POST变量:<br/>";
echo "学号:".$xh."<br/>";
echo "姓名:".$xm."<br/>";
echo "<hr>";
}
//使用isset()函数判断是否是GET方法提交
if(isset($_GET['SEX'])){
$sex = $_GET['SEX'];
$zy = $_GET['ZY'];
echo "接收GET变量:<br/>";
echo "性别:".$sex."<br/>";
echo "专业:".$zy."<br/>";
echo "<hr>";
}
echo "接收REQUEST变量:<br/>";
echo "学号:".@$_REQUEST['XH']."<br/>";
echo "姓名:".@$_REQUEST['XM']."<br/>";
echo "性别:".@$_REQUEST['SEX']."<br/>";
echo "专业:".@$_REQUEST['ZY']."<br/>";
?>
2、常量
常量就是不能改变的量,PHP 中常量一旦被定义,就不能被修改或取消定义。
与变量相比,常量具有以下几个特点:
- 常量前面没有美元符号($);
- 常量只能用 define() 和 const 定义;
- 常量的作用域是全局的;
- 常量一旦被定义就不能被重新定义或者取消定义。
定义常量
<?php
define('WebSite', 'PHP官网');
const url = 'https://www.php.net/'; //不能在函数、循环、if语句之内用const来定义
echo WebSite.'<br>';
echo url;
?>
获取常量的值
想要获取常量的值,除了可以直接使用常量名外,还可以使用 constant() 函数,使用函数和直接使用常量名的效果是一样的。
<?php
define('WebSite', 'PHP官网');
const url = 'https://www.php.net/';
$website = 'WebSite';
$url = 'url';
echo constant($website).'<br>';
echo constant($url);
?>
判断常量是否存在 要判断一个常量是否已经定义,使用 defined() 函数,已定义则返回 true,未定义则返回 false。
<?php
define('WebSite', 'PHP官网');
const url = 'https://www.php.net/';
var_dump(defined('WebSite'));
echo '<br>';
var_dump(defined('url'));
?>
-
预定义常量
预定义常量顾名思义也就是 PHP 中预先定义好的常量,使用这些预定义常量可以帮助我们来获取一些 PHP 中的信息,比如,我们可以使用预定义常量来获取当前电脑的操作系统,当前使用的 PHP 版本信息等等。另外需要注意的是预定义常量是区分大小写
的。预定义常量 描述 PHP_VERSION 当前 PHP 的版本号 PHP_OS 当前 当前的操作系统名称 PHP_EOL 系统换行符,Windows 是(\r\n),Linux 是(\n),MAC 是(\r) PHP_INT_MAX 当前 PHP 支持的最大整数 PHP_INT_MIN 当前 PHP 支持的最小整数 PHP_EXTENSION_DIR PHP 的扩展目录 TRUE 布尔类型的 true FALSE 布尔类型的 false NULL Null -
魔术常量 魔术常量属于特殊的预定义常量,这些常量可以根据它们的使用位置而变化。魔术常量通常以两个下划线__开头,并以两个下划线__结尾。
魔术常量不区分大小写
。魔术常量 描述 __LINE__
文件中的当前行号。 __FILE__
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。 __DIR__
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。 __FUNCTION__
当前函数的名称。匿名函数则为 {closure}。 __CLASS__
当前类的名称。类名包括其被声明的作用域(例如 Foo\Bar)。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。 __TRAIT__
Trait 的名字。Trait 名包括其被声明的作用域(例如 Foo\Bar)。 __METHOD__
类的方法名。 __NAMESPACE__
当前命名空间的名称。 ClassName::class
完整的类名。
<?php
echo "当前文件的路径:".__FILE__;
echo "<br/>当前的行数:".__LINE__;
echo "<br/>当前PHP的版本信息:".PHP_VERSION;
echo "<br/>当前的操作系统:".PHP_OS;
echo "<br/>当前的操作系统:".php_os;
echo "<br/>当前的行数:".__line__;
?>
四、运算符与表达式
掌握运算符和表达式的使用
运算符是指通过一个或多个表达式来产生另外一个值的某些符号,如“+”、“%”、“.”等都是运算符。
1、算术运算符
算术运算符是处理四则运算(加、减、乘、除四种运算)的符号,在数字的处理中应用得最多。常用的算术运算符如下表所示。
名称 | 操作符 | 举例 |
---|---|---|
加法运算 | + | $a+$b |
减法运算 | - | $a-$b |
乘法运算 | * | $a*$b |
除法运算 | / | $a/$b |
取余数运算 | % | $a%$b |
取反运算 | - | -$a |
<?php
$a=10;
$b=3;
echo $num=$a+$b; //加法,$num值为13
echo $num=$a-$b; //减法,$num值为7
echo $num=$a*$b; //乘法,$num值为30
echo $num=$a/$b; //除法,$num值为3.333333…
echo $num=$a%$b; //取模,$num值为1
echo $num=-$a; //取反,$num值为-10
?>
2、赋值运算符
赋值运算符是把基本赋值运算符“=”右边的值赋给左边的变量,最基本的赋值运算符是“=”,用于对变量进行赋值操作,而其他运算符可以和赋值运算符“=”联合使用,构成组合赋值运算符。
操作 | 符号 | 举例 | 展开形式 | 意义 |
---|---|---|---|---|
赋值 | = | $a = 1 | $a = 1 | 将右边表达式的值赋给左边的变量 |
加 | += | $a += 1 | $a = $a + 1 | 相加并把值赋给左边的变量 |
减 | -= | $a -= 1 | $a = $a - 1 | 相减并把值赋给左边的交量 |
乘 | *= | $a *= 1 | $a = $a * 1 | 相乘并把值赋给左边的变量 |
除 | /= | $a /= 1 | $a = $a / 1 | 相除并把值赋给左边的变量 |
拼接字符 | .= | $a .= ‘1’ | $a = $a .‘1’ | 将右边的字符追加到左边 |
取余数 | %= | $a %= 1 | $a = $a % 1 | 求模,并将结果赋给左边的变量 |
<?php
$a=10;
$b=3;
echo $num=$a+$b; //将$a+$b的结果值赋给$num,$num值为13
echo $num=($c=6)+4; //$c的值为6,$num的值为10
echo $a+=6; //等同于$a=$a+6,$a赋值为16
echo $b-=2; //等同于$b=$b-2,$b赋值为1
echo $a*=2; //等同于$a=$a*2,$a赋值为32
echo $b/=0.5; //等同于$b=$b/0.5,$b赋值为2
$string="连接";
//等同于$string=$string."字符串",$string赋值为"连接字符串"
echo $string.="字符串";
?>
3、位运算符
位运算符是指将二进制位从低位到高位对齐后进行运算。专门针对数字0和1进行操作。
运算符 | 运算 | 例子 | 结果 |
---|---|---|---|
& | 按位与 | $a & $b | 将$a和$b中都为1的位设为1 |
| | 按位或 | $a | $b | 将$a和$b中为1的位设为1 |
~ | 按位非 | ~$a | 将$a为1的位设为0, 为0的设为1 |
^ | 按位异或 | $a ^ $b | 将$a和$b中不同位设为1 |
« | 左移 | $a « $b | 将$a的位向左移动$b次 |
» | 右移 | $a » $b | 将$a的位向右移动$b次 |
<?php
$m = 8;
$n = 12;
echo '$m = '.$m.', $n = '.$n.'<br>';
echo '$m & $n = '.($m & $n).'<br>';
echo '$m | $n = '.($m | $n).'<br>';
echo '$m ^ $n = '.($m ^ $n).'<br>';
echo '~ $m = '.(~$m).'<br>';
echo '$m << $n = '.($m << $n).'<br>';
echo '$m >> $n = '.($m >> $n);
?>
4、比较运算符
比较运算符就是对变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回 true;如果为假,则返回 false。
我们要重点区分一下“等于”和“全等”,等于==只是对两个变量的值进行了比较运算,而全等===不仅会对运算符两边表达式的值进行比较,而且还会对数据类型进行比较,只有两边的值和数据类型都相等时,运算结果才是 TRUE。<?php
$a = 10;
$b = '10';
if($a == $b){
echo '$a 和 $b 的值相等!<br>';
if($a === $b){
echo '$a 和 $b 的类型也相等!<br>';
}else{
echo '$a 和 $b 的类型不相等!<br>';
}
}else{
echo '$a 和 $b 的值不相等!<br>';
}
?>
5、逻辑运算符
符号 | 描述 |
---|---|
&& | 短路与:如果前面的条件不满足,后面的条件就不用计算了 |
|| | 短路或 |
! | 非 |
“&&”或“and” 逻辑与
<?php
$age = 21;
if($age >= 18 && $age <= 25){
echo '符合当兵条件!';
}else{
echo '不符合当兵条件!';
}
?>
“||”或“or” 逻辑或
<?php
$age = 21;
if($age < 18 || $age > 25){
echo '不符合当兵条件!';
}else{
echo '符合当兵条件!';
}
?>
“!” 逻辑非
<?php
$age = 21;
if(!($age < 18 || $age > 25)){
echo '符合当兵条件!';
}else{
echo '不符合当兵条件!';
}
?>
6、错误控制运算符
PHP的错误控制运算符使用@
符号表示,把它放在一个PHP表达式之前,将忽略该表达式可能产品的任何错误信息。
<?php
echo @$a; //变量$a未定义,不加@会显示NOTICE信息
$a = "Hello!";
echo $a; //输出"Hello!"
$b = @test(); //忽略调用test()函数时产生的错误信息
$con = @mysql_conncet("localhost","username","pwd"); //忽略连接mysql数据库出错产生的错误信息
?>
7、条件运算符
条件运算符 又是 三元运算符,功能与“if else”语句一致,它可以在一行中书写,代码精练、执行效率更高。在 PHP 程序中恰当地使用三元运算符能够让脚本更为简洁、高效。
语法:表达式?值1:值2
表达式的值为true,返回值1,否则返回值2
练习
<?php
$num=11;
echo $num%2?'奇数':'偶数';
echo "<hr/>";
//消费满100减10的优惠程序
$sj_cost = 102;
$zh_cost = $sj_cost >100 ? $sj_cost -10 : $sj_cost;
echo "实际消费".$sj_cost."元,请缴费". $zh_cost."元";
同时三元运算符还可以嵌套使用,示例如下所示例:
<?php
$a = 10;
$b = 6;
$c = 12;
$x = $a>$b ? ($a<$c ? $c-$a : $a-$c) : ($b<$c ? $c-$b : $b-$c);
echo '$x ='.$x;
?>
嵌套使用的三元运算符虽然可以节省很多代码,但是可读性不太好,日后代码维护起来也很不方便,所以像这种情况我们尽量使用 if else
语句来实现。
8、递增/递减运算符
递增、递减有两个形式,一种是++$
,一种是$++
。这两者的主要区别在于运算过程,前者是先把变量的值加1,再将新值赋给变量,后者是先返回变量的值,再将变量中的值加1.
++前置:先自增再运算
后置++:先运算再自增
练习
<?php
$num=10;
$num++;
echo $num; //11
$num=10;
echo $num++; //10
$num=10;
echo ++$num; //11
练习
<?php
$num=5;
echo (++$num)+(++$num)+(++$num); //21
$num=5;
echo ($num++)+($num++)+($num++); //18
9、字符串运算符
字符串运算符只有一个,即英文的句号“.”,它可以将两个字符串连接起来,拼接成一个新的字符串。其他语言字符串连接是"+",PHP 里的“+”只能用作赋值运算符,而不能用作字符串运算符。
<?php
$a="Hello ";
$b="World";
echo $a.$b; //输出'Hello World'
$a.= "World"; //与赋值运算符组合
echo $a; //输出'Hello World'
?>
10、其他运算符
例子 | 名称 | 结果 |
---|---|---|
$a + $b | 联合 | $a 和 $b 的联合。 |
$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。 |
<?php
$a = array("a" => "苹果", "b" => "香蕉");
$b = array("a" => "梨子", "b" => "橘子", "c" => "樱桃");
$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);
$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
$a += $b; // Union of $a += $b is $a and $b
echo "Union of \$a += \$b: \n";
var_dump($a);
?>
11、运算符优先级和结合性
- 同一行的运算符具有相同的优先级
- 左结合方向表示同级运算符的执行顺序为从左到右
- 右结合方向则表示执行顺序为从右到左
- 圆括号()优先级别最高。
<?php
$x = 4;
echo @"计算 4 - 1的结果是: " . $x-1 . ",这是后面的部分<br>";
echo @(("计算 4 - 1的结果是: " . $x) - 1) . ",这是后面的部分<br>";
echo "计算 4 - 1的结果是: " . ($x-1) . ",这是后面的部分<br>";
?>
像1< 2 < 3
这样的表达式,在数学上是成立的,但是在PHP中是非法的,正确的表达式写法是 1 < 2 && 2 < 3
在我们熟悉了 PHP 运算优先级的前提下,最好在书写运算符的时候,以小括号来标记优先级,这样可以使我们的代码可读性更强,也是一个良好的编程习惯。
12、表达式
在PHP中,任何有值的内容都可以理解为表达式。
<?php
//表达式
$a = 1;
$b = $a;
var_dump($a);
//非表达式
//break;
//for;
//class;
?>
五、综合案例
1、获取用户登录表单中的用户名和密码,如果用户名为"admin",密码为"123456",则提示登录成功
<!DOCTYPE html>
<html lang="en">
<head>
<title>用户登录</title>
</head>
<body>
<form action="" method="post">
<fieldset>
<legend>用户登录表单</legend>
用户名:<input type="text" name="username"/>
密码:<input type="password" name="password"/>
<input type="submit" name="submit" value="登录">
<input type="reset" name="submit2" value="重置">
</fieldset>
</form>
</body>
</html>
<?php
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];
if($username == 'admin' && $password == '123456'){
echo "<script>alert('登录成功')</script>";
} else {
echo "<script>alert('登录失败')</script>";
}
}
?>
2、计算圆形和梯形面积,要求分别使用POST方法和GET方法接收圆的半径和梯形的上底、下底、高
<!DOCTYPE html>
<html lang="en">
<head>
<title>面积计算</title>
</head>
<body>
<form action="" method="post">
请输入圆的半径:<input type="text" name="R"><br/>
<input type="submit" name="postmethod" value="POST方法提交">
</form>
<form action="" method="get">
请输入梯形的上底:<input type="text" name="A"><br/>
请输入梯形的下底:<input type="text" name="B"><br/>
请输入梯形的高:<input type="text" name="H"><br/>
<input type="submit" name="getmethod" value="GET方法提交">
</form>
</body>
</html>
<?php
define("PI", 3.1415926);
if(isset($_POST['postmethod'])){
$r = $_POST['R'];
$C_area = PI * $r * $r;
echo "接收POST变量:<br/>";
echo "圆的面积为:".$C_area."<br/>";
}
if(isset($_GET['getmethod'])){
$a = $_GET['A'];
$b = $_GET['B'];
$h = $_GET['H'];
$T_area = ($a + $b) * $h /2.0;
echo "接收GET变量:<br/>";
echo "梯形的面积为:".$T_area."<br/>";
}
?>