PHP基础

2023-11-11

php语法初步

php是一种运行在服务器端的脚本语言,可以嵌入到html中

php代码标记

在PHP历史发展中,可以用多种标记来区分php脚本

asp标记:<%php代码%>

短标记:<%php代码%>,以上两种基本弃用,如果要使用那么需要在配置文件中开启

脚本标记<%script language="php">php代码</script>

标准标记(常用):<?php php代码?>

php注释

习惯:所有的代码在写的过程中都必须进行注释,对于初学者而言,注释就是个人学习和写代码的一个思路说明

php中注释分为两种:行注释和块注释

行注释:一次注释一行

//:后面跟所有内容都是注释

#:与//一样

块注释:一次注释多行

/:中间直到/出现之前,全部都是注释

*/

php语句分隔符

语句分隔符:在php中,代码是以行为单位,系统需要通过判断行的结束,该结束通常都是一个符号:分号“:”(英文状态下的分号)

定义内容:

¥a = 5;

Echo 'hello world';

特殊说明:

1.php中标记结束符?>有自带语句结束符的的效果,最后一行php代码可以没有语句结束符

“;”

2.php中其实很多代码的书写并不是嵌入到HTML中,而是单独存在,通常书写习惯中就不建议使用标记结束符>?,php会自动从开始到最后全部认为是php代码,从而解析。

变量

php是一种动态网站开发的脚本语言,动态语言特点是交互性,会有数据的传递,而php作为“中间人”,需要进行数据的传递,传递的前提就是php能自己储存数据(临时存储)

变量基本概念

变量能存储计算结果,变量可以通过变量名访问,变量通常是可变的

1.变量是用来存储数据的;

2.变量是存在名字的;

3.变量是通过名字来访问的:数据;

4.变量是可以改变的:数据;

变量的使用:

php中的所有变量都必须使用“$”

1.定义:在系统中增加对应的变量名字(内存)

2.赋值:可以将数据赋值给变量名(可以在定义的同时完成)

3。可以通过变量名访问存储的数据

4,可以将变量从内存中删除

变量命名规则

1,在php中变量名字必须以"$"符号开始;

2,名字由字母,数字和下划线“—”构成,但是不能以数字开头;

3.在php中本身还允许中文变量(不建议)

预定义变量

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

$_GET:获取所有表单以get方式提交的数据

$POST:POST提交的数据都会保存在此 $REQUEST:GET和POST提交的都会保存 $GLOBALS:php中所有的全局变量

$_SERVER:服务器信息

$_SESSION:session会话数据

$_COOKIE:cookie会话数据

$_ENV:环境信息

$_FILES:用户上穿的文件信息

可变变量

可变变量:如果一个变量保存的值刚好是另外一个变量的名字,那么可以直接通过访问一个

变量得到另外一个变量的值:在变量前面多加一个$符号。

$a = 'b';

$b = 'bb';

$$a ='bb';

  1. 找到$a,解析结果:b

  2. 将前面的$符号与结果b绑定:$b,然后第3步解析;

变量传值

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

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

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

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

eg: $新变量 =&$老变量

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

栈区:程序可以操作的内存部分(不存程序,运行程序代码),少但是快

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

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

堆区:存储复杂数据的地方(大但是效率的)

常量

常量与变量一样,都是用来保存数据的’

常量基本感念

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

常量一旦定义,通常数据不可改变‘

常量定义形式

在php中常量有两种定义方式

1。使用定义常量函数:dedine(‘长量名’,常量值)

2,const常量名 = 值

常量名字的命名规则

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

2,常量的名字组成有字母,数字和下划线组成,不能以数字开头;

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

4,变量命名的规则比变量要松散,可以使用一写特殊字符,该方式只能使用define定义

注意细节:

1,define 和 const定义的常量是有区别的:在于访问权限区别;

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

常量适用形式:

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

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

说明:常量和变量的使用

1,凡是数据可能变化的,那麽肯定使用变量;

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

3,数据不允许被修改,一定用常量

系统常量

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

常用的几个系统常量

PHP_WERISON:php版本号

PHP_INT_SIZE:整形大小

PHP_INT_MAX:整形能表示的最大值(php中整形是允许出现负数:带符号)

在php中还有一些特殊的常量,他们由下划线开始+常量名+双下划线结束,这种常量称之为系统魔术常量,魔术常量的值通常会跟着环境变化,但是用户改变不了。

DIR:当前被执行的脚本所在电脑的绝对路径

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

LINE:当前所属的行数

NAMESPACE:当前所属的命名空间

CLASS:当前所属的类

METHOD:当前所属的方法

数据类型

数据类型:data type ,在php中指的是储存的数据本身的类型,而不是变量的类型。php是一种弱类型语言,变量本身没有数据类型。

php的八种数据类型

在php中将数据分为三大类八小类

