php基础

一、PHP在Web开发中的应用

1 静态网站和动态网站的区别:

通常指:有数据库支持的就是动态网站,无数据库支持的就是静态网站,动态网站可以交互.


2 php解析过程:



3 相对路径和绝对路径:

相对路径:以当前文件为基点,有两种类型

"."[点]:代表当前目录

".."[两个点]:代表上级目录   

绝对路径:

针对站点根目录的绝对路径:"/"加上文件名称

针对本地打开远程网站的绝对路径:必须使用协议://站点/文件这种形式连接

针对远程客户端的绝对路径:基本不用可以理解为废弃


4 客户端与服务器端交互的工作原理:

4.1 http协议

4.2 web工作原理

  二、第一个PHP脚本语言

  1 PHP语言标记: 

是标准风格,PHP推荐使用的标记风格。

...

    简短风格的标记,但是系统管理员偶尔会禁用掉它,它会干扰XML文档的声明。只用通过php.ini配置文件中的指令short_open_tag打开后就可以使用。

    <%...%>是ASP风格的标记,在php.ini配置文件启用了asp_tags选项就可以使用它(默认是禁用的).


 环境变量:

$_SERVER["HTTP_ACCEPT_LANGUAGE"]获得客户端语言版本

$_SERVER["REMOTE_ADDR"]客户端IP地址

$_SERVER["HTTP_REFERER"]上级来源


 2 指令分割符分为两种:

一种是结构定义语句:使用大括号来标记代码块,后面不用谢分号,例如函数,循环分支语句,类

   一种是功能执行语句:这种语句也可称为指令,使用分号,变量声明,变量的输出,函数的调用


 3 程序注释

   //... ...单行注释 

   /* ... ... */多行注释(注意:不能嵌套)

   # ... ...脚本注释


优点:

1 能够排错,用于调试程序

2 能够受企业欢迎有良好的编程习惯

3 写帮助文档,方便团队配合

4 便于记忆,方便程序的维护和管理,注释起来,避免不必要的麻烦


 4 使用空白的处理:

使得代码程序具有可读性,便于浏览和维护

三、变量

  1 变量的声明

变量:是用于临时存储值的容器,在程序的运行过程中随时可以发生变化的量,是程序中数据的临时存放场所。

注意:php中的变量类型是根据上下文决定,不要求在使用变量前进行声明,在第一次使用时,才创建了这个变量.



  2 变量的命名

PHP的变量声明

1. 变量的声明和使用必须使用$符号

2. 字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。

3. 变量不能包含特殊符号%,^,&......

4. PHP可以使用系统关键字作为变量名

5. PHP变量区分大小写(只有变量和常区分大小写,其它不区分)


常用函数:

unset( )释放指定的变量(删除变量)

isset( )函数检测变量是否设置,返回布尔值.

defined()检测常量是否已设置

empty( )函数检查一个变量是否为空。 

function_exists():如果你要检测一个函数是否存在


  3 可变变量

一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。

$a = ‘hello‘;//普通变量

$$a = ‘world’;//可变变量

echo "$a ${$a}";//输出:hello world

echo "$a $hello";//输出:hello world

?>


  4 变量的引用赋值

引用操作符“&”可以在关联赋值中使用,就像一个别名,使得变量都指向了内存的相同地址。

四、变量的类型

查看表达式的值和类型:var_dump();


1 类型介绍:共八种类型

四种标量类型:整形,布尔型,浮点型,字符串

两种复合类型:数组和对象

两种特殊类型:资源和空


  2 布尔型(boolean)

      boolean表达了真值,值为“真”或“假”。

false值包括:整形(0),浮点(0.0),布尔(false),字符串("0"和空),空数组,空对象,null,打开失败的资源,无标记的xml生成的simpleXML对象


  3 整型(integer)

1 整型值可以使用十进制,八进制(开头加0)或十六进制(开头加0x)

2 整数值有最大的使用范围与平台有关,最大字长用PHP_INT_SIZE表示,最大常量值用PHP_INT_MAX表示(通常为2147483647)

3整数溢出时候,会自动转换为浮点型

