php笔记(一)

一、变量和常量

变量命名规则

命名规则和JS一样

预定义变量:

提前定义的变量,系统定义的变量,存储需要用到的数据(预定变量都是数组)

$-GET:获取所有表单一get方式提交数据
$-POST:POST提交的数据都会保存在这儿

$-REQUEST:GET和POST提交的都会保存

$GLOBALS:php中所有的全局变量
$-SERVER:服务器信息

$-SESSION:session会话数据

$-COOKIE:cokkie会话数据

$ENV:环境信息

$-FILLES:用户上传的文件信息

可变变量:

如果一个变量保存的值刚好是另一个变量的名字,那麽可以直接通过访问一个变量得到另外一个变量的值:在变量前面再多添加一个$符号

$a='b'

$b = 'bb'

那么想要输出bb只需要输出$$a

变量传值:

将一个变量赋值给另外一个变量

变量传值有两种方式:值传递,引用传递

值传递:将变量保存的值复制一份,然后将新的值给另外一个变量保存【两个变量没有关系】(把复制给另外一个变量)

引用传递:将变量保存的值所在的内存地址,传递给另外一个变量:两个变量指向同一块内存空间:(两个变量是同一个值)

内存知识:

内存中,通常有以下几个分区

栈区:程序可以操作的内存部分(不存储数据,运行程序代码)空间小,速度快

代码段:存储程序的内存部分(不执行)

数据段:存储普通数据(全局区和静态区)

堆区:存储复杂数据,空间大,速度慢

换行符<hr/>

空格PHP_EOL

常量基本概念:

常量:const/constant,是一种运行当中不可改变的量(数据)

常量一旦定义,通常数据不可改变(用户级别)

常量定义形式

两种定义形式

1、使用定义常量的函数:define(’常量名‘,常量值)

2、5.3之后才有的:const常量名 = 值;

常量命名规则

1、常量不需要使用“$”符号,一旦使用系统就会以为是变量

2、常量的名字组成由字母、数字、下划线组成,不能以数字开头

3、常量的名字通常以大写字母为主(与变量以示区别)

4、常量命名规则比变量要松散,可以使用一些特殊字符与

注意细节:

1、define和const'定义的常量是有区别的:

在于访问权限区别

2、定义常量通常不区分大小写 ,但是可以区分,可以按照define函数的第三个参数

常量使用形式

常量的使用和变量一样:不可改变值(在定义的时候必须赋值)

有的时候还需要使用另外一种形式来访问(针对的是特殊名字的常量),需要用到访问常量的函数:constant(’常量名‘)

说明:常量和变量的使用

1、凡是数据会变化的,使用变量

2、数据不一定会变的,可以使用常量和变量(变量居多)

3、数据不允许被修改的,一定使用常量(常量不可修改)

系统常量

系统常量:系统帮助用户定义的常量,用户可以直接使用

常用的系统常量:

PHP_VERSION:PHP版本号

PHP_INT_SIZE:整形大小

PHP_INT_MAX:整型能表示的最大值(PHP中整形是允许出现复数的:带符号)
在PHP还有一些特殊的常量,他们有双下划线开始+常量名+双下划线结束,这种常量称之为系统魔术常量

__DIR__:当前被执行的脚本所在的绝对路径

__FILE__:当前被执行的脚本所在的电脑的绝对路径(带自己文件的名字)

__LINE__:当前所属行数

__NAMESPACE__:当前文件所属的命名空间

__CLASS__:当前所属的类

__MRTHOD__:当前所属的方法


二、数据类型

类型转换(报错)

类型转化:在很多条件下,需要制定数据类型,需要外部数据(当前PHP取得的数据),转换为目标数据类型

在PHP中有两种类型转换的方式:

1、自动转换:系统根据需求自己判断,自己及转换(用的比较多,效率低)

2、强制(手动)转换:人为根据需要的目标数据类型转换

强制转换的规则:在变量之前增加一个括号(),然后在里面写成对应类型:int/integer。。。。其中NULL类型用到unset()

在转换过程中,用的比较多的就是转布尔类型(判断)和转数值类型(算术运算)

其他类型转布尔:true或者false,在PHP中比较少类型转换变成false

字符串转数值的说明

1、布尔true为1,false为0

2、字符串转数值有自己的规则

