PHP学习笔记

———-基础介绍———-

Web开发标准:Web标准是由万维网联盟W3C(World Wide Web
Consortium,http://www.w3.org)创建于1994年,研究Web规范和指导方针,致力于推动Web发展,保证各种Web技术能很好地协同工作,它的工作是对Web进行标准化,创建并维护WWW标准。

脚本:是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。

-常见的脚本语言:PHP\HTML\CSS\JAVASCRIPT\VBSCRIPT\ACTIONSCRIPT\SHELL\PYTHON\RUBY\JAVAFX\LUA\AUTOLT

-特性

–语法和结构通常比较简单

–学习和使用通常比较简单

–通常以容易修改程序的“解释”作为运行方式,而不需要“编译”

–程序的开发产能优于运行效能

以非IE标准开发后兼容IE。

Linux下的安装方式

-源码包安装

-rpm包安装

-集成软件安装

–xampp

–wampserver

windows安装的两种方式

-单个下载安装

-集成环境安装

———-PHP介绍———-

PHP(Hypertext
Preprocess缩写)超级文本预处理器

-服务器端脚本运行

-命令行脚本

-客户端图形界面(GUI)程序

PHP特点:

-是开放源代码的,服务器端的脚本语言

-独立于操作系统,可以运行在几乎所有系统中

-支持大部分的服务器

-支持大量的数据库

-可以创建图像

<% %>

short_open_tag = on;    //开启短标签,不建议开启

在一个文件的结尾只是PHP语句的情况下建议不写”?>”结束标记

———-PHP中的变量———-

变量的命名:

-变量名字以”$”开始

-变量的名称声明时一定要有意义

-不合法的变量名:不能以数字开头,在变量中不允许用运算符(关键字作为变量名称不影响,因为PHP中变量以”$”开头)

-变量名称区分大小写(驼峰式命名方式)

var_dump():打印,查看变量类型和值的函数

empty():判断变量是否为空

unset():释放变量

isset():判断变量是否存在

可变变量

-$hello =
“world”;

-$$hello = “!”;

-$world的值为”!”;

引用变量

-$a =100;

-$b =
&$a;    //$b获得了$a的地址值,因此,$b会随着$a的变化而变化

1.只有变量才有地址,也就是只有变量才能有引用

2.一个变量发生变化,另一个变量的值也会变化

3.在使用unset()函数时,如果有引用关系,只是解除了这种引用关系,至删除一个变量,另一个依然还存在

4.如果两个变量是引用关系,一个变,另一个也变;如果给其中一个应用,不是普通的值,而是一个新的引用,则改变引用关系

float((0.1
+0.7) * 10) 通常会返回7,因此如果确实需要更高的精度,应该使用任意精度数学函数或者gmp函数

{}:花括号在双引号内将变量括起来可以

定界符号声明字符串:

$str =<<<hello

hello;

-可以使用单引号使内容不解析

$str =<<<’hello’

hello;

PHP中的数组实际上是一个有序图。

伪类型

-number:代表整型和浮点型

-mixed:代表所有类型

-callback:这个参数可以传一个函数

–一个PHP函数用函数名字符串来传递。可以传递任何内置的或者用户自定义的函数,除了array()、echo()、empty()、eval()、exit()、isset()、list()、print()和unset()。

强制类型转换:

-getType(变量);

–setType(变量, 类型):强制转换类型,改变原变量的类型

–(类型)变量:给新变量一个新类型,原变量不变。int\integer\bool\boolean\float\double\real\string\array\object

–intval():返回一个整型的值

–floatval():返回一个浮点型的值

–strval():返回一个字符串的值

-var_dump();

自动类型转换:

-$a = 10; $b = 24.5; $c =
$a + $b; var_dump($c);    //自动类型转换

-$a =
“hello world!”; $b = 24; $c = $a + $b; var_dump($c);    //$c为整型,值为24

-$a = “456e3sdflj 23
sdf”; $b = 100; $c = $a + $b;//e不是普通的字母

布尔型与NULL    ——->    浮点型Float

    |                            ^

    |                            |

    |                            |

    v                            |

整型Integer<——-    字符串String

变量类型判断:

-is_bool():

-is_int()\is_integer\is_long():

-is_float()\is_double()\is_real():

-is_string():

-is_array():

-is_object():

-is_resource():

-is_null():

-is_scalar():

-is_number():

-is_callable():

-bool
settype(mixed var, string type):将变量var的类型设置成type。

———-PHP中的常量———-

常量的值一旦声明就不会被改变。

初始化静态段。

1.常量是使用函数define()声明的。

-define(“ROOT”,
“localhost”):ROOT为常量名,localhost是常量的值

–直接使用常量名调用常量值或者使用constant()函数来调用

-get_defined_constants():获取所有的常量

2.如果常量没有声明,则常量名在使用时,会自动转为字符串

-echo
ROOT;    //直接使用未声明常量自动转换为字符串比单双引号效率慢8倍

-error_reporting(E_ALL
& ~E_NOTICE):报告除了提示外的所有错误

3.常量名称不要加$符号

4.常量名称,默认是区分大小写的,习惯上全部大写

5.可以使用define()第三个参数来决定是否让这个常量区分大小写,如果为true则不区分大小写。默认为false

6.常量的值只支持标量数据类型

7.常量不能使用unset()清除常量

预定义常量:系统事先定义好的常量

魔术常量:

LINE:当前行号

FILE:文件完整路径及文件名(PHP4.0.2起,总包含一个绝对路径,之前版本有时会包含一个相对路径)

DIR:文件所在目录

FUNCTION:函数名称(PHP4.3.0新加,PHP5中返回区分大小写,PHP4中返回小写)

CLASS:类的名称(PHP4.3.0新加)

METHOD:类的方法名(PHP5.0.0新加)

NAMESPACE:当前的命名空间(PHP5.3.0新增)

-一些相关方法

–get_class():

–get_object_vars():

–file_exists():

–function_exists():

———-运算符———-

运算元:

-一元运算符: +1 -1 ++ –

-二元运算符: + 1 * / % > < = == ===

-三元运算符: (运算元 ? 运算元 : 运算元)

另外的分类方式:

-算术运算符: + - * / % ++ –

-赋值运算符: = += -= *= /= %= .=

-比较运算符: > < <> == >= <= === != !==

-逻辑运算符: && || !

-位运算符: & | ^ ~ >> <<

-其他运算符: ?: @ => ->

%:PHP中将小数转为整数再求模

,:echo “hello”,
“ “, “world”, “!”

and\or\not\xor:逻辑运算符的另一种写法

``:反引号是执行运算符,PHP将尝试将反引号中的内容作外壳命令来执行,并将其输入信息返回

-exec():

-system():

instanceof():类型运算符,用来测定一个给定的对象是否来自指定的对象类

运算符优先级:

-非结合 new | new

-左 [ | array()

-非结合 ++ – | 递增或递减运算符

-非结合 ! ~ - (int) (float) (string) (array) (object) @ | 类型

-左 * / % | 算数运算符

-左 + - . | 算数运算符和字符串运算符

-左 << >> | 位运算符

-非结合 < <= > >= | 比较运算符

-非结合 == != === !== | 比较运算符

-左 & | 位运算符和引用

-左 ^ | 位运算符

-左 | | 位运算符

-左 && | 逻辑运算符

-左 || | 逻辑运算符

-左 ?: | 三元运算符

-左 = += -= *= /= .= %= &= |= ^= <<= >>= | 赋值运算符

-左 and | 逻辑运算符

-左 xor | 逻辑运算符

-左 or | 逻辑运算符

-左 , | 多处用到

-建议使用()来指定优先级

———-流程控制———-

顺序结构

分值结构(选择结构)

-单一条件分支结构:if

-双向条件分支结构:if else

-多向条件分支结构:if elseif else; switch

–switch中只支持 “整型” 和 “字符串” 类型

-巢状条件分支

循环结构

-while语句

-do…while语句,结尾必须以”;”结束

-for语句

-goto语句(PHP5.3之后又加回来了)

–支持者

—代码跳转快,方便

—执行性能高

–反对者

—goto语句的大量使用是灾难,尤其是在后续的代码维护中,goto语句使得程序结构混乱,读起来很难懂。

—由于goto语句可以灵活转跳,如果不加以限制,它的确会破坏结构化设计风格

—goto语句经常带来错误或隐患,它可能跳过了某些对象的构造、变量的初始化、或者重要的计算等语句

-特殊的流程控制语句

–break:跳出本层循环

–continue:结束本次循环,进入下次循环

–exit:退出脚本,别名”die”,可以带一条消息作为参数

———-函数———-

函数(function)是一段完成指定任务的已命名代码块,函数可以遵照给它的一组值或参数完成特定的任务,并且可能返回一个值。在PHP中有两种函数,自定义函数与系统函数

函数的优越性:

-控制程序设计的复杂性

-提高软件的可靠性

-提高软件的开发效率

-提高软件的可维护性

-提高程序的可用性

file_put_contents(路径, 内容):将指定的内容输出到指定的路径中

自定义函数:

-function
函数名([参数1[,参数2[,参数3[,…]]]]) { 函数体或称为方法体 [return
返回值]//如果需要有返回值时使用}

-函数名不区分大小写,命名函数时不可使用已声明的函数,或者PHP内建的函数名称

-参数:指用来把数值由函数外部传入函数体中,并用来加以运算处理的数据

-返回值:当调用函数时需要它返回一些数值,那么就要函数体中ruturn语句实现。

–runturn
返回值;//返回值也可以是一个表达式

–exit();    //无返回值 void

判断函数是否存在

function_exists():判断函数是否存在,在函数调用之前可以进行判断函数是否存在

在函数内部如果需要使用函数外的变量,需要使用global关键字,将外部变量引入

变量的范围:

-当主程序调用函数时,PHP会暂时停止目前主要程序流程的运行,并传递必要的运算参数给目标函数使用,以执行函数的程序代码片段

-在函数执行结束后,函数会回传执行结果所得的数值,并将执行流程转回原本主程序终端的地方,继续执行运作

变量的能见度:

-意指在程序中的可作用范围。当一个变量执行赋值动作后,会随着声明局部的差异,而有不同的作用范围。大致上来说变量会一句声明的位置分为两种:局部变量和全局变量

可以使用预定义的全局变量数组$GLOBALS获取全局变量列表。

静态变量(static):

-在函数中声明的静态变量,只在第一次调用时声明

-第二次以后,一看是静态变量,就先到静态去中,看一i啊有没有这个变量,如果有就使用,而不去再声明

-静态变量在同一个函数多次调用中共享

无论是使用系统函数还是自定义函数,都需要了解函数的三要素:

-功能描述

-参数

-返回值

在函数中定义设置默认参数值的时候要从后往前;调用函数的时候实参要从前往后

如果函数中未定义形参,那么调用函数的时候赋予实参不会报错。

-func_get_args():获取传入的所有实参并返回一个数组。

-func_num_args():获取实参的总个数

-func_get_arg():获取指定索引的实参

变量函数:通过变量()的方式来调用不确定的函数

回调函数:在A函数中传入另一个B函数作为实参,一般这个实参的传递只需要传递B函数的函数名,在A函数中通过变量函数的方式调用B函数来实现相关功能

-变量函数

-使用变量函数声明和应用的回调函数

-借助call_user_func_array()函数自定义回调函数

–call_user_func_array(参数名, 数组):调用函数和将数组中的值作为实参传入到这个调用的函数中

–call_user_func_array(数组, 数组):调用函数是传入两个数组作为参数,第一个数组包含类名或对象以及方法名;第二个数组则传的是第一个数组中的方法的值

-类静态函数和对象的方法回调

usort(数组, 排序函数):通过usort()函数进行排序,第一个参数为要排序的数组;第二个参数为排序的函数,即排序的标准方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*

*遍历文件夹

<?php
$dirname = "./phpmyadmin";
function fordir($dirname) {
$dir = opendir($dirname);
while ($file = readdir($dir)) {
$file = $dirname.'/'.$file;
If (is_dir($file)) {
echo "目录:{$file}<br />";
fordir($file);
} else {
echo "文件:{$file}<br />";
}
//echo $file.'<br />';
}
closedir($dir);
}
?>
*/

加载自定义的函数库

include(文件路径):

include_once(文件路径):

require(文件路径):

require_once(文件路径):

Include_once()和require_once()函数:两个函数在脚本执行期间包括并运行指定文件。与include()语句及require()类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括,只会包括一次。这两个函数应该用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,以确保被包括多次产生函数重定义、变量重新赋值的错误不产生

Include()和require()函数:require()将一个文件在预处理期间被导入,像把该文件粘贴到使用函数的地方。而include()几乎与require()等价,区别在于在脚本执行时包含,当处理失败时,include()产生一个警告而require()则导致一个致命错误

一般情况下,可以直接包含时使用require(),需要通过判断包含时使用include()。

匿名函数:$func = function() {};

闭包函数也可以作为变量的值来使用。PHP会自动把表达式转换成内置类Closure的对象实例。把一个closure对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号

变量前加&可以使变量传址,是使其他方法中操作该变量时,它的原值也会改变

PHP闭包的实现主要就是靠匿名函数

-将匿名函数在普通函数中当作参数传入,也可以被返回。这就实现了一个简单的闭包

-通俗的说,就是子函数可以使用富含数中的局部变量,这种行为就叫做闭包

-闭包的特点:

–作为一个函数变量的一个引用,当函数返回时,其处于激活状态

–一个闭包就是当一个函数返回时,一个没有释放资源的栈区

–其实上面两点可以合成一点,就是闭包函数返回时,该函数内部变量处于激活状态,函数所在的栈区依然保留

-闭包外层是个函数

-闭包内部都有函数

-闭包会return内部函数

-闭包返回的函数内部不能有return

-执行闭包后,闭包内部变量会存在,而闭包内部函数的内部变量不会存在

闭包的应用场景:

-保护函数内的变量安全。外层函数中变量只有内部函数才能访问,而无法通过其他途经访问到,因此保护了外层函数中变量的安全性

-在内存中维持一个变量。由于闭包,外层函数中的变量一直存在于内存中,因此每次执行,都会使用到

高洛峰老师建议:PHP闭包的特性并没有太大惊喜,其实用CLASS就是可以实现类似甚至强大得多的功能,更不能和js的闭包相提并论,只能期待PHP以后对闭包支持的改进。不过匿名函数还是挺有用的,比如在使用array_filter()等之类的函数可以不用在外部声明回调函数了。目前还不稳定,不适用于正式开发

use关键字使用外部变量:

1
2
3
4
5
6
function demo() {
$a = 10;
$one = function($str) use ($a) {
//如果想改变外部函数$a的值,则在use使用的变量名前加&,如&$a这种方式
}
}