简单(基本)数据类型:4个小类

整形:int/integer,系统分配4个字节存储,表示整数类型(有前提)

浮点型:float/double,系统分配8个字节存储,表示小数或者整型存不下的整数

字符串型:string,系统根据实际长度分配,表示字符串(引号)

布尔类型:bool/boolen,表示布尔类型,只有两个值:ture和false

复合数据类型:2个小类

对象类型:object,存放对象(面向对象)

数组类型:array,储存多个数据(一次性)

特殊数据类型:两个小类

资源类型:resource,存放资源数据(php外部数据,数据库,文件)

空类型:NULL,只有一个值就是NULL(不能运算)

类型转换

类型转换:在很多的条件下,需要指定的数据类型,需要外部数据(当前php取得的数据)

转换成目标数据类型

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

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

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

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

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

其他类型转布尔类型:ture或者false,在php中比较少类型转换成false。

其他类型转数值的说明

1,布尔ture为1,false为0;

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

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

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

类型判断:

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

bool类型不能用echo来查看,可以使用var_dump结构查看

Var_dump(变量1,变量2....)

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

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

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

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

2,srttye会直接改变数据本身

整数类型进制介绍:

整数类型:保存整数数值(范围限制),4个字节储存数据,最大就是32位:43亿多

在php中默认是有符号类型(区分正负数)

在php中提供了四种整形的定义方式:十进制定义,八进制定义,十六进制定义,二进制定义

$a = 120; //10进制

$a=0b110; //2进制

$a = 0120; //8进制

$a = 0x120; //16进制

十进制:逢十进一,能够出现的数字是0~9;

二进制:逢2进一,能够出现的数字是0~1;

八进制:逢8进一,能够出现的数字是0~7;

十六进制:逢16进一,能够出现的数字是0~9以及a~f,a表示10,以此类推;

整数类型进制转换:

进制转换:手动转换

10进制转二进制,除二倒取余法

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

10进制转二进制:去除最大的2的N次方,直到结果为0;

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

php种不需要用户这么复杂的去计算,提供了很多的函数进行转换

利用进制函数计算

浮点类型

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

浮点型定义有两种方式:

$f = 1.23;

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

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

布尔类型

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

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

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

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

伪类型

伪类型:假类型,实际在php中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习。

伪类型主要有两种:在三大类八小类之外

Mixed:混合的,可以是多种php中的数据类型。

Number:数值的,可以是任意数值类型(整形和浮点型)。

运算符

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

赋值运算符

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

算数运算符

算数运算:基本算术操作:+ - * / %

比较运算符

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

1.>

2.>=

3.<

4.<=

5.==:左边的与右边的相同(大小相同)

6.!=

7.===:全等于,左边与右边的相同,大小以及数据的类型都要相同

8.!==:

逻辑运算符

逻辑运算:针对不同的结果进行匹配

&&: ||: !:

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

连接运算符

连接运算:是php中将多个字符串拼接的一种符号

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

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

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

错误抑制符

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

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

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

三目运算符

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

语法格式

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

如果表达式1成立,那麽执行表达式2,否则执行表达式3;

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

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

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

自操作表达式

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

++:在原来的值上+1;

--:在原来的值上-1;

在php中自操作符可以放到变量前后:前置自操作和后置自操作(和c差不多)

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

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

$a = 1;

$b =$a++

$b = 1;

$c = ++$a

$c = 2;

延申符号:类似自操作

+= -= *= /= %=

计算机码

计算机码:计算机在实际存储数据的时候,采用的编码规则(二进制规则)

计算机码:原码,反码,补码,数值本身最左边一位是用来充当符号位:整数为0,负数为1

原码:数据本身从十进制转换成二进制 得到的结果

正数:左边符号位为0(正数的原码,补码和反码就是它本身)

负数:左边符号位为1

发码:针对负数,符号位不变,其他位取反

补码:针对负数,反码+1

系统中存在两个0,+0和-0

+0:00000000

-0: 10000000 原码

取反 11111111

补码 00000000

位运算

位运算:去出计算机

中最小的单位(位bit)进行运算

&:按位与,两个位都为1,结果为1,否则为0

|:按位或,两个位有一个为1,结果为1

~:按位非,一个位如果为1,则变成0,否则反之

^:按位异或,两个相同则为0,不同则为1

<<:按位左移,整个位(32位),向左移动一位,右边补0

00>>:按位右移,整个位向右移动一位,左边补符号位对应内容(正数补0,负数补1)

运算符优先级

运算符优先级:在多种运算符同时存在的时候,如何结合运算

流程控制

流程控制:代码执行的方向

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

分支结构:

循环结构:

顺序结构

分支结构:if 和 switch

if 最简 基础 复杂

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

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

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

if分支,适用于所有的条件判断

switch 分支