2.1、以字母开头的字符串永远为0

2.2、以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点)

报错

类型判断

通过一组类型判断函数,来判断变量,最终返回这个变量所保存数据的数据类型(相同结果为true,失败为false),是一组以is_开头后面跟数据名字的函数:is_xxx(变量名)

Bool 类型不能使用echo来查看,可以使用var_dump(变量1,变量2.。。。)

还有一组函数可以用来获取已经设定的数据(变量)的类型

Gettype(变量名):获取类型,得到的是该类型对应的字符串

Settype(变量名,类型):设定数据的类型:与强制转换不同

1、强制转换(类型)变量名,是对数据值复制的内容同处理(不会处理实际存储的类型)

2、Settype胡会直接改变数据本身,

整数类型

整数类型,保存整数数值(范围限制),四个字符节存储数据最大就是32位:42亿多。但是在PHP中默认是有符号类型(区分正负数)

在php中提供了四种整形的定义方式:

十进制定义,二进制定义,八进制定义,十六进制定义

$a = 120; //10进制

$a = 0b; //2进制

$a = 0120 //8进制

$a = 0x120 //16进制

进制转换:手动转换

10进制转2进制:除2倒取余法

不管得到的结果如何,需要补足32位:前面补00000000 00000000 00000000 00001010

10进制转2进制:取出最大的2的n次方,直到结果为0

2进制到10进制之间的转换: 从右侧开始,将对应的第几位作为 2 的指数,然后将所有的结

果相加

PHP中不需要用户计算,提供了函数进行转换

Decbin(): 十进制转二进制

Decoct(): 十进制转八进制

Dechex()::十进制转十六进制

Bindec(): 二进制转十进制

浮点类型

浮点型:小数类型以及超过证书所能存储范围的整数(不保证精度),精度范围15个有效数字左右

浮点型定义两种方式

$f = 1.23;

$f = 1.23e10 //科学计数法,其中e表示底10

布尔类型

布尔类型:两个值true和false通常是用于判断比较

在进行某些数据判断的时候,需要特别注意类型转换

Empty():判断数据的值是否为“空”不是null,如果空返回true,不为空返回false

Lsset():判断数据存储的变量本身是否存在,存在变量返回true,不存在返回false


三、运算符

运算符:operator,是一种将数据进行运算的特殊符号,在php中一共有十多种

赋值运算符

赋值运算:符号是“=”,表示将右边的结果(变量,数据、常量和其他运算出来的结果),保存到内存的摸个位置,然后将位置的内存地址赋值给左侧的变量(常量)。

算术运算符

基本的算数操作

+

-

*

/

%:取余(模)运算,两个数(整数)相除,保留余数

比较运算符

比较运算:比较两个数据大小,或者两个内容是否相同,但会的结果都是布尔型:满足返回true,不满足返回false

>大于

>=大于等于

<小于

<=小于等于

==左边于右边的相同(大小相同)

!=左边于右边的不相同(大小不相同)

===全等于,左边与右边相同(大小以及数据类型)

!==不全等于,只要大小或者类型不相同

逻辑运算符

逻辑运算:针对不同的结果进行匹配。满足条件返回true,不满足条返回false

&&:逻辑与,左边的条件和右边的条件同时成立(两边结果都为true)

||:逻辑或,左边的条件或者右边的条件只要有一个满足即可

!:逻辑非,对亦有条件进行取反,本书为true,取反结果就为false

逻辑与和逻辑或又称为短路运算:如果第一个表达式已经满足条件了,那么就不会运行逻辑运算符后面的表达式;在书写代码的时候尽量将出现概率最高的(能够直接判断出结果)的表达式放到第一位

连接运算符

链接运算:在php中将多个字符串拼接在一起的一种符号

. :将两个字符串连接到一起

.= :复合运算,将左边的内容与右边的内容连接起来人后重新赋值为左边变量

A.=b ===== A =A . b

错误抑制符

在php中有一些错误可以提前预知,但是这些错误可能无法避免,但是又不希望报错给用户看,可能使用错误抑制符处理

@:在可能出错的表达式前面使用@符号即可

错误抑制符通常在生产环境(上线)会用到,开发的时候不会用:系统本身最好不会有任何错误

三目运算符