类型转换方式:integer,或者intval


  4 浮点型(float或double)

 1是包含小数部分的数。

 2浮点数的字长和平台相关,但是不要比较两个浮点是否相等,因为浮点为近似数,高精度应该使用gmp函数


  5 字符串(String):双引号,单引号,定界符

单引号:指定字符串的最简单。需要单引号,用反斜线进行转义,需要反斜线使用使用两个反斜线,要是转义其它字符,反斜线也会被显示出来.单引号不会解释变量.

双引号:可以转义更多的字符,可以解释变量的值. Php5.1以前,\\{$var}中的"\\"不会被显示出来.

heredoc定界符:在<<<后提供一个标识符,然后是字符串,结束用标识符,结束标识符前不能有缩进.所在内容可以变量解析< span="">

Nowdoc定界符:5.3加入的,和heredoc一样,只是不能变量解析

命名规则:

只能包含字母,数字,下划线,而且不能以数字下划线开头

结束标识符所在不能有其它任意字符,除了分号

不能初始化类

注意:在php5.3以后,可以用heredoc结构来初始化静态标量和类的属性和常量,还可以用双引号声明标识符[待测试]

变量解析:

1 简单解析:解析变量,数组索引,对象属性

2 函数,行为,类的常量,类的静态变量在php5后可以使用{$}来使用

双引号和单引号的区别:

1,双引号单中可以解释变量,单引号不可以解释变量

2,双引号里面的变量,后面不要直接接字符串,容易把变量和后面的字符串当成一个整体视为整个变量,中间可以用空格等特殊字符分开或者用花括号括起来。

3,双引号能够插入单引号,单引号当中可以插入双引号。

4,双引号单中插入单引号,单引号当中插入变量。变量和单引号都能被显示出来

5,双引号单中能够解释转义字符,单引号只可以转义\\\\和它本身\\‘

6,转义字符能够把原有意义给去掉,在双引号当中需要插入双引号,单引号当中需要插入单引号的时候,去掉原有声明字符串的意义,让它为单引号和双引号本身的原意。

7,变量和字符串连接起来的时候,也用点。

  6 数组(Array)

PHP中的数组实际上是一个有序图。通过键值存储。

键规则:

1 键的解释方法,"8"转换为8,而"08"则转换为"08",为浮点数会被取正为整形

2 如果给出的值没指定键名,则取当前的最大索引值加1,如果该值存在则覆盖该值,如果最大的索引值为负,则指定的值对应的键为0

3 使用true将转换为1,false将为0,null将为空字符串

4 unset删除数组某个键

5 foreach是专门用来便利数组的

6 可以使用引用操作符号进行数组的拷贝

7 在数组中使用中括号为数组赋值,其字符索引不加引号不会报错但是有些关键字是不可以的


7 对象(Object)

对象是一种更高级的数据类型,有一组属性和方法组成


8 资源类型(Resource)

资源是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。

get_resource_type — 返回资源(resource)类型


9 NULL类型

表示一个变量的值为空,不区分大小写。

在下列情况下一个变量被认为是NULL:

被赋值为NULL值的变量。

尚未被赋值的变量。

被unset()函数销毁的变量。

 10 伪类型介绍

只是因为PHP是弱类型语言,所以在一些函数中,一个参数可以接收多种类型的数据,还可以接收别的函数作为回调函数使用。为了确保代码的易读性

Mixed ,number ,callback


11 数据类型之间相互转换

类型转换的方法有两种:自动转换,强制转换

自动转换:标量之间进行自动类型转换

类型强制转换:在要转换的变量之前加上用括号括起来的目标类型。

允许的强制转换有:

(int),(integer) -转换成整型

(bool),(boolean) -转换成布尔型

(float),(double),(real) -转换成浮点型

(string)  转换成字符串

(array) 转换数组

(object) 转换成对象


具体函数转换:

Intval()  获取变量的整数值 

floatval() 获取变量的浮点值

strval()  获取变量的字符串值


变量类型的测试函数:

is_bool():判断是否是布尔型

is_int()、is_integer()和is_long():判断是否为整型。

