什么是PHP?
HTML:HyperText Mark-up Language
超文本标记语言
PHP(PHP:Hypertext Preprocessor)超文本预处理器,是一种运行在服务器端的脚本语言,尤其适合web开发。
PHP能干什么?
收集表单数据
生产动态网页
收发cookies
跨平台运行
输出图像
文件处理
处理XML格式的数据
处理JSON格式的数据
回话跟踪。。。
服务端脚本,用于写web网页(主攻)CGI命名行脚本,CLI编写桌面应用程序
PHP的特点
跨平台运行
开源免费
http://www.github.com
支持大多数的web服务器
支持很多范围的数据库
php的发展史
1995年由Lerdorf(PHP之父)发明
1998年PHP3发布
2000年PHP4发布,开始引入面向对象的思想(半成品)
2004年PHP5发布,完全的支持面向对象思想
5.4或者5。6最稳定
2015年12月3号直接发布了PHP7,速度翻了一倍
第一个PHP文件
1.环境装好之后,进入到网站根目录(www,如果不是wampserver,有可能是htdoc)
2.新建的文件后缀一定是.php,文件名不能是中文的
3.些PHP代码:phpinfo();
4.在浏览器中访问文件:http:localhost:80/demo.php
html中嵌套PHP代码:
1.文件后缀必须是php
2.可以嵌套到任何地方:body中、head之外、属性中、css中
3.PHP代码必须被<?php ?>所包裹
PHP的标记
1.标准风格(常用)
<?php php代码 ?>
2.长风格
<script language="php">php代码</script>
3.短风格
<? php代码 ?>
需要在php.ini中开启short_open_tag(将它设置为on,默认为off)
4.asp风格
<% php代码 %>
需要在php.ini中开始asp_tag(讲它设置为on,默认为off)
5.<?= 是echo的简写(常用)
<?='123';?>相当于<?php echo '123';?>
注意:PSR规范中,只允许使用<?php ?>和<?= ?>这两种,如果是纯php文件,标准风格的结束标记可以不写
指令分隔符
PHP中语句分为两种
1.结构定于语句
流程控制、分支、循环、函数、、用大括号标识,可以不加分号
2.功能执行语句
输出、变量定义、函数调用。。。后面必须加上分号
提示:php的结束标记中隐含了一个分号,最后一条语句可以不加分号
PHP中的注释
注释掉的代码,PHP都会忽略解析
1.//单行注释
//注释内容。。。
2.多行注释
/*
注释内容
*/
3.#单行注释
#注释内容。。
PHP中对空白符的处理
php会忽略空格、换行、tab制表符的解析,所以可以利用这个特点写出可读性比较高的代码
要求:php代码必须要按照严格的缩进;psr规范规定,缩进只能4个空格(引文tab制表符的宽度,编辑器解析不一样,不利于代码的移植)
变量
什么是变量?
变量是用于临时存储的容器
值可以是数字、文本或者其他一些比较复杂数据(数组、对象)
变量的特性
php是弱类型的语言,不必告知变量的类型是什么,它会根据存储的值来决定这个变量是什么类型的
变量的命名规范:
1.必须以$开始,后面跟变量名
2.变量名由字母、数字或者下划线_组合而成
3.不能以数字开头
4.严格区分大小写
5.可以是中文,强烈不推荐
可变变量
一个变量的变量名可以动态的设置和使用
如果:$str = 'name';
那么:$$str 相当于 $name;
变量的赋值
1、值传递
相当于将变量啊的值传递过去,这两个变量之间没有如何关系
2、引用传递
相当于给变量a取了个别名,这两个变量其实就是同一个,修改任何一个,另外一个也会被修改
$b=&$a;
跟变量相关的操作
1、var_dump() 打印变量(照妖镜)可以查看变量的类型和值,常用于调试
2、unset()删除变量
3、isset()检测变量是否设置
已设置,返回true,未设置返回true
4、empty()检测变量是否为空
不空,返回false,空的,返回true
php中的数据类型
有八大数据类型
4种标量类型
boolean 布尔型
Integet|int 整形
float 浮点型
string 字符型类型
2种复合类型
array 数组类型
object 对象类型
2种特殊类型
resource 资源类型
null 空类型
null类型
只有1个值,就是null本身
得到null的情况:
1、直接赋值为null
2、没有赋值的变量,默认也是null
3、被unset()删除的变量
boolean|bool 布尔型
只有两个值,要么是true,要么是false
通常用于if判断,其他类型转换为布尔型得到false的情况:
布尔型: false
字符串: ''或者'0'
整型: 0
浮点型 0.0
数组: 空数组(array())
null: null(包括未定义的变量)
其他所有的值都为true
整型int:所有的整数
计算机中的存储单位:
位: bit
字节: Byte 1B = 8b
千字节: KB 1KB = 1024B
兆字节: MB 1MB = 1024KB
千兆: GB 1GB = 1024MB
太字节: TB 1TB = 1024GB
PB 1PB = 1024TB
EB 1EB = 1024PB
。。。
2、PHP中的int类型占4个字节
PHP_INT_SIZE//
常量,代表PHP中的int类型所占的字长
3、4个字节占32位,最高是符号位,所以php的取值范围是2的31次方
echo pow(2,31);
4、PHP中int的最大取值范围:PHP_INT_MAX;
范围是:-2147483647~2147483647
提示:超出int的取值范围,会自动转换为float浮点型
人类常用的是十进制,而计算机使用的是二进制
十进制:0-9 格式:$a =10;
二进制:0-1 $a=0b10;
八进制:0-7 $a=0x10;
十六进制:0-9 a-f $0x10;
var_dump($a);
echo PHP_INT_SIZE;
10进制转为二进制:decbin($num);
10进制转为八进制:decoct($num);
10进制转为16进制:dechex($num);
5.浮点型
就是有小数点的数
1、浮点数的最大范围,超出浮点数的取值范围,会得到一个INF
INF是infinity的简写,表示无限大的意思
2、浮点型的运行不精确
3、经浮点型数取整的函数
round();
4、舍去取整
floor();
5、进一取整
ceil();
6、字符串类型
由一串串字符组成的东西就叫字符串
字符串的定义方式
1、单引号 ''
2、双引号 ""
3、heredoc定界符 <<<SB SB;
4、nowdoc方式定义的字符串 <<<'ABC' ABC;
单双引号的区别
1.单引号不能解析变量,双引号可以解析
注意:双引号里面的变量要求用{}包裹起来
2、单引号不能解析转义字符,双引号可以解析
3、都可以互相嵌套,不能自己嵌套自己
转义字符
\r 回车
\n 换行
\t 制表符
\\ 斜线本身
heredoc和nowdoc
heredoc可以解析变量和转义字符
nowdoc不能解析变量和转义字符
PHP中的类型转换
强制转换
(bool)/(boolean)强制转换为布尔型
(int)/(integet) 强制转换为整型
(float) 强制转换为浮点型
(unset) 强制转换为null类型
(string)强制转换为字符串类型
(array)强制转换为数组类型
(object)强制转换为对象类型
注意:强制转换为null类型,要用(unset);无法强制转换为资源类型
自动转换
布尔值环境
数值环境
字符串环境
布尔值环境:
通常是在做if判断的时候if(0),写在()里面的表达式。都是会被自动转换为布尔型,进行判断
数值环境:
+法运行
比较常见的就是字符串转换:是由开始部分决定,如果开始部分是一个标准的数值,转换出来的值就是该数值,否则为0、
字符串环境:
$res = '大声道'.true/false;
数据类型的判断:
$res = is_string($data);
$res = is_bool($data);
$res = is_int($data);
$res = is_float($data);
$res = is_array($data);
$res = is_object($data);
$res = is_null($data);
$res = is_resource($data);
is_scalar()
判断是否是标量
is_numeric()判断是否是数字或者数字字符串
获取数据类型
gettype($data)
设置数据类型(相当于强制转换)
settype($data, 'string')
除了is_string()返回true,其他都是返回false
常量:
一经定义,不能修改或者删除
常量的定义:
define
define(常量名,常量值)
常量名:
和变量一样,只能数字、字母或者下划线
不能以数字开头(可以定义,不能使用)
区分大小写(但是,define的第三个参数设置为true可以不区分大小写)
建议:常量名全都是大写
常量值:
define
php7可以定义数组
可以是资源,但不推荐
8大类型里面只是object不能是常量值
const
8大类型里面,不能是资源和对象
const定义常量:
const 常量名 = '常量值'
输出一个没有定义的常量的时候,会报一个notice错误,并且将常量名自动转换为字符串输出
检测常量是否定义:
defined('常量名');
get_defined_constants() 返回当前所以(包括预定义常量)已经被定义的常量
预定义常量:
PHP_INT_MAX;
PHP_INT_MIN;
PHP_INT_SIZE;
PHP_INT_VERSION..
魔术常量:
__LINE__ 返回当前行
__FILE__ 返回当前文件路径
__DIR__ 返回当前目录路径
__CLASS__
__METHOD__
__NAMESPACE__
......
运算符:
运算符是可以通过给出的一个或者多个值(表达式)来产生另一个值的东西
3种数据类型
一元运算符
只能接受一个值与运输的叫一元运算符
- ++ --
二元运算符
算数运算符 + - * / ....
三元运算符
?:
算数运算符
+ - * /
% 取余或者求模运算
递增递减运算
++
$i++ 后加加
先输入$i;然后再将$i+1;下次再使用$i的时候,就加完1之后的值
++$i 前加加
先将$i的值加1,然后再给你输出加完1之后的值
赋值运算符:
=
将右边的表达式的值赋给左边的东西
+=
$i += 5; //相当于把$i = $i + 5;将$i加上5之后再赋值给$i
-= *= /=
在PHP5.6之后,默认的字符集就是在utf-8,在5.6之前需要手动设置字符编码:
HTML
<meta charset="utf-8" />
<meta http-equiv="content-type" content="texthtml;charset=utf-8" />
PHP
header('content-type:text/html;charset=utf-8');
字符串运算符
. 将左右两边的字符进行拼接运算
.= 将右边的字符追加到左边的字符后面
比较运算符:
> 表示大于
< 表示小于
>= 大于等于
<= 小于等于
== 等于
=== 恒等于
!= | <> 不等于
!== 不恒等于
逻辑运算符
逻辑与 && and
只有两边为true,结果才为true
逻辑或 || or
只要有任何一边为true,结果就是true
注意:前面为true,后面就不在执行,俗称短路
逻辑非
就是取反的意思
$bool = true
!$bool相当于 false
逻辑异或
两边不一样才返回true,否则返回false
位运算符
按位与 &
按位或 |
按位异或 ^
左移 <<
左移 >>
按位非 ~//会涉及到补码的问题
补码 = 反码 + 1
用底层二进制进行操作,效率非常高
按位与:
10 --》 1010
3 --》 0011
------------------
0010 -》 2
按位或:
10 --》 1010
3 --》 0011
------------------
1011 -》 11
按位异或:
10 --》 1010
3 --》 0011
------------------
1001 --> 9
左移 <<
10 --》 1010
---------------------
1010000
左移 <<
10 --》 1010
---------------------
1
向任何方向移出去的位都被丢弃
其他运算符:
?: 三元运算符号(常用)
表达式1 ? 表达式2 : 表达式3
1为真的时候,执行2,否则执行3
@错误控制符
`` 执行运算符,可以执行一些操作系统的命令
print_r(`dir`);
print_r(`ipconfig`);
=> 数组下标指定符号
-> 对象成员访问符号
instanceof 类型运算符
流程控制
1.概述
任何 php 脚本都是由一系列语句构成,可以用花括号将一组语句封装成一个语句组
2.在php中有3种基本的程序结构:
顺序结构
分支结构
循环结构
顺序结构
表示程序从上往下执行
分支结构
1.单向分支
if (表达式为true){
执行真区间
}
2.双向分支
if (true) {
表达式为true执行真区间
}else {
表达式为false执行这个假区间
}
3.多向分支
if (表达式1) {
如果表达式1为真,就是执行这里,到这里后,整个分支就结束;为假就继续往后判断
}else {
所以表达式都为假,就执行else区间
}
4.巢状分支
if分支的特点
1.所有的条件表达式都会被转换为布尔值
2.当if语句后面没有{}包裹的时候,之后执行一句php语句
3.else if 中间可以加1个或者多个空格
1、 '' '0' 0 0.0 空数组 null为false
巢状分支(就是if嵌套)
if...elseif
switch...case语句,多向分支
switch (表达式){
case 值1:
语句。。。
break;
case 值2:
语句2
break;
default:
都匹配不上的时候,执行这里
}
会取出括号里面的值,与case的值逐一比较。如果结果为true,则执行该case的语句;否则,继续往下case;都找不到的时候,执行default的语句
switch...case的坑
会取出括号里面的值,与case的值逐一比较(用==来判断)
$cj = 1;
switch (true) { true == false 95 == true 85 == false
case ($cj >= 90):
echo '屌';
break;
case ($cj >= 80):
echo '略屌';
break;
case ($cj >= 60):
echo '一般';
break;
default:
echo '混合';
}
循环结构
while、do-while、for
while循环
while(表达式){
循环体;
}
当表达式的值为true的时候,会反复执行循环体,直到表达式为false的时候,停止循环
do-while循环
do {
循环体
} while(表达式);
程序会先执行一遍do里面的循环体,再去看表达式是否为真
真,就再执行do里面的循环体;
假,循环立马结束;
继续执行后续代码
for循环
for(初始化语句;条件判断语句;每次循环后执行语句){
循环体
}
初始化语句:在整个循环开始之前,无条件的执行1次,并且它只执行1次
条件判断语句:在每次循环开始之前都会判断,为true就执行循环体,为false就终止循环
每次循环后执行的语句:每单次循环完毕都会执行
特性的流程控制语句:
break 跳出整个循环
continue
跳出本次循环,继续下一次循环exit或者die 结束脚本执行;
die;
exit;
die();
exit();
die('结束时输出的字符串');
exit('结束时输出字符串');
流程控制的替代语法:
替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor; 以及 endswitch
do-while 只有一种语法,没有替代语法
函数是什么?
函数(function)完成它指定任务的代码块,可以遵照你给它的参数完成指定的任务,也可以有返回值。
php中函数分为两类:
1、自定义函数
2、系统函数
var_dump()、time()等等
自定义函数
1、格式
function 函数名([参数列表])
{
函数体;
由一条或者多条语句组成
{
2、函数名的命名规则
数字、字母或者下划线组成;
不能以数字开始;
不能是关键字或者保留字;
PHP手册 -> 附录 -> 关键词列表
不能与已经存在的函数(包括系统函数)重名
3、函数的调用
1.函数名不区分大小写
2.函数调用不分先后
3.可以重复调用
函数的参数
形参
定义函数时写的参数就是形参
形参可以有默认值,默认值不能是变量
有默认值的形参应该写在后面(右边)
不然形同虚设
实参
调用函数时传的参数叫实参
实参的传递,与形参的位置一一对应;个数最后是一样的,不能少(形参没有默认值的时候),可以多(但是没有必要)
函数的返回值:return
没有return的函数,默认返回null
return语句会立即终止函数的执行,函数的后续代码不执行
检测函数是否定于:
function_exists()
不存在时,返回false
当一个函数是有条件被定义时,其定义必须在调用之前先处理,不然无法调用、报错。
变量的作用域
全局变量
1、在函数外部定义的变量叫全局变量
在PHP中,函数被看做一个独立的功能个体,无法直接访问全局变量
2、非要在函数内部访问全局变量
1.用global关键字将变量声明为全局的
2.通过超全局数组$GLOBALS['变量名']取下标的方式访问
局部变量
1、在函数内部定义的变量,该变量仅在当前函数的作用域内有效,函数调用完毕,立即释放
2、非要在全局范围访问函数内部定义的变量:
1.用global关键字声明为全局变量
2.用return直接将变量返回出去(常用的方式)
3.形参也是局部变量
静态变量:
用关键词static声明静态变量
特性:静态变量只会声明1次,不会重复声明
无法在全局范围访问函数内部的静态变量
在全局范围内定义静态变量,没有声明意义