三目运算:有三个表达式参与的运算(简单的分支结构缩写)

语法格式:

表达式1 ?表达式2:表达式3;

运算:如果表达式1成立,那么执行表达式2,否则执行表达式3

注意:如果表达式本身比较复杂建议使用括号包起来

三目运算可以进行复合三目运算:三目运算中的表达式2和3都可以是另外一个三目运算

表达式 1 ? (表达式 2 ? 表达式 4: 表达式 5):(表达式 3 ? 表达式 5: 表达式 6);

自操作运算符

自操作:自己操作自己的运算符

++在原来的值上+1

--在原来的值上-1

$a = 1

$a ++ ; //$a= $a+1;

在php中自操作符是可以放到变量前或者后:前置自操作和后置自操作

$a = 1;

$a ++;

++$a; //前置或者后置本身只有自操作不参与其他运算(自操作同时),那么效果是一样的,但是自操作同时还参与其他的运算,那么效果就不一样了q

$a =1 ;

$b=$a++; //$a++会导致$a=$a+1; $a=2;上面的$b=1

$c=++$a; //++$a会导致$a=$a+1; $a=2; $c = 2 ;

后置自操作:先把自己所保存的值留下来,然后改变自己,自己给别人的值是原来的值;

前置自操作:先把自己改变,然后把改变后的值给别人。

衍生符号:类似自操作

+=:左边结果和右边结果相加,然后赋值给左边

-=:左边减去右边的结果,然后赋值给左边

*=:左边乘右边的结果,然后赋值给左边

/=:除法操作

%=:模操作

注意:右边是一个整体$a += $b ==> $a=$a + ($b);

如果进行除法或者取余运算,那么要考虑右边表达式结果是否为0(为0出错)


四、位运算

计算机码

位运算符

注意:

1、系统进行任何位运算的时候都是使用的是补码

2、运算结束后都必须转换成源码才是最终需要显示的数据

运算符优先级

五、流程控制

流程结构:代码执行的方向

控制分类

顺序结构:代码从上往下,顺序执行。(代码执行的最基本结构)

分支结构:给定一个条件,同时有多种执行代码块,然后回根据条件执行某段代码

循环结构:在某个条件控制范围内,指定的代码可以重复执行

顺序结构

顺序结构:最基本结构,所有代码默认都是从上往下依次执行

分支结构

在php中分支结构主要有两种

if语句

if:如果的意思,给定一个条件,同时为该条件设置多种(两种)情况,然后通过条件判断来实现具体的执行段

基本语法:if分支php也提供多种方式来实现

最简if:只有一段代码,但是可以选择是否执行

if(条件表达式){

//满足条件所要执行的内容;//顺序结构

}

基础if:有两面性,满足条件或者不满足条件都有对应的执行代码

if(条件表达式){

///满足条件后执行的代码段;

}else{

//不满足条件后执行的代码段;

}

//复杂if结构:在判断条件后,通常就有两种结果:满足或者不满足,在不满足之后还可以再次进行条件判断

if(条件表达式1){

//满足条件表达式1的代码段

}else{

//不满足表达式1条件,但满足表达式2的代码执行

} //可以使用多个elseif来进行条件筛选

Else{

//全部不满足要执行的代码;

}

注意:如果条件特别多才会采用复合if形式

1、如果条件比较单一(同一个条件),会采用elseif复合方式

2、如果判断条件不一致:建议使用嵌套,(不宜有太多层嵌套,影响代码美观)

if分支,适用于所有条件判断(分支结构)

switch分支

switch分支:有一处情形存在,通过一个条件,通常有多个值,但是每一个值都会有对应不同的代码要执行

switch判断方式:是将条件放到分支结构内部判断

switch基本语法:

switch(条件表达式){

//所有条件的判断:逐个进行

case值1: //当前条件表达式的结果与值1相等(==)

要执行的代码段;

break; //如果条件匹配成功,那么系统就不会再次匹配条件,会自动顺序执行向下的所有代码(case代码除外),需要中断执行:break表示终端switch(结束)

case值2:

要执行的代码段;

....

//可以使用类似else的语法:都不匹配

default:

//匹配失败的代码:

break;

}

if和switch的选择:

1、if能做所有的分支结构事情

2、switch处理的条件比较多。同时比较单一,而且是固定值匹配的分支结构