is_float()、is_double()和is_real():判断是否为浮点型

is_string():判断是否为字符串

is_array():判断是否为数组

is_object():判断是否为对象

is_resource():判断是否为资源类型

is_null():判断是否为null

is_scalar():判断是否为标量

is_numberic():判断是否是任何类型的数字和数字字符串

is_callable():判断是否是有效的函数名

函数:boolsettype( mixed var, string type )  是将变量var的类型设置成type。可以将原有变量的类型也改变。

五、常量

1 常量的定义

1常量是在脚本执行期间一旦被定义,就不能再改变或取消定义。

2常量默认为大小写敏感。按照惯例常量标识符总是大写的。

3常量名和其它任何PHP 标签遵循同样的命名规则。合法的常量名以字母或下划线开始,后面跟着任何字母,数字或下划线。

4常量的作用域是全局的

简单总结:程序运行过程中其值不可以改变的量。


Define()函数定义常量:

语法:bool define ( string name, mixed value [, boolcase_insensitive] )

Name:常量名称

Value:常量的值或者表达式,只能是标量类型

Case_insensitive:设置为true时表示常量名称不区分大小写


2 常量与变量

常量前面没有美元符号($);

常量只能用define()函数定义,而不能通过赋值语句;

常量可以不用理会变量范围的规则而在任何地方定义和访问;

常量一旦定义就不能被重新定义或者取消定义;

常量的值只能是标量。

函数:

1 constant()来读取常量的值。

2 get_defined_constants() 获得所有已定义的常量列表

3 defined()来检查常量是否存在


注:

isset()检查变量是否存在

Defined()检查常量是否存在

Function_exists()检查函数是否存在


3 预定义常量

名称七个魔术常量说明

__LINE__文件中的当前行号。 

__FILE__文件的完整路径和文件名。

__DIR__文件所在的目录。

__FUNCTION__函数名称

__CLASS__类的名称

__METHOD__类的方法名

__NAMESPACE__当前命名空间的名称(大小写敏感) 

Classes/Object 函数:

Get_class():返回对象的类名称

Get_object_vars():返回由对象属性组成的关联数组

File_exists():检查文件或目录是否存在

Function_exists():检查函数是否存在


六 PHP中的运算符

按照运算符的个数(有三种类型的运算符):

一元运算符:只运算一个值.

二元运算符:有两个操作数,PHP支持的大多数运算符都是这种。

三元运算符:? :。它应该被用来根据一个表达式在另两个表达式中选择一个,而不是用来在两个语句或者程序路线中选择。把整个三元表达式放在扩号里是个很好的主意。

1 算数运算符 :+ - * / %

注意:

1除号和取余运算符的除数部分不能为零

2 非数值操作,php会自动将非数值的操作数转换为数字

3 取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。

4 求模运算的目的:a 做整除运算 b 输入的数字不能超过某个范围

例如:

echo ‘10ren‘%‘3‘;  //输出整数1

注意:

$a++先赋值后自加

++$a先自加在赋值

$a—先赋值后自减一

--$a先自减一在赋值


2 字符串运算符2个

第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。

第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数后。


3 赋值运算符

基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。


4 比较运算符

比较运算符,如同它们名称所暗示的,允许对两个值进行比较。

== === != !== <> < > <=>=

说明: 

$a === $b    如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进) 

$a != $b     如果 $a 不等于 $b。 

$a <> $b     如果 $a 不等于 $b。 

$a !== $b    如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进) 


5 逻辑运算符

$a and $bAnd(逻辑与)TRUE,如果 $a 与 $b 都为 TRUE。

$a or $bOr(逻辑或)TRUE,如果 $a 或 $b 任一为 TRUE。

$a xor $bXor(逻辑异或)TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。

! $aNot(逻辑非)TRUE,如果 $a 不为 TRUE。

$a && $bAnd(逻辑与)TRUE,如果 $a 与 $b 都为 TRUE。

$a || $bOr(逻辑或)TRUE,如果 $a 或 $b 任一为 TRUE。


注意:

1 ||和&& 会出现短路问题