循环结构

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

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

For循环

for循环特殊使用:for循环中对应的括号(条件)可以一个都没有(死循环)

for(;;){

}

while循环

Do-while循环

foreach循环:专门针对数组

循环控制

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

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

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

终止控制:循环直接结束

break层级; //默认是1

因为循环经常性会碰到嵌套(循环中间包括循环),如果在循环内部某些条件下,明确可以知到当前循环(或者说外部循环)不需要继续执行了,那么就是可以使用循环控制来实现:其中内部循环也可以控制到外部们就是通过使用层级参数。

continue 2: //当前自己循环后面内部不再执行,同时外部循环如果还有循环体也不再执行,重新来过;

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

流程控制替代语法

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

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

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

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

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

} ==>endfor;

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

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

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

if: if(): endif;

switch: switch(): endswitch;

for: for(): endfor;

while: while(): while;

foreach: foreach(): endforeach;

函数

函数的基本概念

函数:是一种语法结构,将实现某一个功能的代码块(多行代码)封装到一个结构中,从而实现代码的重复利用(复用)

函数的定义语法

函数有几个对应的关键点:function关键字,函数名,参数(形参和实参),函数体和返回值

基本语法如下

function 函数名([参数1]){

//函数体

//返回值:return 结果;

}

定义函数的目的:是为了实现代码的重复利用,一个功能一个函数(简单明了)

函数的使用:通过访问函数的名字+{}; //如果函数在定义的过程中有参数,那么在调用的时候就必须传入对应的参数:函数是一种结构,不会自动运行,必须经过调用才会运行。

函数是在代码执行阶段,碰到函数名字的时候才会调用,不是在编译阶段。

函数的调用特点:只要系统在内存中能够找到对应的函数,就可以执行(函数的调用可以在函数定义之前)

函数执行的内存分析:

1.读取代码进入到代码段(编译:将代码编程字节码存储到内存)

2.根据代码逐行执行。

以上原因:编译和执行是分开的(先编译再执行)

函数命名规范

命名规范:由字母数字和下划线组成,但是不能以数字开头

函数作为一种常用结构,一般遵循以下规则:函数通常名字代表着函数的功能,而有些功能会比较复杂,可能一个单词不足以表达,需要多个组合 1.驼峰法:除了左边第一个单词外,后面所有的单词首字母都大写

2。下划线法:单词之间通过下划线连接,单词都是小写

函数名字:在一个脚本周期中,不允许出现同名函数(通常在一个系统开发中都不会使用同名函数)

可变函数

可变函数:当前有一个变量所保存的值,刚好是一个函数的名字,那么就可以使用变量+{}来充当函数名使用

$变量 = ‘display’

Function disolay(){

}

//可变函数

$变量();

可变函数在系统使用的时候还是比较多的,尤其是使用很多系统函数的时候:需要用户在外部定义一个自定义函数,但是需要传入到系统函数内部使用。

匿名函数

基本概念

匿名函数:没有名字的函数

基本语法:

变量名 = Function(){

函数体

};

变量保存匿名函数,本质得到的是一个对象(Closure)

闭包

闭包:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及他们引用的对象没有被释放)和为自由变量提供绑定的计算机环境(作用域)

简单理解:函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)

证明:函数的局部变量在函数使用完之后没有被释放?

1.使用内部匿名函数;

2.匿名函数使用句变量:use;

3。匿名函数被返回给外部;

伪类型

伪类型:假类型,实际在php中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习。

伪类型主要有两种:在三大类八小类之外

Mixed:混合的,可以是多种php中的数据类型。

Number:数值的,可以是任意数值类型(整形和浮点型)。

常用系统函数

返回值:return,指的是将函数实现的结果,通过return关键字,返回给函数外部(函数调用处):在PHP中所有的函数都有返回值。(如果没有明确return使用,那么系统默认返回NULL)

图3()

返回值作用:将计算结果返回给调用处

图4()

注意:函数的返回值可以是任意数据类型

return 关键字:

1,return 在函数内部存在的价值:返回当前函数的结果(当前函数运行结束)

2,return 还可以在文件中直接使用(不在函数里面):代表文件将结果return后面跟的内容,转交给包含当前文件的位置。(通常在系统配置文件使用较多);在文件中也代表终止文件后面的代码,return后面的代码不会执行

1)有关输出的函数

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

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

2)有关时间的函数

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

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

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

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

3)有关数字的函数

max():指定参数中最大的值

min():指定参数中较小的值

rand():得到一个随机数,指定区间的随机整数

mt_rand():与rand一样,只是底层结构不一样,效率比rand高(建议使用)

round():四舍五入

cell():向上取整

floor():向下取整

pow():求指定数字的指定指数次结果:pow(2,8)==2^8==256

abs():绝对值

aqrt():求平方根

