php
静态网站与动态网站
- 静态网站:使用浏览器端语言进行编程,网站由静态代码(
HTML,CSS,JS)组成。用户请求服务上已经存在的页面,不需要进行业务逻辑的处理(如查询商品信息、文章信息等) - 动态网站:网页通过程序动态生成的。用户可以和服务器进行交互(可以根据用户输入的不同信息返回不同的运行结果),可以处理复杂的业务逻辑
PHP 语言
运行于web服务器端的WEB开发语言。用户可以通过浏览器发起对指定脚本的请求,服务器执行对应的脚本并返回执行结果
web 服务器
PHP是用于网页服务器端编程的脚本语言。WEB服务器是安装了WEB服务器软件的计算机,存储网站脚本程序
软件架构
C/S架构Client/Server的简写。访问不同的服务器,需要各自安装不同的客户端软件。B/S架构browser,把所有的客户端都统一成浏览器,提供一个入口即可。用户输入请求的服务器以及脚本地址,获取对应的页面信息返回
IP 地址
IP地址相当于每一个连入互联网的设备的身份证号。在浏览器地址栏按照主机的IP地址信息进行访问,可以找到互联网上的这台主机。IP地址分为四段,每段数字的取值范围是0-255,占据1个字节(8位),总共4个字节127.0.0.1作为本地测试的 IP 地址192.168开头为局域网地址
域名 Domain Name
服务器的IP地址不便记忆。使用指定的字符串对应特定IP地址,可以简化使用。localhost本地主机。这是一个保留域名,主要用于本地测试,对应127.0.0.1
DNS 域名解析系统
Domain Name System,保存了服务器名与IP地址之间的映射关系
DNS 服务器
服务器的真正身份信息为IP地址,需要专门的服务器来解析IP地址与域名的映射关系DNS为一个分布式的数据库,存储 IP 地址与域名的映射关系
当从浏览器输入域名地址,发起请求时,浏览器访问DNS服务器,获取域名对应的IP地址,然后使用该IP地址访问服务器
本地hosts文件
每次都请求网络中的DNS服务器,时间成本较高。windows自带的DNS文件,可以用来缓存域名与IP地址的对应关系,此外浏览器也会缓存部分域名与IP地址的映射 C:\Windows\System32\drivers\stc\hosts | win+R drivers
端口
一台计算机可能同时提供多种服务,如web服务,FTP 服务(传输网站程序),不同服务器软件见识不同的端口来提供不同的服务。 web服务 :80
URL
http/https网络协议,www.baidu.com服务器名,:80端口号,index.php资源名
字符集 utf8
header("content-type:text/html;charset=utf8");
写在最顶部
定义变量
$name
变量声明一般与赋值同时进行
删除变量
unset($name)
删除变量名及值之间的对应关系,变量名及变量值不会立即消失,PHP有垃圾回收机制会处理。
输出
echo $str1,$str2,"string";
输出字符串、变量及表达式。可以同时输出多个变量及字符串
print $str;
可以输出字符串、变量及表达式。不支持同时输出多个字符串及变量
var_dump($str1,$str2);
输出一个或者多个变量的类型,长度及值。一般用于打印复杂变量(结合 pre 标记)
echo "<pre>";
var_dump($array1);
echo "</pre>";
print_r()
输出变量的值,一般用于打印变量。对于字符串类型、整形、浮点型打印变量本身。不能打印布尔类型的原始值。对于复杂类型的变量如数组、对象按照一定的格式显示
php 数据类型
- 标量数据类型(scalar)
- 整型 integar
- 浮点型 float
- 字符串 string
- 布尔类型 boolean
复杂数据类型
- 数组 array
- 对象 object
特殊数据类型
- null
- 资源型 resource
整型最大值
PHP_INT_MAX
isset()
判断变量是否设置,变量未设置或者设置为null返回false,其余情况全为true
empty()
判断变量是否为空,PHP 中认为变量的值为""、0、"0"、null、false、[]时,变量虽然定义了,但是无实际的意义,为空。
类型强制转换
(int|string|bool|float)$var;
常量
脚本执行周期内,值不会发生改变的量。
常量存放在常量区,该区域中的常量不可以修改及删除。
相同的值定义为常量可以节省存储空间,如运行模式常量,版本常量,路径常量等
define("VERSION","1.1.1");
常量名推荐全部字母大写
const 常量名 = 常量值
与 define 定义的常量一样。不能在函数、流程控制(if、while)中定义常量
判断是否已经定义摸个变量
defined("AAA");
特殊运算符
字符串连接符.
遇到比较长的字符串,可以先拼接再输出。PHP有专门的输出缓冲层,只有缓冲区域的数据达到指定大小才会输出。尽量使用字符串连接符提升代码的执行效率
$str = "name ".$name."age ".$age;
字符串分隔符,
echo语句可以同时输出多个表达式,多个表达式之间使用,分割。此时将各个表达式作为参数,将echo当做函数使用
错误抑制符@
抑制错误提示,可以加在变量前面
$res = @mysql_connect($host,$user,$password);
die() exit()
退出代码执行,当前位置之后的所有代码不执行。可以用来进行程序运行控制,可以在出错的时候执行此语句,退出代码的执行。
可以在退出时输出变量值、完成函数执行 die([..]);
sleep()
执行到sleep所在的语句后,延缓一定的秒数后继续执行。
函数
声明
function 函数名([参数1,参数2]){
函数体
};
函数名不区分大小写
调用
函数名([参数1,参数2]);
先声明后调用。PHP 执行的第一阶段为预编译,将函数代码存放在内存的代码区,执行阶段使用函数名调用函数。
PHP 支持的作用域
全局作用域与局部作用域没有交集,不同函数的作用域也没有交集。
创建一个全局变量,系统会自动在$GLOBALS中创建变量名为下标的元素
在局部作用域使用$GLOBALS["A"]引用全局数据。
时间日期函数
time();返回 1970 年 1 月 1 日到当前的事件秒数 date();按照给定的格式产生字符串
echo '当前时间为'.date('Y-m-d H:i:s',time());
$file = date('Ymd-His').mt_rand(1000,9999).'.png';
echo $file;
strtotime();将字符串转换为时间戳
echo strtotime('now');
echo strtotime('10 September +1 day');
echo strtotime('+1 day');
echo strtotime('+1 week');
echo strtotime('+1 week 2 days 4 hours 2 seconds');
echo strtotime('next Thursday');
echo strtotime('last Monday');
数学函数
max(),min() 分别返回一组数的最大值及最小值 abs(); 返回绝对值 floor(); 向下取整 ceil(); 向上取整 round(); 四舍五入 rand()和mt_rand() 返回随机数,可以取到两端的值。mt_rand生成速度比rand快四倍多 dechex(); 十进制转十六进制
文件载入
将文件代码引入到PHP文件中执行,如果引入的是HTML代码,会再PHP模式与HTML模式之间切换。
魔术常量__DIR__
自动获取当前执行脚本的目录
include './include1.html';
require_once '../include2.html';
echo '当前执行脚本的目录'.__DIR__;
include | inclide_once | require | require_once
均可以引入文件,require 引入文件失败返回fatal error,后续代码不执行 _once 对于已经载入文件的,不再进行载入,避免函数的重复定义
字符串
单引号不解析变量
双引号可以解析变量heredoc字符串定义结构
$str=<<<heredoc标记名
//字符串内容
heredoc标记名;
可以解析变量,单双引号不需要转义处理。一般用于保存较长字符串或者 JS 代码等
字符串长度
strlen($str);
返回单字节字符串的字节数
mb_strlen($str,utf8);
开启php_mbsting.dll扩展后使用mb_strlen函数来统计多字节字符串的字符长度。
字符串相关函数
printf("%s的年龄为%d",$name,$age);依据第一个参数的格式产生输出 str_replace($search,$replace,$subject);将$subject中的全部search都被replace替换 str_ireplace();不区分大小写 str_repeat(sting$input,int$multiplier);返回input重复multiplier次后的结果
strtolower();转换为小写strtoupper();转换为大写ucfirst();转换为首字母大写
trim($str)去除首尾空白ltrim();去除左侧空白rtrim();去除右侧空白
explode('分隔符',$str);
将目标字符串使用分隔符分割,返回子字符串组成的数组implode('连接的字符',$arr);
将数组的元素使用连接字符拼接成新的字符串str_split($str,int字符串的长度);
将字符串分成指定长度(默认为 1 字节)的子字符串,返回数组
strpos($str,'要查找的子字符串');
查找子字符串在目标字符串中的首次出现的位置,从左侧开始查找,下标从 0 开始strpos(); 从右侧开始查找substr($str,起始下标,截取的长度);
截取指定位置开始的子字符串,省略第三个参数直接截取到末尾strchr(目标字符串,截取的起始字符串);
从左侧,从字符串出现的位置截取到末尾strrchr()
从右侧
数组
数组是内存中一块连续的空间(堆区),用来保存不同类型的数据,数据没有长度限制
数组由多个元素组成,每个元素有下标,称为键(key),元素有值(value)。数组有多个键值对组成
显式创建数组
$arr = [1,2,4];
$arr = array(1,2,3);
隐式创建数组
$arr[] = 1;
$arr[] =2;
// $arr=[1,2];
索引数组
$arr=[4=>123,345,456];下标仅为一个索引
关联数组
$student =[
'name'=>'jean',
'age'=>18,
'is_single' = true
];
混合数组
$info=[123,'name'=>'jam',true];
多维数组
$stu=[
['aaa',18,true],
['bbb',28,false],
['ccc',22,false]
]
数组元素的访问
$arr[1];
数组遍历
foreach($arr as [$key =>] $value){
//循环体
}
max();min();
返回数组元素中最大值及最小值。count();
统计数组元素的个数,参数2传true,递归统计。range();
返回位于起始元素及终止元素之间的值,组成新的数组,可以设置元素值的步长。range('a','z',2);array_merge();
合并多个数组,关联数组合并时,若元素下标相同,后面的数组的元素覆盖前面的,索引数组不覆盖。array_rand(); 随机返回目标数组中指定个数的键名,以数组的形式返回。参数 1 目标数组,参数 2 键个数。shuffle();
打乱数组array_keys();
返回数组中元素的键名组成的数组。array_values();
返回数组中所有元素的值组成的索引数组。sort(); | rsort(); | asort(); | arsort(); | ksort(); | krsot();
对数组元素进行升序排序,r-降序排序,a-排序保持索引,k-按照键名排序