2 运算符的||和&&优先级高于and和or


6 位运算符(短路问题)

$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。 

$a | $b Or(按位或) 将把 $a 或者 $b 中为 1 的位设为 1。 


7 其他运算符(三元运算符 执行运算符 错误控制运算符 )


错误控制运算符@:该符号放在表达式之前,可以忽略任何的错误信息

 【掌握提示中error和warning的简易区别】

1 Error提示会中断掉程序执行,程序不会向下执行

2 Warning是警告级别,如果遇到警告,程序会出现一条提示,程序不会中断执行。

3 如果在前加上了@符,前面的错误提示会不显示,单行抑制错误 ,只对@符所在的这一行抑制错误。

4 单行抑制错误效率很低,不推荐使用。


执行运算符反引号(``):执行系统命令的, 效果与函数 shell_exec() 相同。 

例如:

echo `ipconfig`;//执行命令

反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。


数组运算符

==> 数组下标指定符号

-->对象访问符号

+ 运算符把右边的数组附加到左边的数组后面,但是重复的键值不会被覆盖。 

类型运算符

PHP 有一个类型运算符:instanceof。instanceof 用来测定一个给定的对象是否来自指定的对象类。 


6.8 运算符的优先级

 七、流程控制语句

1 流程控制的三种结构:

顺序结构 :自上而下执行,主要是赋值,输入输出

      分支结构(选择结构):先判断在选择执行路径

      循环结构:按照规定的条件执行某些操作。条件成立,循环执行,条件不成立,终止循环


2 分支结构(单向 双向 多向 巢状/嵌套) 


单向:if(表达式){代码块}

经常用于条件判断,例如:两个数字交换(用第三个数做引子)

$x=2;

$y=5;

if($x < $y){

$t=$x;

$x=$y;

$y=$t;

}

注意:if(表达式)

代码区间


这种结构时候只能执行一句代码,多行需要用花括号括起来。


双向:if(表达式){真区间代码块}else (假区间代码块)

常用于比较判断,else不能单独,为if语言的扩展

If(表达式){

真区间

}else{

假区间

}


多向(if…else…if…):是对if…else…的扩展

常用于判断比较范围区间,经常把范围小的区间放在前面进行处理。

多向:

格式 switch(表达式){

case 值:

语句块;

Break;……

最后处理:

default:

 上面的条件都不满足

}

语法解释:

   语句体中的case所列出的值逐一比较,如果数值不符合,则 

   将数值往下一个case传递,如果数值符合,则执行case中的 

   语句,然后再碰到break语句即跳出switch条件判断,如果 

   所有的值比对都不符合,则会执行default中的语句 。

 

switch语句使用注意事项 : 

 1  switch语句中case子句的表达式可以可以是任意类型,但是为了保证匹配的准确性,只能是整型和字符串,不能是bool值等模糊值

 2  switch中的花括号必须有

 3  在同一个switch中,case子句的常量不能重复(否则第二个值 

    永远无法匹配到),而且case后面必须冒号结尾。

 4  switch语句中可省略break语句和default子句。但省略后会改 

变流程。


巢状:if语句的嵌套使用

语法:

if(表达式){

       //外层if代码块

   if(表达式){

//内层if代码块

}else {

//内层if代码块

}

   }else {

//外层if代码块

}

3循环结构

While循环,Do-While循环,For 通常用来计数


While循环:

While( 表达式){

//语句块

}

解析:

程序开始计算表达式的值,

1 值为true进入循环体执行语句块,然后返回到表达是再次判断。为false则不会执行

        2 值为flase则循环不会执行

   3  在程序运行过程中代码块至少执行0次。


Do-while:

解析:

1 程序会先执行 do 语句体中的语句(循环体)2

2 检查表达式(循环控制语句)的值,如果符合条件式(值为真),就再进行 do 语    句体中的语句,直到条件不符合为止,

3 在程序运行过程中至少执行1次。

* While和do-while:前者先判断后执行,后者先执行后判断


For循环

 基本格式:                 

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


}   

                             

5特殊流程控制语句 


1. break :使得程序离开该层循环,可以接受一个可选的数字参数来决定跳出几重循环。