4)有关函数的函数

function_exists():判读只能指定的函数名字是否在内存中存在(帮助用户并不适用一个不存在的函数,让代码安全性更高)

func_get_arg():在自定义函数中去获取指定数值对应的参数

func_get_args():在自定义函数中去获取所有的参数(数组)

func_num_args():获取当前自定义函数的参数数量

参数详解

函数分为两种:形参和实参

形参

形参:形式参数,不具有实际意义的参数,是在函数定义时使用的参数

实参

实参:实际参数,既有实际数据意义的参数,是在函数调用时使用的参数

形参是实参的载体:实参在调用时通常是需要传入到函数内部参与计算(运算),那么需要在函数内部去找到实际数据所在的位置才能找到数据本身:需要实际调用的时候,将数据以实参的形式传递给形参:给形参赋值,从而使得函数内部可以用到外部数据。

注意:

1.在php中允许实参多于实参(个数):函数内部不用而已

2.在php中理论上形参个数没有限制(实际开发不会太多)

3.实参不能少于形参个数

默认值

默认值:指的是形参的默认值,在函数定义的时候,就给形参进行一个初始赋值:如果实际调用传入的参数(实参)没有提供,那么参数就会使用定义时的值来进入函数内部参与运算

通常默认只是用在一些,一定会有某个数据参与,但是可能通常是某个我们知道的值

注意事项:

1,默认值的定义时放在最后边的(多个),不能左边形参有默认值,但是右边没有

函数外部定义的变量名字与函数定义的形参名字冲突(同名)是没有任何关联关系的,如果多个函数使用同样的形参名字也不冲突。

引用传递

实参在调用时会将赋值给形参,那么实际上使用的方式就是一种简单的值传递:将实参(入古欧是变量或者常量或者其他表达式)的结果(值)取出来赋值给形参:形参与外部实际传入的参数本身没有任何关联关系:只是结果一样。

有的时候,希望在函数内部拿到的外部数据,能够在函数内部改变,那么就需要明确告知函数(定义时),函数才会在调用的时候去主动获取外部数据的内存地址。以上这种定义形式参数的方式叫做引用传值。

基本定义语法: Function 函数名(形参1,$形参2){

//函数体

}

在调用的时候,必须给引用传值的参数位置传入实际参数,而且参数本身必须是变量。(变量才有指向的数据的内存地址)

图1()说明函数在定义的时候,对应的b形参采用的是取地址,所以在实参传入之后,系统b取到了外部变量b的内存地址,而a取得是值,因此改变之后:

a值改变了函数内部自己;b改变自己的同时也改变了外部

引用传值注意事项:在传入实参的时候,必须传入变量

图2()

函数体

函数体:函数内部(大括号{}里面)的所有代码都称之为函数体

函数体:基本上所有的代码都可以实现

1.定义变量

2.定义常量

3.使用流程控制(分支,循环)

4.可以调用函数

作用域

作用域:变量(常量)能够被访问的区域

1.变量可以在普通代码中定义

2.变量也可以在函数内部定义

在php中作用域严格来说分为两种:但是php内部还定义一些在严格意义之外的一种,所以共算三种

1.全局变量:就是用户普通定义的变量(函数外部定义)

所属全局空间:在php中只允许在全局空间使用:理论上函数内部不可访问

脚本周期:直到脚本运行结束(最后一行代码执行完)

2。局部变量:就是在函数内部定义的变量

所属当前函数空间:在php中只允许在当前你函数内部使用

函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行)

3,超全局变量:系统定义的变量(预定义变量:eg)

所属超全局变量:没有访问限制(函数内外都可以访问)

超全局变量会将全局变量自动纳入到$GLOBALS里面,而$GLOBALS没有作用域限制,所以能帮注局部去访问全局变量:但是必须使用数组方式

如果想函数内部使用函数外部变量:除了$GLOBALS之外,通过参数传值(如果要同意战线还可以使用引用传值)

在php中,其实含有方式,能够实现全局访问局部,同时局部也可以访问全局:global关键字

global关键字:是一种咱函数里面定义变量的一种方式

1,如果使用global定义的变量名在外部存在(全局变量),那么系统咱函数内部定义的变量直接指向外部全局变量所指的内存空间(同一个变量,不同名字)

2,如果使用global定义的变量名在外部不存在(全局变量),系统会自动在全局空间(外部)定义一个与局部变量同名的全局变量

本质的形式:在函数的内部和外部,对一个同名变量(全局和局部)使用同一块内存地址保存数据,从而实现共同拥有。

基本语法:

global变量名: //不能赋值

变量名 =值

虽然以上方式可以实现局部与全局得互访,但是通常不hi这么用。一般如果回村子啊特殊使用,也会使用参数得形式来访问。(还可以使用常量:define定义的)

静态变量