循环结构

循环结构:代码段在一定的控制下,可以多次执行

在php中循环结构有以下几种:

For循环:通过条件,起始和终止判断执行,hm

While循环:通过判断条件终止

Do-while循环:跟While差不多

Foreach循环:专门针对数组

For循环

for循环基本语法

for(条件表达式1;条件表达式2;条件表达式3){

// 条件表达式1:定义初始化条件,可以有多种赋值语句存在使用逗号隔开即可

//条件表达式2:边界判定,限定循环执行的次数

//条件表达式3:执行条件变化的

//循环体

For循环执行原理:

1、执行条件表达式1;定义初始化条件(执行一次)

2、执行条件表达式2:判断条件(N次)

2.1满足条件:执行循环体

2.2不满足条件:循环结束

3、执行循环体:(N次)

4、执行表达式3:循环变量变化(N次)

5、执行条件表达式2:判断条件(N次)

6、重复执行条件表达式3、4、2步骤:知道第二步不满足条件循环结束

循环结构

while循环

while循环基本语法:

条件初始化;

while(条件表达式){

//条件表达式就是判断边界条件

循环体; //循环条件的变化

}

for与while的选择

1、如果是基于固定已知条件(数值而且是有规律的变化),使用for循环

2、while可以做灵活的条件判定(while使用的比较多)

do_while循环

do_while:看着很像while,while首先进行条件判定然后执行循环体,有可能出现第一次条件就不满足,那么就会失败(循环体一次都无法执行)。do_while就是先执行循环体,后判断条件。(至少会执行一次循环体)

do_while基本语法:

do{

//循环体

}while(条件表达式);

循环控制

就是在循环内部对循环本身进行控制

中断控制:重新开始循环,循环体中还有其他内容,也再执行

Continue 层级; // 默认是1 (循环可以多层嵌套)

终止控制:循环直接结束

Break 层级; //默认是1

因为循环经常会碰到嵌套(循环内包含循环),如果循环内部可以知道当前循环(或者说外部循环)不需要执行了,那么就是使用循环控制来实现:其中内部循环也可以控制到外部,就是通过使用层级参数。

continue 2 ; //当前自己循环后买你内部不在执行,同时外部循环如果还有外部循环液不再执行,重新来过;

Break 2 ; //当前自己循环结束,同时外部也结束(如果还有外部不受影响,继续执行)

六、流程控制替代语法

流程控制替代语法:分支和循环结构的替代语法

PHP本身是嵌入到HTML中的脚本语言,需要在HTML中书写关于判断或者循环结构的语法,必须符合PHP标签规范,需要HTML与PHP进行混搭,如果使用原始的PHP代码那么会非常不美观/

需求:打印一个99乘法表,使用表格来展示

在PHP书写到HTML中的这些的大括号{}非常不美观,所以PHP提供了一个机制,让其可以不用大括号:

For(;;){ =>for (;;):

} =>endfor;

PHP中具体有哪些替代语法呢?PHP应该在HTML中只做数据输出,输出通常伴有条件判断和循环操作,因此PHP提供了对应分支结构和循环结构的替代语法:全部都是对应的一个模式 :

左大括号{使用冒号替代:

右大括号}使用end+对应的起始标记替代

IF:if(): endif;

Switch: switch(): endswitch;

For:

While

Foreach

七、浮点型和布尔型

浮点型

小数类型以及超过整型所能存储范围的整数(不保证精度),精度范围大概在15个有效数字左右

浮点型定义有两种方式:

$f=1.23;

$f=1.23e10; //科学计数法,其中e表示10

简单说明浮点数为什么同样的字节数存储数据,但是却能表示更大的数据呢?

00000000 00000000 00000000 00000000 -> 11111111 11111111 11111111 11111111 (整型最大值)

浮点数:红色7位算的结果是10的指数,后见三个字节存储表示具体数值

00000000 00000000 00000000 00000000 -> 11111111 11111111 11111111 11111111

尽量不要用浮点数字做精确判断:浮点数保存的数据不够精确,而且在计算机中凡是小数基本上存的都不准确

布尔类型

布尔类型:两个值true和false,通常是用于判断比较

在进行某些数据判断的时候,需要注意类型转换

Empty():判断是数据的值是否为“空”,不是NULL,如果为空返回true,不为空返回false

Isset():判断数据存储的变量本身是否存在,存在变量返回true,不存在返回false

八、运算符

运算符:operator,是一种将数据进行运算的特殊符号,在PHP中一共有十多种运算符之多

赋值运算符

赋值运算:符号是“=”,表示将右边的结果(可以是变量、数据、常量和其他运算出来的结果),保存到内存的某个位置,然后将位置的内存地址赋值给左侧的变量(常量)。

算数运算符

算数运算:基本算数操作

比较运算符

逻辑运算符

连接运算符:

错误抑制符

三目运算符

自操作运算符

九、常用系统函数

1)有关输出的函数

