一名新人,还在学习中,会不定期更新,望大家多多支持!!!
***该学习笔记是通过学习PHP课程总结的。
该课程来自全新PHP课程:[PHP在线教程从新手到高手]
https://www.bilibili.com/video/BV1UT4y1G73v?p=1%29)
文章目录
PHP 学习
1.初识PHP
PHP:
“PHP,Hypertext Preprocessor”的缩写,即“超文本预处理器”。PHP是一种功能强大,并且简便易用的脚本语言,它可嵌入到HTML中,尤其适合web开发。
起源:
1994年 Rasmus 创作了PHP。(这完全是Rasmus的个人爱好)
1997年,Zeev、Andi重写了解析器。发展到php3。(有了队伍)
2000年5月,php4发布,它使用了Zend引擎(ZEEY+Andi)。(有了标准)
2000年7月,php5正式发布。(飞速发展,不断创新)
PHP最新官方网址:www.php.net
特点:
PHP是免费的。
效率高:PHP消耗相当少的系统资源。
易学易用,功能强大。
跨平台的。可以运行在UNIX、LINUX、WINDOWS下。
嵌入HTML,因为PHP可以嵌入HTML语言,学习起来并不困难。
服务端的脚本语言
与HTML无缝对接
文件名以.php结尾
…
工作流程:
1.客服端发送一个请求
2.服务器运行PHP
3.查询数据库(如果需要)/加载其他的文件(如果需要)
4.返回请求结果给客户端
PHP能做什么?
1.创建动态页面
2.与服务器上的文件进行交互
3.处理表单事件
4.发送或接受Cookies
5.与数据库进行交互
PHP能制作什么作品?
1.基本网站/博客网站
2.购物车
3.社交网络
4.各种管理系统/会员管理系统
5.搜索引擎/接口文档等
PHP运行环境
WAMP: Windows+Apache+MySQL+PHP
WNMP:Windows+Nginx+MySQL+PHP
LAMP: Linux+Apache+MySQL+PHP
LNMP:Linux+Nginx+MySQL+PHP
Apache,Nginx:web服务器环境
MySQL:服务处理数据库
2.项目开发模式(bs,cs)
bs:浏览器(browser),服务器模式(server)
cs:客户端(client),服务器模式(server)
项目开发bs模式:
1.通过本机万能ip地址访问:127.0.0.1 / locallost
2.通过本机真是ip地址访问: xxx.xxx.xxx.xxx
windows系统->cmd->ipconfig
3. 通过模式真实域名线下开发调试 比如:www.baidu.com
3.PHP7 基本语法
语法格式
1.PHP标签
<?php ?>
输出指令:
echo: 可以一次输出多个值多个值之间用逗号隔开。echo并不是真正的函数,不能作为表达式的一部分使用。echo是php的内部指令,不是函数,无返回值。
print:print()是一个函数,有返回值。如果字符串成功显示则返回true,否则返回false,只能打印出简单类型变量的值。
2.注释
//单行注释
/* 注释单行或多行 */
#这里是注释(不建议用)
PHP八大数据类型
1.四种标量类型(布尔型\整型\浮点型\字符串)
1、布尔型
是最简单的类型。总计有两个值,可以为 TRUE 或 FALSE。
要指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都是大小写不敏感的 。
2、整型【数值型】
整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(- 或者 +)。
如果用八进制符号,数字前必须加上 0(零),用十六进制符号数字前必须加上 0x。 例子 6-1. 整数文字表达。
$a = 1234; # 十进制数
$a = -123; # 一个负数
a = 0123; # 八进制数(等于十进制的 83)
a = 0x1A; # 十六进制数(等于十进制的 26)
3、浮点型【数值型】
<?php
$a = 1.234;
$a = 1.2e3;
$a = 7E-10;
?>
字符串定义的三种方式:
1.‘’
2.""
3.定界符
<?php
$a=<<<EOT
<html>hahaha</html>
EOT;
echo $a;
?>
注:双(单)引号里面若需要出现双(单)引号,需要用\转义
""支持变量,‘’不支持变量。
2.两种复合类型(数组\对象)
3.两种特殊类型(资源\NULL)
变量(大小写敏感)
1.自定义变量
变量名的声明:
$_ 例:$_123
$字母 例:$a
注:不可以数字开头,变量中不能出现特殊字符,如#
2.预定义【系统】变量
9大超全局变量:
$GLOBALS
$_SERVER
$_GET
$_POST
$_REQUEST
$_COOKIE
$_SESSION
$_FILES
$_ENV
3.可变变量
一个变量内部又出现另外一个变量
<?php
$a=1;
$b='a';
echo ${$b}; //$a
?>
4.变量的作用范围
//1.写在函数里的变量,均视为局部变量,即使使用函数外的全局变量同名,也是局部变量。
//2.如果希望在函数里使用函数外的全局变量,可用global来声明,也可以用$GLOBALS替代global
例:
<?php
$a=1;
$b=2;
function SUM()
{
$GLOBALS['b']=$GLOBALS['a']+$GLOBALS['B'];
global $a,$b;
$b=$a+$b;
}
?>
全局变量:函数外部的变量,默认是全局变量
局部变量:函数内部的变量,默认是局部变量
常量(大小写敏感)
1.自定义常量
常量只能包含标量数据(boolean,int,float,string)
常量声明:
define("常量名",6666);
2.预定义【系统】变量
PHP向它运行的任何脚本提供了大量的预定义常量,也称为魔术常量。
_LINB_文件中的当前行号
_FILE_文件的完整路径和文件名
_FUNCTION_函数名称
_CLASS_类的名称
_METHOD_类的方法名
PHP_VERSION
PHP_OS PHP所在的操作系统名字,如"WINNT"
E_ERROR 这个常量指到最近的错误处
E_WARNING 这个常量指到最近的警告处
....
函数
1.自定义函数
函数声明:
<?php
function 函数名{
}
或
function 函数名(参数1,参数2){
}
?>
预定义【系统】函数
例:print();函数等
四种标量类型(布尔型\整型\浮点型\字符串)
1.布尔型(boolean)
是最简单的类型。总计有两个值,可以为 TRUE 或 FALSE。
要指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都是大小写不敏感的
2.整型
一、四种整型数据:
十进制:逢十进一,0~9
二进制:逢二进一,0~1
八进制:逢八进一,0~7
十六进制:逢十六进一,0~9 a~f
二、四种整型数据的表示方法:
<?php
$a = 101; // 十进制
$b = 0b101; // 二进制,前缀是0b 【数字0b,不是英文ob】
$c = 0101; // 八进制,前缀是0【是数字0,不是英文o】
$d = 0x101; // 十六进制,前缀是0x【是数字0x,不是英文ox】
echo $a,"<br/>",$b,"<br/>",$c,"<br/>",$d; // 101 5 65 257
?>
三、进制之间的转换函数
decbin():十进制转二进制
decoct():十进制转八进制
dechex():十进制转十六进制
bindec():二进制转十进制
binoct():二进制转八进制
等等
四、规律:
bin():二进制
oct():八进制
dec():十进制
hex():十六进制
他们之间相互组合,即可实现所有进制之间的转换
//例如:十进制转二进制
echo decbin(5); // 101
echo decoct(65);// 101
案例
<?php
echo decbin(2); // 十进制转二进制 10
echo "<br/>";
echo bindec(10);//二进制转十进制 2
echo "<br/>";
echo decoct(10);// 十进制转八进制 12
echo "<br/>";
echo octdec(12);// 八进制转十进制 10
echo "<br/>";
echo dechex(10);// 十进制转十六进制 a
echo "<br/>";
echo hexdec('a');// 十进制转十进制 10
?>
3.浮点型
<?php
$a = 1.234;
$a = 1.2e3;
$a = 7E-10;
?>
4.字符型
1.计算字符串长度:strlen
int strlen (string string)返回的是字节数
例子 1
<?php
$str = 'abcdef';
echo strlen($str); // 6
$str = ' ab cd ';
echo strlen($str); //7
?>
例子 2
汉字比较特殊:::::
<?php
$str = '你好';
echo strlen($str); //utf-8编码下是: 6,gb2312下是4
?>
2.大小写转化
string strtoupper ( string string)转为大写。
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtoupper($str);
echo $str; // MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
?>
strtolower( string string)转为小写,用法与上同。
<?php
//小写:strtolower
$str3="I LOVE YOU";
$str4=strtolower($str3);
echo $str4;//output i love you
?>
<?php
//把字符串第一个字符转化为大写:ucfirst
$str='i love you';
$str5=ucfirst($str);
echo $str5;//output:I love you
?>
<?php
//把字符串里每一个单词的第一个字符转化为大写:ucwords
$str6="i love you";
$str7=ucwords($str6);
echo $str7;//output:I Love You
?>
3.查找子串在原串的出现位置,从0开始:strpos
<?php
$str='i love you';
$findme = ' ';
$pos1=strpos($str,$findme);
echo $pos1;//output:1
echo ' ';
//2指的是从str指定的数值算起,如果没有2,则从头查起
$pos=strpos($str,$findme,2);
echo $pos;//output:6
?>
5.截取字符串
<?php
//截取字符串,采用 起点 长度方式
echo substr("iloveyou",1,4);//love
//1是起点,指从右边第一个开始,4是长度
//-2是起点,指从左边第二个开始
echo "<br>",substr("iloveyou",-4);//eyou
//-2是起点,指从左边第二个开始,长度为2
echo "<br>",substr("iloveyou",-4,2);//ey
//1是起点,指从右边第一个开始,-1是终点,指截到左边第一个
echo "<br>",substr("iloveyou",1,-1);//loveyo
?>
<?php
//截取汉字mb_substr() 字符个数
echo mb_substr("塑料落在了木地板上,我说了句我爱你",1,2,'utf-8');//料落
echo "<br>";
//截取汉字mb_strcut 字节个数
$a="塑料落在了木地板上,我说了句我爱你";
echo mb_strcut($a,1,3);//塑
?>
<!-- 截取字符串,采用子串一结尾的方式:strstr -->
<?php
//strstr ( string 原串, string 标识)截字原字符串中,从包含标识处到结尾的字符。如果找不到,返回 FALSE.
$email='2471062389@qq.com';
$domain=strstr($email,'@');
echo $domain;//output:@qq.com
?>
- 根据一对一的关系把一个字符串里的字符转化为其他字符:strtr
<!-- str (string str,from,to) -->
<?php
//str(from)<str(to)
echo strtr("weiy12","wei","dong");
//output:dony12
?>
<br />
<?php
//str(from)>from(to)
echo strtr("dongyi","dong","wei");
//output :weigyi
?>
7.分割字符串与连接字符串
<!--分割字符串,将字符串变成数组:explode -->
<?php
$str="1,2,3,4,5,6";
//arr是数组,arr(1,2,3,4,5);
$arr=explode(",",$str);
//print_r($arr);
var_dump($arr);//查看变量$arr是否是数组
?>
<!-- 连接字符串,将数组变成一排 -->
<?php
$str1="1,2,3,4,5";
$arr1=explode(",",$str1);
echo implode(" ",$arr1); //output:1 2 3 4 5
?>
8.in_array
<!-- in_array:验证我们的某一个字符串是否在数组当中 -->
<!-- 如果在返回true,不在返回false -->
<!--bool in_array ( mixed needle, array haystack [, bool strict] )在 haystack 中搜索 needle,
布尔型 字符串 数组 数据类型(可省略)-->
<?php
//定义数组
$arr=array(1,2,3,4);
echo in_array(3,$arr); //output:1即3在该数组中,1是布尔型,即为ture
//echo gettype(in_array(3,$arr)); 输出数据类型(布尔型)
?>
9.去掉左右空格:trim
<!-- 去掉左右空格:trim -->
<!--string trim ( string str [, string charlist])
str为在处理的字符串;
charlist为要去掉的内容。默认为去空格及\r \t \n。-->
<!-- " " (ASCII 32 (0x20)), an ordinary space.
"\t" (ASCII 9 (0x09)), a tab.
“\n” (ASCII 10 (0x0A)), 换行).
“\r” (回车) -->
<?php
$str="\t\tMy name is China 9999 ";
echo $str;
echo trim($str); //表示去掉空格以及\t \r \n
echo trim(trim($str),"9") //表示去掉\t以及9.
?>
10.普通式替换:str_replace:mixed str_replace ( mixed old, mixed new, mixed string [, int &count])字符串翻译式替换
<?php
$str=str_replace("dong","wei","dongyidong");
echo $str; //output:weiyiwei
$str1=str_replace("dong","wei","dongyidong",$a);
echo $a; //output:2
?>
11.字符反转:strrev:string strrev ( string string) 字符串反转
<?php
echo strrev("dongyihang"); //output:gnahiygnod
?>
12.在插入数据库前把一些特殊字符转义:addslashes
<?php
$mystring = "abc'";
echo addslashes($mystring); //output:abc\'
?>
13.去除特殊字符的反斜线:stripslashes
<?php
$mystring1="abc\'";
echo stripslashes($mystring1); //output:abc'
?>
14.把特殊字符转化为HTML实体;htmlspecialchars()
<?php
$mystring = "<script>alert('123');</script>";
echo $mystring; //js弹窗
// 右击查看源代码看看有什么变化:<script>alert('123');</script>
//echo htmlspecialchars($mystring); //在浏览器上原样输出<script>alert('123');</script>;
?>
5.数组
1.数组的定义、初始化及基本操作函数
定义:array():它接受一定数量用逗号分隔的 key => value 参数对。
数组的定义:
分为一维数组,二维数组,多维数组
一维数组:array()
二维数组:array(array())
多维数组:array(array(array(……)))
以下针对于一维数组:
一、纯索引下标,下标是从0开始
<?php
$arr=array(1,2,3,'4');
print_r($arr);//output:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
//有数据类型的输出方式
//var_dump($arr); //array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> string(1) "4" }
?>
二、键名=>键值对方式.key array( [key =>] value , … ) // key 可以是 integer 或者 string // value 可以是任何值
<?php
$arr=array("a"=>1,"b"=>2);
print_r($arr); //Array ( [a] => 1 [b] => 2 )
?>
三、键名=>键值对 和 索引下标 的混合
<?php
$arr=array("a"=>1,"n"=>2,5,6);
print_r($arr);//Array ( [a] => 1 [n] => 2 [0] => 5 [1] => 6 )
?>
数组的引用:
<?php
//数组的引用,若引用 索引下标值。$arr[$index]
$arr=array(1,2,3,'c','x');
print_r($arr[0]);//1
echo "\n";
print_r($arr[1]);//2
echo ' ';
print_r($arr[2]);//3
echo ' ';
print_r($arr[3]);//c
echo ' ';
print_r($arr[4]);//x
?>
数组的初始化:
<?php
//空数组的赋值
$arr=array();
$arr[]=1;
$arr[]=2;
$arr['a']=3;
$arr[]=6;
$arr[1]=6;
print_r($arr);//Array ( [0] => 1 [1] => 6 [a] => 3 [2] => 6 )
//删除数组的某个元素:unset($arr[0])
//unset($arr[1]);
//print_r($arr);//Array ( [0] => 1 [a] => 3 [2] => 6 )
//获得数组的个数:count($arr)
//echo count($arr);//3
//print_r($arr);//Array ( [0] => 1 [1] => 2 [a] => 3 )
?>
数组的基本操作函数
1.向数组的开头插入元素:array_unshift($ayy,value);
<?php
$arr=array(1,2,3);
array_unshift($arr,4);
print_r($arr);//Array ( [0] => 4 [1] => 1 [2] => 2 [3] => 3 )
?>
2.向数组后方添加元素:array_push($ayy,value);
<?php
$arr=array(1,2,3);
array_push($arr,6);
print_r($arr);//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 6 )
还有一种形式:
//$arr=array(1,2,3);
// $arr[]=4;
// print_r($arr);//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
?>
3.数组的截取:获得数组的子集 array_slice($ayy,aarrint offset,[int length]);
<?php
$arr=array(1,2,3,4);
//$arr1=array_slice($arr,2);
//print_r($arr1);//Array ( [0] => 3 [1] => 4 )
$arr1=array_slice($arr,2,1);
print_r($arr1);//Array ( [0] => 3 )
?>
4.foreach:对数组进行一个循环,,在循环过程中进行一个处理
<?php
//给指定的数组元素都加1
$arr=array(1,2,3,4,5);
//$k 数组下标 $v 数组元素
foreach($arr as $k=>$v){
//echo $k."<br />";///0 1 2 3 4
//echo $v."<br />";//1 2 3 4 5
$arr2[]=$v+1;
}
print_r($arr2);//Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 )
?>
2.数组内部结构转换:
内部指针:
指针是数组内部的组织机制。简单地说,数组的内部指针指向一个数组单元,或者说对应着一个数组元素。通过移动或改变指针的位置,可以访问数组的任意元素。
其中有两个函数:
1.each($arr)函数生成一个由数组当前内部指针所指向的元素的键名和键值组成的数组,并把内部指针向前移动 。
2.list() 一般与each()元素使用,将数组元素分解一系列的值。
<?php
$arr=array('df','aa','bb');
/*while($el=each($arr)) {
echo "<br>".$el["key"];
echo "<br>".$el["value"];
}*/
while(list($a,$b)=each($arr)) {
echo "<br>".$a;
echo "<br>".$b;
}
?>
数组和变量之间的转换
1.数组转变量:extract(); 键名作为变量名,值作为变量的值。
<?php
$arr= array("a"=>1,"b"=>2,"c"=>3);
extract($arr);
echo $a,"<br>";//1
echo $b,"<br>";//2
echo $c,"<br>";//3
?>
2.变量转数组:compact(); 变量名作为键名,值是变量的值。
$a=1;
$b=2;
$c=3;
$arr=compact("a","b","c");
print_r($arr);//Array ( [a] => 1 [b] => 2 [c] => 3 )
//echo $arr[b];//2
数组的排序
1.按值正向排序:sort($arr)
<?php
$a=array(100,1,3);
sort($a);
print_r($a);//Array ( [0] => 1 [1] => 3 [2] => 100 )
//asort($a); //按值正向排序,保持关键字和值的对应关系
//print_r($a);//Array ( [1] => 1 [2] => 3 [0] => 100 )
?>
2.按值反向排序:rsort($arr)
<?php
$a=array(100,1,3);
rsort($a);
print_r($a);//Array ( [0] => 100 [1] => 3 [2] => 1 )
// arsort($a); //按值反向排序,保持关键字和值的对应关系
// print_r($a);//Array ( [0] => 100 [2] => 3 [1] => 1 )
?>
3.ksort($arr)按照键名排序,保持对应关系
krsort($arr)按照键名逆向排序,保持对应关系
<?php
$a=array(1=>18,10=>108,8=>81);
ksort($a);
print_r($a);//Array ( [1] => 18 [8] => 81 [10] => 108 )
?>
4.PHP获取一维数组中的最大值
<?php
$a=array('1','3','55','99');
$pos = array_search(max($a), $a);
echo $a[$pos]; //99
//echo max($a);//99
?>
注意:
max() 返回参数中数值最大的值。
如果仅有一个参数且为数组,max() 返回该数组中最大的值。如果第一个参数是整数、字符串或浮点数,则至少需要两个参数而 max() 会返回这些值中最大的一个。可以比较无限多个值。
注:PHP 会将非数值的字符串当成 0,但如果这个正是最大的数值则仍然会返回一个字符串。如果多个参数都求值为 0 且是最大值,max() 会返回其中数值的 0,如果参数中没有数值的 0,则返回按字母表顺序最大的字符串。
5.PHP中获取数组中的最小值
<?php
$a=array('1','3','55','99');
$pos = array_search(min($a), $a);
echo $a[$pos]; //1
//echo min($a);//1
?>
数组的计算
1.数组元素的求和:Array_sum(),在计算时,数组的每一个元素都将转换为相应的整型或浮点型数据 。
<?php
$arr = array("foo" => "bar", "a12" => 1,15=>3.5);
echo array_sum($arr);//4.5
?>
2.数组的合并
(1).Array_merge()函数可以合并两个或多个数组。函数接受任意个数的数组作为参数,并返回一个合并后的大数组。
<?php
$arr = array("foo" => "bar", 'a12' =>12,15=>3.5);
$arr2=array('s'=>3,5=>6);
print_r(array_merge($arr,$arr2));//Array ( [foo] => bar [a12] => 12 [0] => 3.5 [s] => 3 [1] => 6 )
//若输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面,并且所有数组都被视为一维的。
// $arr = array("foo" => "bar", "a12" =>12,15=>3.5);
// $arr2=array("s"=>3,5=>6,"foo"=>"ss",15=>155);
// print_r(array_merge($arr,$arr2));//Array ( [foo] => ss [a12] => 12 [0] => 3.5 [s] => 3 [1] => 6 [2] => 155 )
?>
(2).我们也可以使用“+”运算符合并数组,与array_merge()不同的是,对于相同键名的元素将值保留一个。
相对于+,array_merge更稳定些,推荐使用array_merge
<?php
$arr = array("foo" => "bar", "a12" =>12,15=>3.5);
$arr2=array("s"=>3,5=>6,"foo"=>"ss",15=>155);
print_r($arr+$arr2);//Array ( [foo] => bar [a12] => 12 [15] => 3.5 [s] => 3 [5] => 6 )
?>
注:array_merge合并数组中,若后者数组键名【字符串型】和前者冲突,覆盖!
3.数组的差集:array_diff(),接收至少两个数组的参数并返回它们的差集结果数组。该数组包含了所有在第一个参数数组中,但不在任何其他参数数组中的值。
<?php
$arr = array("foo" => "bar",'a12' =>12,15=>3.5,3);
$arr2=array("s"=>3,5=>6,"foo"=>'ss',15=>155,3);
print_r(array_diff($arr,$arr2));//Array ( [foo] => bar [a12] => 12 [15] => 3.5 )
?>
4.数组的交集:array_intersect(),接收至少两个数组的参数并返回它们的交集结果数组。
该数组包含了所有在第一个参数数组中,也同时出现在所有其他参数数组中的值(若使用array_intersect_assoc(),同时检查键名)。
<?php
$arr = array("foo" => "bar",'a12' =>12,15=>3.5,3);
$arr2=array("s"=>3,5=>6,"foo"=>'ss',15=>155,3);
print_r(array_intersect($arr,$arr2));//Array ( [16] => 3 )
?>
其他数组函数
1.移除数组中重复的值:Array_unique()函数。该函数返回一个没有重复元素的新数组。所谓重复的元素,是指元素的字符串表达式相同。新的数组中会保留原来的键名。
形式(1):
<?php
$arr=array("a"=>1,"b"=>1,"c"=>2,"d"=>10,"e"=>135);
print_r(array_unique($arr));//Array ( [a] => 1 [c] => 2 [d] => 10 [e] => 135 )
?>
形式(2):
<?php
$arr=array(1,1,2,10,135);
print_r(array_unique($arr));//y ( [0] => 1 [2] => 2 [3] => 10 [4] => 135 )
?>
2.PHP中的两个关于数组的随机函数
(1).array_rand(),从数组中随机取出一个或多个元素。rray_rand(数组,返回的个数( 默认为1));
<?php
$arr=array(1,2,3,4);
$a=array_rand($arr,2);//得到的是下标
print_r($arr[$a[0]]);
print_r($arr[$a[1]]);
?>
(2).Shuffle()将使数组的顺序打乱。shuffle() 函数把数组中的元素按随机顺序重新排列。若成功,则返回 TRUE,否则返回 FALSE。
<?php
$arr=array(1,2,3,4);
shuffle($arr);
print_r($arr);
?>