静态变量:是咱函数内部定义的变量,,使用static关键字修饰,用来实现跨函数共享数据的变量:函数运行结果所有的局部变量都会清空,如果重新运行一下函数,所有的局部变量又会重新初始化

基本语法:

function 函数名(){

//定义变量

Static $变量名 = 值; //通常会在定义的时候就直接赋值

}

静态变量的作用是为了跨函数共享数据(同一个函数被多次调用)

静态变量的原理:系统在进行编译的时候就会对static这一行进行初始化:为静态变量赋值

函数在调用的时候,会自动跳过static关键字这一行:

静态变量的使用:

1,为了统计:当前函数被调用的次数(有没有替代方法?)

2.为了统筹函数多次调用得到的不同结果(递归思想)

文件加载原理

php代码的执行流程

1.读取代码文件(PHP代码)

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

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

4.转换成的对应的HTML代码

文件加载原理:

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

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

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

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

文件加载路径

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

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

绝对路径:

从磁盘的根目录开始(本地绝对路径)

windows:盘符C:路径/php文件

Linux:/路径/PHP文件

从网站根目录开始(网络绝对路径)

/:相对于主机网站主机名字对应的路径

127.0.0.1/test/==》e。。。。。。。

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

.|./:表示当前文件夹

../:上层目录(当前文件夹的上一层)

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

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

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

文件嵌套包含

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

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

include 和 require区别

include和include_once 的区别:

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

include_once :系统碰到多次,也只会执行一次;

require 和 include 的区别:

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

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

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

错误处理

错误处理:指的是系统(或者用户)在对某些代码进行执行的时候,发现有错误,就会通过处理的形式告知程序员

错误分类

1)语法错误:用户书写的代码不符合 PHP 的语法规范,语法错误会导致代码在编译过程中不通过,所以代码不会执行 (Parse error) 2)运行时错误:代码编译通过,但是代码在执行的过程中会出现一些条件不满足导致的错 (runtime error) 3)逻辑错误:程序员在写代码的时候不够规范,出现了一些逻辑性的错误,导致代码正常执行,但是得不到想要的结果。

错误代号

所有看到的错误代号在php中都被定义成了系统常量(可以直接使用)

  1. 系统错误: E PARSE:编译错误,代码不会执行 E ERROR: fatal error,致命错误,会导致代码不能正确继续执行 (出错的位置断掉)

    E_WARNING: warning,警告错误,不会影响代码执行,但是可能得到意想不到的结果 E_NOTICE: notice,通知错误,不会影响代码执行。

    2)用户错误: E_USER_ERROR,E_USER_E_WARNING,E_USER_NOTICE

    用户在使用自定义错误触发的时候,会使用到的错误代号(系统不会用到)

    3)其他:E_ALL,代表所有从错误(通常在进行错误控制的时候使用比较多),建议在开发过程中(开发环境) 使用 所有以E 开头的错误常量(代号)其实都是由一个字节存储,然后每一种错误占据一个对应的位,如果想进行一些错误的控制,可以使用位运算进行操作。

    排除通知级别notice:E_ALL & ~E_NOTICE

    只要警告和通知:E_WARNING | E_NOTICE

    错误触发

    程序运行时触发:系统自动跟据错误发生后,对比对应的错误信息,输出给用户:主要针对代码的语法错误和运行时错误

    人为触发:知道某些逻辑可能会出错,从而使用对应的判断代码来触发响应的错误提示

    Trigger_error(提示):

    字符串类型

    字符串定义语法

    1.单引号字符串:使用单引号包裹

    2.双引号字符串:使用双引号包裹

引号方式比较适合定义那些比较短(不超过一行)和或者没有结构要求的字符串

3.nowdoc字符串:没有单引号的单引号字符串(结构)

$str = <<<'边界符'

字符串内容

边界符;

4.heredoc字符串:没有双引号的双引号字符串(结构)

$str = <<<边界符

字符串内容

边界符;

heredoc和nowdoc比引号还是要区别多一点

字符串转义

转移的含义:在计算机通用协议中,有一些特定的方式定义的字母,系统会特定处理;通常这种方式都是使用反斜杠+字母(单词)的特性:

\n\r:回车换行

php在识别转义字符的时候也是使用同样的模式:反斜杠+字母

在php中系统常用的转义字符:

单引号和双引号的区别:

1,其中单引号中能够识别',而双引号中就不能识别'

2,双引号中因为能够识别$符号,所以双引号中可以解析变量,而双引号中不可以

双引号中变量识别的规则:

1.变量本身系统能够与后面的内容区分:应该保证变量的独立性,不要让系统难以区分

2.使用变量专业标识符(区分),给变量加上一组大括号{}

结构化定义字符串的规则:

1,结构化定义字符串对应的边界符有条件

1.1 上边界符后面不能跟任何内容(包括注释,空格)