print():类似于echo输出提供的内容,本质是一种结构(不是函数),返回 1,可以不需要

print r ():类似于var_dump但是比var_dump简单,不会输出数据的类型,只会输出值(数组打印使用比较多)

2)有关时间的函数

date():按照指定格式对对应的时间戳(从1970年格林威治时间开始计算的秒数),如果没有指定特定的时间戳,那么就是默认解释当前时间戳

time():获取当前时间对应的时间戳

microtime():获取微妙级别的时间

strtotime():按照规定格式的字符串转换成时间戳

十、文件包含

文件包含:在php脚本中,去将另外一个文件(PHP)包含进来,合作完成一件事情。

文件包含的作用

文件包含的意义:

1、要么使用被包含文件中的内容,实现代码的共享(重用):向上包含(索要)

向上包含:在当前脚本要用某个代码之前包含别的文件

2、要么自己有东西可以给别的文件使用,实现代码共享(重用):向下包含(给予)

向下包含:在自己有某个东西的时候,需要别的脚本来显示(自己代码写完之后包含其他文件)

最大作用:分工协作,每个脚本做的事情不一样。因此可以使用协作方式,让多个脚本共同完成一件事情。

文件包含四种形式

在PHP中文件的的包含有四种形式(两种大形式)

Include:包含文件

Include_once:系统自动判断文件包含文件过程中,是否已经包含过(一个文件最多被包含一次)

Require:与Include相同

Require_once:与Include_once相同

包含基本语法

include‘文件名字’;

include('文件名字'); //文件名字:路径问题

向上包含:先准备文件,后使用文件中的内容

向下包含:先准备内容,然后包含另外的文件,在另外的文件中使用当前的内容

文件加载原理

PHP代码的执行流程:

1、读取代码文件(PHP程序)

2、编译:将PHP代码转换成字节码(生成opcode)

3、zendengine来解析opcode,按照字节码去进行逻辑运算

4、转换成对应的HTML代码

文件加载原理:

1、在文件加载(Include或者require)的时候,系统会自动的将被文件中的代码,相当于嵌入到当前文件中

2、加载位置:在哪加载,对应的文件中的代码嵌入的位置就是对应的Include位置

3、在PHP中被包含的文件是单独进行编译的

PHP文件在编译的过程中如果出现了语法错误,那么会失败(不会执行;但是如果被包含文件有错误的时候,系统会在执行到包含Include这条语句的时候才会报错)

Include和require原理

Include和Include_once的区别:

Include系统碰到一次,执行一次:如果对同一个文件进行多次加载,那么系统会执行多次;

Include_once: 系统碰到多次也只会执行一次

Require和include的区别:本质都是包含文件,唯一的区别在于包含文件找不到文件的时候,报错的形式不一样

include的错误级别较轻:不会阻止代码执行

Require要求较高:如果包含出错代码不再执行(require后面的)

文件加载路径

文件在加载的时候需要指定文件路径才能保证PHP正确的找到对应的文件。

文件的加载路径包含两大类

1、绝对路径

2、相对路径:从当前文件所在目录开始的路径

绝对路径和相对路径的加载区别

1、绝对路径相对效率偏低,但是相对安全(路径不会出问题)

2、相对路径相对效率高些,但是容易出错(相对路径会发生改变)

文件嵌套包含

文件嵌套包含:一个文件包含一个文件,同时被包含的文件又包含了另外一个文件。

嵌套包含的时候就很容易出现相对路径出错的问题:相对路径会因为文件的包含而改变(./和../):windows下面,每一个文件夹都有.和..的文件夹

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值