2. continue : 循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环, 接受一个可选的数字参数来决定跳过几重循环到循环结尾。 

3. exit :直接退出当前脚本。

八、 PHP中的函数 

1 函数的定义 

函数(function):是一段完成指定任务的已命名代码块。

在PHP中有两种函数:自定义函数与系统函数。

函数的优越性:控制程序设计的复杂性 ,提高软件的可靠性 ,开发效率.可维护性,可重用性 


2 自定义函数 

     function  函数名称 ([参数1 [,参数2 [,…]]] ){ 

//函数体

//返回值return

}  


函数的使用: 函数名称([参数1 [,参数2 [,…]]] );


 3 函数的工作原理和结构化编程 

  函数的名称:它是函数在程序代码中的识别名称

  规则:

  1  函数以字母下划线开头,后跟零个或者多个字母,下划线和数字的任何字符串

  2  函数名称不区分大小写

  3  函数名不可使用以声明的函数或php内建函数

     function_exists()判断函数是否存在。


4 PHP变量的范围 

  函数的作用域:局部变量和全局变量

  局部变量(内部变量):函数内部的使用的量 

  全局变量:在函数范围之外所声明的变量就是全局变量。函数中若要使用全局变量时,必须要利用global关键字.也可以使用预定义的全局变量数组$GLOBALS.这是一个特殊变量在程序运行时自动创建。格式:echo $GLOBALS[“A”]


  注意事项

1 在函数中声明全局变量时,其名字要与全局变量一致 

2 通过unset($var)可以手动删除变量,变量会在内存中被释放,也就不在全局作用域中了。 

3 用require与include包含不会影响作用域 

4 通过参数列表传递给函数的变量,对于函数来说是局部变量,除非在传递时带有&引用符号

 5 函数也可以是变量函数

 6 还可以存在内部函数


  静态变量: PHP支持声明函数变量为静态的(static)。

1 静态变量在脚本执行期间函数第一次被调用时初始化

2 静态变量使用关键字static

3 静态变量是放在静态代码段当中的,速度很快,不会被销毁


5 参数传递 : 在执行函数前导入某些数值,以提供函数处理执行。

  PHP 中传递参数的方式有:按值传递和引用传递

按值传递:不会对父程序造成影响

引用传递:在形参的时候使用&符号,可以在函数内部改变父程序的所传递的参数址,因为函数和父程序的参数指向同一个内存储存区

  函数的默认参数:默认参数使用等号赋值,通常把无默认参数的放在前面


    可变长度参数列表通常,用户定义函数时,设置的参数数量是有限的。 

  如果希望函数可以接受任意数量的参数,需使用以下函数: 

     func_get_args() //返回一个数组,包含所有参数 

     func_num_args() //返回参数总数 

     func_get_arg() //接收一个数字参数,返回指定参数


6 变量函数:类似可变变量,使用变量的值来执行函数名称.

     变量函数不能用于语言结构,例如 echo(),print(), unset(),isset(),empty(),include(),require()以及类似的语句。


7 递归函数

在函数执行过程中执行函数自己本身.通常在函数体中附加一个判断条件,递归的最大好处是精简程序中繁杂重复的调用程序


8 使用自定义函数库 

    include()和require()

    1 加载方式不同:

    include()用于动态包含,每次执行文件时都要进行读取和评估,例如根据不同的条件加载不同的执行文件

    require()用于静态包含,文件值处理一次,文件的内容被require()的代码所代替,例如require(‘header.inc.php‘)


    2 处理时机不同:

   include():在php代码执行过程遇到include()文件时才会载入执行

require():在php代码执行之前,先载入require()中的文件,相当于网页的一部分


    3 加载文件失败的处理方式不同:

include():会产生警告,而代码继续执行

require();会产生错误,php文件终止执行


    include_once()和require_once()的不同:

1 处理方式该函数与include()和require()在处理方式相同

2 如果该文件的代码已经被包含了,则不会包含.通常为了确保

3 需要对文件是否已经加载进行分析,所以执行性能没有include()和require()快


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。