1.2 下边界符必须顶格

1.3 下边界符后面只能跟分号,不能跟任何内容;

2,结构化定义字符串的内部(边界符之间)的所有内容都是字符串

字符串长度

1)基本函数 strlen0:得到字符串的长度(字节为单位)

中文在utf8字符集下占3个字节

2)多字节字符串的长度问题:包含中文的长度

3)多字节字符串扩展模块:mbstring扩展

可以使用mb扩展带来的很多函数

mbstring扩展针对的是一些关于字符统计:string只是针对标准交换码ASCLL,mbstring会针对不同的字符集

字符串相关函数

数组

数组的概念

数组:array,数据的组合,指将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器中的所有数据。”

数组定义语法

在 PHP 中系统提供多种定义数组的方式: 1、使用 array关键字: 最常用的

$变量 =array([元素1,元素 2,元素 3..);

2、可以使用中括号来包裹数据: $变量=[元素1元素 2...]

3、隐形定义数组:给变量增加一个中括号,系统自动变成数组

$变量[]]= 值1; //如果不提供下标也可以,系统自动生成(数字:从0开始)

$变量[下标]= 值; //中括号里面的内容称之为下标 key,该下标可以是字母(单词)或者数字,与变量命名的规则相似

php数组特点

1.可以整数下标或者字符串下标

如果数组下标都为整数:索引数组

如果数组下标都为字符串:关联数组

2。不同下标可以混合存在:混合数组

3.数组元素的顺序以放入顺序为准,跟下标无关

4。数字下标的自增长特性:从0开始自动增长,如果中间手动出现较大的,那么后面的自增长元素从最大的值+1 开始 5。特殊值下标的自动转换

布尔值:true 和 false

空:NULL

6.php中数组元素没有类型限制

7.php中数组元素没有长度限制

补充:php中的数组是很大的数据,所以存储位置是堆区,为当前数组分配一块连续的内存

多维数组

多维数组:数组里面的元素又是数组

二维数组

数组中所有的元素都是一维数组,

多维数组

在第二维的数组元素中可以继续是数组,在php中没有维度限制(php本质并没有二维数组)

但是:不建议使用超过三维以上的数组,会增加访问的复杂度,降低访问效率

异形数组(不规则数组)

异形数组:数组中的元素不规则,有普通基本变量也有数组

