PHP学习记录
1、PHP概述:
- php的目标是允许网络开发人员快速编写动态页面
- 主要被用于开发各种网站程序
- 是脚本语言,不需要事先编译,在服务器运行。
2、web工作原理:
web服务器: 浏览器 → 输入url地址 → 显示网站内容
服务器是一种软件,把安装运行了服务器的电脑叫主机(host)
3、php脚本语言:
开始: <?php
结束: ?>
<?php ?>
表示进入php模式。
-
PHP代码可以嵌入到 html 代码中任何位置,并且可以嵌入任意多个。
-
文件末尾的
?>
结束标志可以省略 -
一些PHP语句的结尾要加上
;
表示一句话的结束 -
结束标记
?>
就隐含了一个;
1)多行注释
/*
多行注释
*/
2)单行注释:
//我是单行注释
3、变量
变量是用于临时(只有在我们的程序的运行过程中才存在)存储值(数据)的容器
变量用于存储 数字、文本字符串 或者数组这些数据!
$变量名=数据(值)
1.变量的销毁:
unset($变量名称)
$and1=1;
unset($and1);//销毁$and变量
echo $and1;//提示出错,因为变量已经被销毁了!
2.变量的命名规则:
1)变量名称严格区分大写
$name,$NAME,$Name都是不同的变量
2)
字母或者下划线开头
后面接任意数量的字母数字下划线都可以!
错误的命名方式:
$1name 错误点:以数字开头了
$n ame 错误点:中间有空白字符
总结一下:变量名只能包含 字母 数字 下划线 并且必须以字母或者下划线开头!
3)最好不要用一些关键字作为变量名称(因为在其他的编程语言里面是完全不被允许的)!
4.变量类型
1.变量类型简介
1)bool (布尔型)
$a=true;
var_dump($a);
往变量里面存true或者false,那么这个变量就是布尔型了
2)int (整型)
往变量里面存整数,那么这个变量就是整型变量啦!
3)float (浮点型,也称double)
往变量里面存小数,那么这个变量就是浮点型数据了!
$a=1.1;
var_dump($a);
4)string (字符串)
字符串就是一系列的字符组成串在一起!
1单引号:
$b=1;
$a='test$bdwqd\'wqdqw';
var_dump($a);
echo $a;
在定义一些简单的字符串的时候使用单引号这种方法效率比较高!
2双引号
$b=100;
$a='te$bst......';
$a="te{$b}st......";
var_dump($a);
echo $a;
3定界符
$b=200;
$a=<<<www
dwqdqwdwq{$b}dwqdqdqdqdwqdwqcwcfwefwefcscwecwefwdqwdqdefwefwefewfwe
www;
var_dump($a);
3定界符
$b=200;
KaTeX parse error: Expected '}', got 'EOF' at end of input: …<www dwqdqwdwq{b}dwqdqdqdqdwqdwqcwcfwefwefcscwecwefwdqwdqdefwefwefewfwe
www;
var_dump($a);
4)NULL
null表示一个变量没有值,表示空
将变量直接赋值为null
声明的变量尚未被赋值
被unset函数销毁的变量
$a=1111;
unset($a);
var_dump($a);
5.常量
1.概念
常量是用于临时(只有在我们的程序的运行过程中才存在)存储值(数据)的容器
2.定义和使用
define(‘常量名称’,常量值) 或者 define(“常量名称”,常量值)
常量的命名:
1)和变量一样 只能包含字母数字下划线 并且必须以 字母或者下划线开头
2)按照惯例常量名字总是大写的
3)自定义的常量是严格区分大小写的!
defined()函数来检查是否定义了某个常量
3.常量和变量的区别
1)常量前面没有美元符号($)
2)常量只能用define()函数定义,不能通过赋值语句
3)********常量可以不用理会变量范围的规则而在任何地方定义和使用
4)常量一旦被定义就不能被重新定义或者取消定义
5)常量的值只能是bool,int,float,string类型
4.预定义常量
预定义常量说白了就是我们的PHP内核已经帮我们定义好了的常量!
其中有的预定义常量是一__开头的,这些预定义常量我们又叫它魔术常量
代码所在的位置不同他的值也是不同的,所以它加 魔术常量
八个常用的魔术常量
http://php.net/manual/zh/language.constants.predefined.php
预定义常量是不区分大小写的!
6.运算符
概述:
说白了就是一些符号,这些符号可以将变量或者数据执行某中运算!
1.算术运算符
1)+
$a=1;
$b=2;
$c=$a+$b;
echo $c;
2)-
第一个意思: 减号
$a=10;
$b=2;
$c=$a-$b;
echo $c;
第二个意思: 取反
$a=1;
$b=-$a;
echo $b;//-1
echo '<br />';
echo $a;//1
注意
:取反并不会影响到被取反变量本身的值!
3)* 乘号
$a=4;
$b=2;
$c=$a*$b;
echo $c;
4)/ 除号
$a=10;
$b=2;
$c=$a/$b;
echo $c;
5)% 取模
$a=12;
$b=2;
echo $a%$b;
6)++ 自增
前++
当在一个语句里面需要使用到被自增的变量的值的时候,前++会先执行自增,然后再返回自增之后的值!
$a=10;
echo ++$a;//11
后++
当在一个语句里面需要使用到被自增的变量的值的时候,后++会先返回变量的值然后再去执行自增
$a=10;
//++$a;//$a=$a+1;
//$a++;//$a=$a+1;
echo $a++;//echo $a;$a=$a+1;
echo '<br />';
echo $a;//11
注意:
$a=10;
++$a;//这种情况不需要用到自增变量值的时候,和后++无区别
echo $a;
7)-- 自减
前–
$a=10;
//$a--;//$a=$a-1; 和--$a没区别;
echo --$a;//$a=$a-1;echo $a;
echo '<br />';
echo $a;
后–
$a=10;
//$a--;//$a=$a-1; 和--$a没区别;
echo $a--;//echo $a;$a=$a-1;
echo '<br />';
echo $a;
注
意:自增或者自减是对变量而言的!
2.字符串运算符
. 连接运算符
$a='孙胜利';
$b='测试字符串连接符';
echo $a.$b;
3.赋值运算符
=
把右边的值赋给左边的变量
$a=1;
二元运算符
表达式是 PHP 最重要的基石。在 PHP 中,几乎所写的任何东西都是一个表达式。简单但却最精确的定义一个表达式的方式就是“任何有值的东西”。
+=
$a=1;
$b=2;
$a+=$b;//$a=$a+$b;
echo $a;
-=
$a=2;
$b=1;
$a-=$b;//$a=$a-$b
echo $a;
4.比较运算符
概念:
对操作数(按照比较运算符的要求,规则)进行比较
如果比较出的结果满足比较运算符的要求那么结果就是true(真,成立,满足),否则就是false(假,不成立,不满足)
PHP中规定:
使用echo输出布尔类型值的时候
echo true;它在页面中会输出1
echo false;它会在页面中什么都不输出
规定的,记住就好!所以说我们在测试的过程中如果需要输出布尔类型值的时候我们最好使用var_dump()来输出更明了的结果!
1)== 值是否相等
如果值相等则就是 true(真,成立)
如果值不相等那么就是false(假,不成立)
$a=1;
$b=1;
var_dump($a==$b);//true
2)=== 全等(值要相等,类型也要相等)
如果两边操作数的值 全等那么就是true否则就是false
$a=11;
$b='11';
//var_dump($a==$b);//true
var_dump($a===$b);//false
3)!= 值是否不相等
如果两边操作数的值不相等那么就是true,否则就是false
$a=1;
$b=11;
var_dump($a!=$b);//true
4)<> 同上
5)!== 不全等
如果两边的操作数不全等那么就是true,否则就是false
/*
$a=1111;
$b=2;
var_dump($a!=$b);//true
var_dump($a!==$b);//true
*/
$a=11;
$b='11';
var_dump($a!=$b);//false
var_dump($a!==$b);//true,$a不全等于$b
6)< 小于
比较两边操作数的值,前面的是否小与后面的
$a=1;
$b=1;
var_dump($a<$b);//false,$a小与$b
这句话正确还是错误
7)> 大于
$a=10;
$b=1;
var_dump($a>$b);
8)<= 小于等于
$a=1;
$b=1;
var_dump($a<=$b);//$a小与等于$b就是true,否则就是false
9)>= 大于等于
$a=2;
$b=1;
var_dump($a>=$b);//true
5.逻辑运算符
概念:
对表达式进行逻辑运算,运算出的结果是布尔类型的值(true,false)
要求:
参与逻辑运算的表达式的值是布尔类型的值,如果不是布尔类型的值会被PHP自动转换成布尔类型的值,然后再参与运算!
1)逻辑与
and 或者 &&
运算规则:
左右两边的表达式的值都为true的时候,运算的结果就是true
否则只要其中任意一个为false,运算的结果就是false;
现实举例:
true 及格
false 不及格
左右两边的表达式就是我们要考试的科目;
要求:当语文和数学都及格的时候那么,最终的结果才能够通过(true),否则就是不通过(false)
$a=false;//语文
$b=true;//数学
var_dump($a && $b);
中间隐含一个问题:“短路”,运算符的优先级的问题!
2)逻辑或
or 或者 ||
运算规则:
左右两边的表达式的值有一个为true,运算的结果就是true
,只有当两边的值都是false的时候,结果才会是false
$a=false;//语文
$b=true;//数学
var_dump($a || $b);
现实举例:
要求:当语文和数学有一门及格那么最终的结果就是通过true
中间隐含一个问题:“短路”,运算符的优先级的问题!
3)逻辑异或
xor
运算规则:
左右两边的表达式的值不一样的时候结果就是true,如果一样那么运算的结果就是false
$a=false;
$b=false;
var_dump($a xor $b);
4)逻辑非
!
运算规则:
将原来表达式的值否定掉,原来是true,那么结果就是false
原来是false,那么结果就是true
- 5)运算符
1)? :
三元运算
格式:
表达式1 ? 表达式2 : 表达式3;
如果表达式1的值为true,那么就执行表达式2,否则那么就执行表达式3
$a=false ? 10 : 20;
echo $a;//20
- 可以把系统的命令放在里面执行!
涉及到跨平台:
$a=`ipconfig`;windows环境下
$b=`ifconfig`;liunx环境下
var_dump($b);
3)@
屏蔽表达式可能发生错误!
echo @$a;
当然,实际在哪些地方应用,我们用到大家就知道了!
4)=>
5)->
6)instanceof
8.运算符的优先级
优先级的概念:
谁的优先级别高就先算谁!
结合方向:
规定了从那个方向开始算的问题!
优先级这个概念只要知道一些基本的常用的就可以了,因为我们在实际开发中几乎没有那么需要写非常复杂的表达式,
让我们去考虑先算谁,后算谁的问题!
优先级归纳:
1)[无]递增递减
2)[右]逻辑非!
3)[左]乘,除,取余
4)[左]加,减,字符串连接符
5)[无]包含大于号或者小于号的比较运算符
6)[无]不包含大于号或者小于号的比较运算符
7)[左]逻辑与&&
8)[左]逻辑或||
9)[左]? :
10)[右]赋值运算符
12)[左 ]逻辑异或xor
圆括号的作用:
用圆括号可以将表达式里面的某一块看成一个整体!
*使用括号可以增强代码的可读性。
6.流程控制
if语句
switch语句
循环语句
与C语言基本相同就不再详写。
特殊的流程控制语句
1.break语句
作用:用于switch语句,for,while,do…while,foreach,用于中断这些语句!
后面可以接上一个数字来表示跳出几层循环!默认不加就是跳出当前循环语句!
2.continue语句
作用:只能用在循环语句,跳出本次循环,并不是结束整个循环语句!
3.exit()语句
作用:结束当前整个程序的执行!
die()语句作用同上!
7.自定义函数
function 函数名([形式参数1,形式参数2,…形式参数n]){
//各种PHP代码…
//…
return 表达式;//也可以不返回,如果不写那么默认返回null
}
的返回值:
返回给调用者,默认返回null
当执行完return 命令后,即结束函数。
二、PHP变量的范围
1.局部变量
function test(){
$a=1;//局部变量$a,尽在这个函数内部有效
}
echo $a;
2
.全局变量
$i=10;//全局变量(外部变量)
define('MY_NAME','石明康');
function test(){
echo MY_NAME;
global $i;//声明$i为全局变量,然后再这个函数内部就可以使用$i
echo $i;
$a=1;
}
test();
静态变量:
三、参数的传递
1.按值传递参数
默认的,我们在传递参数的时候默认使用的就是这个方式!
对形式参数的操作,根本不是影响到实际参数(变量)的值,两者相当于没有联系!
2.按引用传递参数
按引用传递参数,相当于形式参数和实际参数指的是同一个人,只是名字不一样,对于形式参数的操作会直接影响到实际参数(变量);
3.函数的默认参数
可以给形式参数设置默认值,设置方法很简单直接赋值即可!
给形式参数加默认值的时候是重右往左加的,右边的必须有,才能够给左边的加!
四、可变函数(变量函数)
直接把函数赋值给变量
可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。
五、递归函数
递归函数即在函数内部自己调用自己的函数。
递归函数:
1)函数在被调用的执行过程中会在内存里面分配空间用于存储临时数据,那么函数在执行过程中默认之间时没有联系的(除了
静态变量,按引用传,全局变量)。里面的变量默认都是局部变量,相互之间没有影响!
2)递归函数,在函数的内部需要有适时结束函数运行的条件!
六、内部(内置)函数
PHP提供给我我们许多现成的函数或者结构,我们可以在实际的开发中直接使用!
还有一些函数需要开启特定地 PHP 扩展模块,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。
一些常用的内置函数或者扩展的函数,我们在后面会陆陆续续的学习到,一些不太常用的可能我们没有办法全部讲到,但是
你使用函数是用来完成功能的,说白了,你有这样的需求,才会去找对应的函数!
七,数组
一、数组类型
二、数组创建
方法 一、
变量名称[索引值]=数据;
变量名称[]=数据;//不写索引值默认是 索引数组,从0开始
方法 二、
变量名称=array(
索引值=>数据,
…
);
数据里面还可放数组类型的数据,同一个数组中存储任何类型的数据
多维数组:
访问数值的方法
变量名称[索引值][索引值]
…
三、数组的遍历
遍历数组:每个都经历一遍的意思
1)for循环
用的比较少,因为有缺陷
2)foreach语句来实现遍历数组的目的foreach语句来实现遍历数组的目的
foreach(数组变量 as 变量1){
//每次循环执行的语句
变量1代表当前正在经历(访问)的数据
}
foreach(数组变量 as 变量1=>变量2){
//每次循环执行的语句
变量1代表当前正在经历(访问)的数据的索引值
变量2代表当前正在经历(访问)的数据
}
三、预定义超全局数组变量
已经定义好了(存在)的变量(存放的数据的类型是数组)。
超全局:超级全局变量,作用域(有效区域)!
传递数据(提交数据)给服务器端主要两种方式
1.get方式
比如:
?参数名=参数值&参数名=参数值…
http://localhost/demo5_3/index.php?参数名=参数值
在服务器端(请求的php文件这边)可以通过$_GET
来获取到
$_GET
索引值为参数名,索引值对应的数据就是参数值
2.post方式
比如表单 post发送过来的!
可以通过$_POST
来获取到!
四.字符串处理
一、去除空格或其他字符函数
1.trim
$str=' abc ';
var_dump($str);
var_dump(trim($str));
$str='abcabcdefac';
var_dump($str);
var_dump(trim($str,'bac'));//如果要去除多个字符可以连着写!
二、大小写转换函数
$str='test';
var_dump($str);
$str1=strtoupper($str);
var_dump($str);
$str='TeSt';
var_dump($str);
var_dump(strtolower($str));
var_dump($str);
三、字符串查找函数
1.substr_count
$str='testteste';
var_dump(substr_count($str,'te'));
$text2 = 'gcdgcdgcd';
echo substr_count($text2, 'gcdgcd');
$str='testteste';
var_dump(substr_count($str,'te',1,8));//不能超出字符串
2.strpos
$str='testteste';
var_dump(strpos($str, 't1'));
if(strpos($str, 't')===false){
echo '没找到!';
}else{
echo '找到啦!';
}
$str='testteste';
var_dump(strpos($str, 't',1));
3.strstr
$str='testteste';
var_dump($str);
var_dump(strstr($str,'s'));
var_dump(strstr($str,'s',true));
四、字符串替换函数
1.str_replace
$str=array(
'abc123abc',
'123abcabc',
'abcab123c'
);
var_dump($str);
$str1=str_replace(array('1','2','3'),array('一','二','三'),$str,$count);
echo $count;
var_dump($str1);
五、与html标签相关的函数
1.htmlspecialchars
$str=<<<START
<p style="color:red;font-size:128px;">单位确定为取得完全</p>" '
START;
echo $str;
echo "\n";
echo htmlspecialchars($str);
2.strip_tags
$str=<<<START
<p style="color:red;font-size:128px;">单位确定为取得完全</p>
<div style="color:red;">的武器大全我</div>
START;
//echo $str;
//echo "\n";
echo strip_tags($str,"<div><p>");
六、字符串截取函数
1.substr
$str='testdqwdwqdwqdqdwq';
echo substr($str,3,2);
$str='test';
echo substr($str,-3,2);
七、字符串分隔函数
1.explode
$str='test,test1,test2,test3';
var_dump(explode(',',$str,2));
2.str_split
$str='test';
var_dump(str_split($str,3));
一.会话控制—cookie
一、Cookie
例:setcookie('username',' $name',time()+3600);
2.在服务器端读取cookie内容
$_COOKIE
if(!isset($_COOKIE['username']))
3.将多维数组应用到Cookie中
setcookie("member[name]",'薛之谦');
setcookie("member[password]",‘xiaobaixue');
4.删除Cookie
setcookie("member", ' ',time() -1);
setcookie('username',$name,time()-1);
二、Session
1.开启session
session_start();
$_SESSION['name']='薛之谦'
1)开启一个会话
一个客户 到超市里面买东西 办会员卡!
2)打开已经存在的会话
当这个客户 以后再到超市买东西的时候 根据上次办的卡号 买东西!
根据客户端传来的session id 把这个 session id 对应的数据 读取到 $_SESSION这个变量里面
2. 销毁session
session_start();//打开要销毁的数据
session_unset( );//
session_destory();//销毁一个会话的全部数据
setcoookie(session_name(),'',time()-3600,'/');//销毁保存在客户端的卡号(session id)