在实际开发中,并不常用,尽量让数组元素规则化(便于进行访问)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP基础 的相关文章

  • symfony2 选择单选框的默认值

    我的项目是使用 Silex 和 Symfony 组件 即表单组件 编写的 我尝试创建一组从类中构建的单选按钮 并且我想预先选择其中一个单选按钮 我创建这样的表格 form app form factory gt createBuilder
  • 如何在 标签中用 %20 替换空格

    我想替换 html 文本的图像标签中的所有空格 Example img src to img src photo 201 jpg 我没有找到 preg replace 的解决方案 但它可能是一个简单的正则表达式行 谢谢 Edit 抱歉各位
  • 如何在 Laravel 5.5 中编辑“页面因不活动而已过期”的视图

    在 Laravel 5 5 中 当您使用 CSRF 保护 默认情况下 并且在长时间不活动后发送发布请求时 您将收到此错误页面 屏幕截图 我对此错误表示同意 但是 我需要更改此错误的视图 文本以确保与我的应用程序风格和语言相匹配 关于如何编辑
  • php 在内容前插入十六进制字符数

    我正在将网站移动到新服务器 旧服务器有 php 5 3 2 新服务器有 php 5 5 9 Centos httpd Apache 2 2 26 我已经复制了文件 它工作正常 除了唯一奇怪的事情 一些奇怪的十六进制数字被插入到页面内容之前
  • 如何在 PHP 中正确分割路径

    执行以下操作的最佳方法是什么 我通过 AJAX 请求获取路径 e g dir1 dir2 dir3 dir4 我需要在我的网页上这样展示它 dir1 gt gt dir2 gt gt dir3 gt gt dir4 它们每个都是 html
  • 配置 .htaccess 以在 PHP 框架 (Silex) 上工作

    我的 Apache2 本地主机 linux 上有一个工作路径 http localhost lab silex web index php hello name 我想成为 http localhost lab silex hello nam
  • 从提交的表单中转义字符串中的字符

    每次发布帖子时 我都会得到转义字符 gt gt gt 我有一个多步骤表单 它将数据从一种表单传输到另一种表单 我将这些值与准备好的语句一起保存在数据库中 数据库中的值当前看起来像Paul s House 用户应该可以在字符串中使用单引号和双
  • CSV 从 UTF8 到 ISO-8859-1

    我正在尝试修改我的 CSV 导出 但它不会将我的 CSV 从 UTF 8 转换 保存为 ISO 8859 1 请问我做错了什么吗 实际上自从修改了这个之后 我得到了一个空的 CSV 文件 php 7 0 x function my Gene
  • 需要 mysqli_fetch_all 的替代方案

    我有一个 php mysqli 代码 可以找到一个我的本地服务器 但是在我的服务器上使用它时 我得到了一个 Fatal error Call to undefined function mysqli fetch all in home3 t
  • 登录后所有页面都应该是https吗?

    这有点难以解释 但我会尽力 有一个网站 每个页面上都有登录表单 其中包含用户名 密码字段 这些页面未使用 SSL 用户填写用户名 密码并提交表单后 表单将被发送到 https 的身份验证页面 对于这种情况我有几个疑问 向 https 页面提
  • Yii2 DropDownList Onchange 更改自动完成小部件“源”属性?

    我已经尝试过这个 yii2 依赖的自动完成小部件 https stackoverflow com questions 27025791 yii2 dependent autocomplete widget 但我不知道为什么它不起作用 这是我
  • cURL '格式错误的网址'

    This url 在浏览器中工作得很好 但 cURL 返回错误 3 格式错误的 url 关于解决方法有什么想法吗 EDIT 卷曲代码 function get web page url options array CURLOPT RETUR
  • 我可以显示我在 PHP 中设置的所有 cookie 吗?

    我正在尝试诊断 cookie 中的错误 但 cookie 的名称不是应有的名称 PHP 有没有办法打印我的域设置的所有 cookie 你有没有尝试过 print r COOKIE
  • 将秒转换为天、小时、分钟和秒

    我想转换一个变量 uptime这是秒 分为天 小时 分钟和秒 Example uptime 1640467 结果应该是 18 days 23 hours 41 minutes 这可以通过以下方式实现DateTime http php net
  • 转换MAC地址格式

    我刚刚编写了一个小脚本 从交换机中提取数百个 MAC 地址进行比较 但它们的格式为 0025 9073 3014 而不是标准的 00 25 90 73 30 14 我对如何转换它感到困惑 我能想到的最好的办法就是在 处将它们分解成碎片 然后
  • 无法在 Centos 上安装 php-mysqli 扩展

    我正在尝试将 mysqli 扩展安装到 php yum install php mysqli 我收到下一个错误 Transaction Check Error file usr share mysql charsets Index xml
  • 如何显示不同页眉的页面? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在为我的学校项目开发网站 但我遇到了一个问题 我在每个页面上显示一个标题 我的标题之一包含登录表单 另一标题包含用户名 搜索栏等 问题是
  • NodeJS 和 PHP (Laravel) 集成用于 Socket.IO 实时聊天

    目前我有一个我写过的网站PHP通过Laravel 框架 我已经使用写了一个实时聊天nodeJS with 套接字IO and Express现在我想做的是将它集成到我已经编写的 Laravel 网站中 问题是聊天必须在主页中 当前由 Lar
  • 哪个 PHP 5 版本最常用?

    当我开发将在不同配置的客户端 Web 服务 通常使用共享托管 上使用的应用程序时 我应该假设大多数 Web 服务器都具有哪个 PHP 5 版本 例如 5 2 x 5 3 x 等 在所有使用 PHP 版本 5 的网站中 有 84 9 使用版本
  • PHP 中的 Zip 流

    我有一个 PHP 脚本 可以动态创建 zip 文件并强制浏览器下载该 zip 文件 问题是 我可以直接将zip文件写入连接到用户浏览器的输出流 而不是先将其保存为服务器上的真实文件 然后发送文件吗 提前致谢 如果您的 Web 服务器运行的是

随机推荐

  • (必行方案)PPT快捷键复制一次粘贴两次问题

    问题 复制的时候复制一次 粘贴的时候在Word Excel都正常但是PPT里面不正常 只有使用PPT的时候出现粘贴两次的问题 Word和Excel中Ctrl C后Ctrl V粘贴一次 没有问题 PPT中Ctrl V时粘贴2次 而用右键粘贴方
  • 系数矩阵与系统稳定性的关系

    对连续时间线性定常控制系统而言 系统内部渐近稳定的充分必要条件是其系数矩阵A的特征值都在复平面的左半开平面内 对连续时间线性定常控制系统而言 系统输入 输出稳定的充分必要条件是其特征方程的根 传递函数的极点 全都在复平面的左半平面内 离散时
  • Linux的简单介绍

    LINUX操作系统是一种免费使用和自由传播的类UNIX操作系统 其内核由林纳斯 托瓦兹于1991年10月5日首次发布 是一个基于POSIX的多用户 多任务 支持多线程和多CPU的操作系统 它能运行主要的Unix工具软件 应用程序和网络协议
  • 03-03 周五 镜像安装sshd和jupyter以及修改密码

    03 03 周五 镜像安装sshd和jupyter以及修改密码 时间 版本 修改人 描述 2023年3月3日15 34 49 V0 1 宋全恒 新建文档 简介 由于在镜像中需要进行jupyter和sshd的安装 并且需要进行密码的修改 因此
  • 在 Windows 10下安装Flutter+Dart+Android Studio 配置Flutter开发环境

    在 Windows 10下安装Flutter Dart Android Studio 配置Flutter开发环境 文章首发地址 配置环境变量 由于部分网站被墙的原因 我们需要先配置Flutter国内镜像地址 这两个地址是由Flutter官方
  • html css开关按钮样式,纯CSS实现开关按钮

    上面这种开关按钮在现代网页UI设计中经常出现 代替了以前丑陋的checkbox 在很多UI框架中如elementUI都有组件可以直接使用 但是画出这样一个开关是十分简单的 不需要借助JS代码就可以实现 核心思路就是将原有input框进行隐藏
  • github响应时间过长且修改hosts无效【解决办法】

    打开ipaddress com 分别键入 github global ssl fastly net 和 github com 查询到对应的IP地址 打开hosts文件 并新增 hosts文件地址 win下 C Windows System3
  • 我提交的第一个Flink commit - Flink 闭包检查

    为什么闭包 Flink中算子都是通过序列化分发到各节点上 所以要确保算子对象是可以被序列化的 算子的成员变量 代码中的匿名内部类都是检查的范围 闭包检查入库 被调用的入口是 StreamExecutionEnvironment clean
  • Typora 常用快捷键

    文章目录 Typora 常用快捷键 一 菜单栏 二 文件 三 编辑 四 段落 五 格式 六 视图 七 设置颜色 Typora 常用快捷键 一 菜单栏 文件 alt F 编辑 alt E 段落 alt P 格式 alt O 视图 alt V
  • cahtgpt有哪些优势

    ChatGPT丨小智ai丨chatgpt丨人工智能丨OpenAI丨聊天机器人丨AI语音助手丨GPT 3 5丨开源AI平台 ChatGPT是一种基于深度学习技术的自然语言处理模型 它可以自主地从大量的文本数据中学习和理解自然语言 从而实现自然
  • hbuildx中使用真机调试

    前言 使用真机调试的原因是我开发uni app项目 调试一直是在浏览器中选择手机模式进行调试的 但是打包安装到手机以后 发现很多样式变化很大 完全不符合预期 这时我知道浏览器是不能完全匹配手机的效果的 模拟器 于是我开始找模拟器 市面上模拟
  • Dictionary字典类使用范例

    原文发布时间为 2009 11 04 来源于本人的百度文章 由搬家工具导入 using System using System Web UI WebControls using System Collections Generic publ
  • Qt

    参考博客 QThread必须要了解的几个函数 https blog csdn net t46414704152abc article details 52155777 设计思路 读文件生成sql语句写入内存为一个线程 返回sql语句给主线程
  • 机器学习之KNN检测恶意流量

    背景 任何智能活动的都可以称为人工智能 而机器学习 Machine Learning 属于人工智能的一个分支 深度学习 Deep Learning 则是机器学习的分支 近年来 随着基础设施的完善 海量大数据的积累 机器学习方法理论越来越成熟
  • uniapp icon标签

  • 使用Clang编译内联intel语法汇编的C/C++项目

    我们在编写C C 代码时 如果在有较高性能需求的时候 可以使用汇编代码来编写相应的函数 C C 直接调用即可 汇编的语法格式有两种 一种是我们在Windows下常见的Intel的语法格式 另一种是GCC下使用的AT T格式的语法 这种语法对
  • MAC上Chrome关闭黑暗模式

    方法 1 打开 Chrome 或基于 Chromium 的浏览器 2 在URL处输入 chrome flags enable force dark 确保 Force Dark Mode for Web Contents 和 Web Plat
  • pandas的引入及Series的基础操作、读取外部文件

    作用 相对于numpy pandas更进一步能帮助处理数值型数据之外的其他类型数据 比如时间序列 字符串等 常用数据类型 Series 一维 带标签数组 DataFrame 二维 Series容器 Series 创建Series数组 语法结
  • 【实用工具】利用MyBatisX插件自动生成代码

    文章目录 1 概述 2 基本使用 2 1 插件安装 2 2 集成数据库 1 概述 MybatisX 是一款基于 IDEA 的快速开发插件 为效率而生 在开发过程中 相信大家都遇到过一个数据库内有着十几张或比之更多的数据表的情况 而面对这众多
  • PHP基础

    php语法初步 php是一种运行在服务器端的脚本语言 可以嵌入到html中 php代码标记 在PHP历史发展中 可以用多种标记来区分php脚本 asp标记 短标记 以上两种基本弃用 如果要使用那么需要在配置文件中开启 脚本标记