目录

期间看到的几篇有意思的博客

为什么 var_dump("1" == "1e0");的结果为true

PHP开发基础

PHP标记符(在PHP7中,仅支持标准标记和短标记)

标记类型 开始标记 结束标记 开启项
标准标记 <?php ?>
短标记 <? ?> short_open_tag=on
ASP式标记 <% %> asp_tags=on
Script标记 < script language="php" > < /script >

PHP注释

分类 风格 注释使用示例
单行注释 C++风格的单行注释“//” // 输出一句话
单行注释 Shell风格的注释“#” # 输出一句话
多行注释 C 风 格 的 多 行 注 释 “/……/” /
echo 'Hello, PHP';
echo 100 + 200;
/

PHP标识符

标识符:自定义一些符号来标记一些名称

标识符的定义需要遵循一定的规则,具体如下:

  • 标识符只能由字母、数字、下划线组成,且不能包含空格
  • 标识符只能以字母或下划线开头的任意长度的字符组成
  • 标识符区分大小写,类和关键词除外。
  • 如果标识符由多个单词组成,那么应使用下划线进行分隔

PHP关键字

关键字:是编程语言里预先定义好并赋予特殊含义的单词。

★表示从PHP5.3开始

●表示从PHP5.4开始

▲表示从PHP5.5开始

输出语句

echo:可将紧跟其后的一个或多个字符串、表达式、变量和 常量的值输出到页面中,多个数据之间使用逗号“,”分隔

print:与echo的用法相同,唯一的区别是print只能输出一个 值

print_r():PHP的内置函数,它可输出任意类型的数据,如字符串、数组等

var_dump():不仅可以打印一个或多个任意类型的数据,还可以获取数据的类型和元素个数

常量

常量定义使用define()函数,其基本格式如下:

define(\(name,\)value,\(case_insensitive);
\)name:表示常量名称的字符串。

\(value:常量值,可以是字符串、整数或浮点数。
\)case_insensitive:其值为true或false,false为默认值。true表示该常量名称在使用时不区分大小写,false 表示要区分大小写。

defined()函数可用于测试常量是否已经定义:

  • defined("常量名称");
  • 若常量已经被定义,函数返回TRUE,否则返回FALSE。

constant()函数来获得常量值:

  • constant("常量名称");

预定义常量

变量

概念:变量就是保存可变数据的容器。

组成:在PHP中,变量名是由$和标识符组成。

PHP 变量规则:

变量以 $ 符号开头,其后是变量的名称

变量名称必须以字母或下划线开头,不能以数字开头

变量名称只能包含字母、数字、字符和下划线

变量名称对大小写敏感

传值赋值:指直接将数据或变量的值复制放 到变量内存中。

引用赋值:是指将变量的地址传递给另一个 变量,使两个变量具有相同的内存地址。

由于PHP是一种弱语言,变量不需要事先声明,就可以直接进行赋值使用。

实现方式:

  • 传值赋值:变量默认总是传值赋值,将“=”左边的数据赋值为右边的变量(含直接赋值) 。
  • 引用赋值:所谓引用赋值就是在要赋值的变量前添加“&”符号。

数据类型

标量数据类型(整型)

整型可以由十进制、八进制和十六进制数指定

  • 在它前面加上“-”符号,可以表示负数。
  • 八进制数使用0~7表示,且数字前必须加上0
  • 十六进制数使用09与AF表示,数字前必须加上0x
标量数据类型(字符串型)

概念:字符串是由连续的字母、数字或字符组成的字符序列。

表示方式:分别为单引号、双引号、定界符三种语法结构。

  • 单引号括起来的字符串被原样输出

  • 双引号字符串中的变量被PHP解析为变量值,即字符串中的变量在输出时输出变量的值而不是变量名称。

  • 定界符字符串中的变量被PHP解析为变量值

    $变量 = <<<标识符

    字符串内容

    ...

    字符串内容

    标识符;

    $poetry =<<<ccc
    <br>春眠不觉晓
    <br>处处闻啼鸟
    <br>夜来风雨声
    <br>花落知多少
    ccc;
    echo $poetry;

标量数据类型(字符串型)

总结字符串各表示方式的区别:

  • 变量在双引号或定界符结构字符串中被解析,而在单引号中原样输出。
  • 单引号字符串只对“‘”和“\”进行转义;而双引号字符串支持多种转义字符。

检测数据类型

如果检测的值符合检测的数据类型,则返回true,否则返回false。

运算符、表达式和流程控制语句

算术运算符

名称 操作符 实例
幂运算(php5.6新增) ** \(a**\)b

赋值串运算符(+=、-=、*=、/=、.=、%=、**=同理)

名称 符号 实例 展开形式 意义
幂运算(php5.6新增) ** \(a**=\)b $a = \(a**\)b 将左边的值和右边的值幂运算,赋给左边

逻辑运算符

运算符 运算 范例 结果
xor 异或 $a xor $b \(a和\)b一个为true,一个为false,结果为true,否则为false

数据类型转换

数据类型转换是指将变量或值转换为另一种数据类型。

分为自动数据类型转换和强制类型转换

自动数据类型转换
  • 变量的数据类型由存入变量的数据来决定,即在存入不同
  • 类型数据时,变量的数据类型就自动发生转换。
  • 或者在使用不同类型的数据进行运算时,所有数据自动转
  • 换为一种类型进行运算。
数据类型的自动转换时遵循的规则
  • 布尔型数据和数值型数据在进行算术运算时,true被转换为整数1,false被转换为整数0。
  • 字符串型数据和数值型数据在进行算术运算时,如果字符串以数字开头,将被转换为相应的数字;如果字符串不是以数字开头,将被转换为整数0。
  • 在进行字符串连接运算时,整数、浮点数将被转换为字符串型数据,布尔值true将被转换为字符串 "1",布尔值false和NULL将被转换为空字符串""。
  • 在进行逻辑运算时,整数0、浮点数0.0、空字 符串""、字符串"0"、NULL以及空数组将被转换为布尔值false,其他数据将被转换为布尔值true。

强制类型转换

PHP支持3种方式转换数据类型,分别为使用类型名、 使用类型取值函数和设置变量类型转换。

使用类型名转换类型

使用类型取值函数

跳转语句和终止语句

break语句

break语句可以终止当前的循环,包括while、do…while 、for、foreach和switch在内的所有控制语句。

continue语句 在执行continue语句后,程序将结束本次循环的执行, 并开始下一轮循环的执行操作。

exit语句

exit语句的作用是终止整个PHP程序的执行,在exit语 句后的所有PHP代码都不会执行。

数组和字符串

数组构成:数组是由一个或多个数组元素组成的

数组元素:一每个数组元素由键(Key)和值(Value)构成

键:“键”为元素的识别名称,也被称为数组下标

值: “值”为元素的内容

映射: “键”和“值”之间存在一种对应关系,称之为映射

类型划分:根据键的数据类型,可以将数组划分为索引数组

和关联数组

索引数组

索引数组是指键名为整数的数组。默认情况下,索引数组的键名是从0开始,并依次递增。它主要适用于利用位置(0、1、2……)来标识数组元素。另外,索引数组的键名也可以自己指定。

关联数组

关联数组是指键名为字符串的数组。关联数组的“键”“是字符串或数值的混合,并与“值”之间具有一一对应的关系。

赋值方式

使用赋值方式定义数组,实际上就是创建一个数组变量,然后使用赋值运算符直接给变量赋值。

赋值方式定义数组就是单独为数组元素赋值。 需要注意的是,赋值方式不能定义一个空数组

我的意见是先定义,后赋值。

短数组定义法

短数组定义法([])与array()语法结构相同,只需将array()替换为[]即可

二维数组

$str =

array (

"PHP类图书"=>array ("PHP从入门到精通","PHP 典型模块","PHP标准教程"),

"JAVA类图书"=>array ("a"=>"JAVA范例手册 ","b"=>"JAVA WEB范例宝典"),

"ASP类图书"=>array ("ASP从入门到精通 ",2=>"ASP范例宝典","ASP典型模块")

);

访问数组

数组定义完成后,若想要查看数组中某个具体的元素,则可以通过“数组名[键]”的方式获取。

遍历数组--foreach

//方式一
foreach (数组名称 as 键 => 值)
{
// 处理语句
}
//方式二
foreach (数组名称 as 值)
{
// 处理语句
}

遍历数组--each

  • each()函数返回一个包含数组当前元素键/值对应的数组 ,并将数组指针指向下一个数组元素。
  • each()函数返回的数组包含4个元素,元素键依次为1、 value、0和key。1和value对应元素为原数组元素的值, 0和key对应元素为原数组元素的键。
  • 如果数组指针指向了数组末尾(最后一个元素之后),则 返回FALSE。

遍历数组--list

  • list()函数用于将数组中各个元素的值赋值给指定的变量
  • list()函数依次将下标为0、1、2…的数组元素赋值为指定的变量。
  • 如果数组中的元素没有这些下标,变量值为NULL,PHP会产生一个Notice错误信息。

遍历数组—list、each

<?php
$array=
array(
0 =>'PHP自学视频教程',
1 =>'JAVA自学视频教程',
2 =>'VB自学视频教程',
3=>"VC自学视频教程"
); //遍历数组中的数据 while(list($name,$value)=each($array))
{
//输出遍历结果
echo "$name=$value"."\n";
}
?>

创建数组(返回值为数组)

range()函数创建一个包含指定范围的元素的数组。

array range( int low, int high , int step)
low 必需。规定数组元素的最小值。
high 必需。规定数组元素的最大值。
step 可选。规定元素之间的步进制。默认是 1。

array_combine()函数用两个数组创建一个新的数组,其中的一个数组元素为键名,另一个数组的元素为键值。

array array_combine( array keys, array values)
keys 必需。规定数组的键名。
values 必需。规定数组的键值。
注意:键名数组和键值数组的元素个数必须相同!

array_merge()函数将多个数组连接成一个新的数组

array array_merge(array1,array2,array3...)
array1 必需。规定数组。
array2 可选。规定数组。
array3 可选。规定数组。
后合并进来的数组,如果键名与之前合并的数组的键名相同,发生冲突,会覆盖之前对应的数组元素

array_fill()函数用给定的数量的值填充或建立一个数组

array array_fill( int start_index, int num, mixed value)
start_index 必需。规定返回数组的起始索引。
num 必需。规定填充的元素的数量,其值必须大于 0。
value 必需。规定用于填充数组的键值。

数组统计

count()函数用于对数组中的元素个数进行统计。

count(array,mode);
array 必需。规定要计数的数组。
mode 可选。规定函数的模式。可能的值:
0 - 默认。不计算多维数组中的所有元素。
1 - 递归地计算数组中元素的数目(计算多维数组中的所有元素)。
返回值:函数返回数组中元素的数目。

max()函数用于计算数组中元素的最大值。

mixed max( array arr )
返回值:数组中元素的最大值

min()函数用于计算数组中元素的最小值。

mixed min( array arr )
返回值:数组中元素的最小值

array_sum()函数用于计算数组中所有值的和。

mixed array_sum( array arr )
返回值:数组中所有值的和

array_count_values()函数用于计算数组中元素出现次数。

mixed array_count_values( array arr )
返回值:数组,
arr数组中值为返回值数组的键名,
arr数组中值的出现次数为返回值数组的值。

数组指针

next():使数组指针指向下一个元素。
prev():使数组指针指向前一个元素。
end():使数组指针指向最后一个元素。
reset():使数组指针指向第一个元素。
current():返回当前数组元素的值。
key():返回当前数组元素的键名。

数组和变量之间的转换

extract()函数使用数组定义一组变量。

该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
该函数返回成功设置的变量数目。
$arr = array("name"=>"张三","sex"=>"男","age"=>20); extract($arr);//将数组元素定义在变量中
echo $name;//输出变量值
echo $sex;//输出变量值 echo $age;//输出变量值 int extract(array,extract_rules,prefix)
array 必需。规定要使用的数组。
extract_rules 可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。对不合法和冲突的键名的处理将根据此参数决定。
可能的值:
EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。
EXTR_SKIP - 如果有冲突,不覆盖已有的变量。
EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。
EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix。
EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 prefix。
EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。
EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。
EXTR_REFS - 将变量作为引用提取。导入的变量仍然引用了数组参数的值。
prefix 可选。如果 extract_rules 参数的值是 EXTR_PREFIX_SAME、EXTR_PREFIX_ALL、 EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS,则 prefix 是必需的。
该参数规定了前缀。前缀和数组键名之间会自动加上一个下划线。

compact()函数使用变量建立数组。

int compact (( mixed var1, mixed var2...])
var1 必需。可以是带有变量名的字符串,或者是一个变量数组。
var2,... 可选。可以是带有变量名的字符串,或者是一个变量数组。允许多个参数。
$a = "asp";//声明变量 $b = "php";//声明变量 $c = "jsp";//声明变量 $result = compact("a","b","c");//生成数组
Array([a]=>asp [b]=>php [c]=>jsp)

数组检索函数

array_keys()函数返回包含数组中所有键名的一个新数组。

array array_keys(array,value,strict)
array 必需。规定数组。
value 可选。您可以指定键值,然后只有该键值对应的键名会被返回。
strict 可选。与 value 参数一起使用。可能的值:
true - 返回带有指定键值的键名。依赖类型,数字5 与字符串"5"是不同的。
false - 默认值。不依赖类型,数字5与字符串"5"是相同的。
被返回的数组将使用数值键,键名从0开始且以1递增,键值为数组array中所有的键名。 $array = array (0 => 100, "php" => "图书");
$arr1 = array_keys($array);
$array = array ("php", "asp", "java", "php");
$arr2 = array_keys($array, "php"); array(2){[0]=>int(0) [1]=>string(3)"php"}
array(2){[0]=>int(0) [1]=>int(3)}

array_values()函数获取数组中所有的值。

array array_values ( array input )
$array = array ("手册" => "php函数手册", "php基础应用", "php" => "php函数手册", "php基础应用", "php典型案例");
$result = array_values($array);
被返回的数组将使用数值键,键名从0开始且以1递增,键值为数组input中所有的值。

in_array ()函数在数组中查找某个值。

bool in_array ( mixed needle, array array [, bool strict])
needle 必需。规定要在数组搜索的值。
array 必需。规定要搜索的数组。
strict 可选。如果该参数设置为 TRUE,则 in_array() 函数检查搜索的数据与数组的值的类型是否相同。
$array = array("Php", "asP", "jAva", "html"); if(in_array("php", $array)){ echo "php in array"; } if(in_array("jAva", $array)){ echo " jAva in array"; }

array_search ()函数在数组中搜索某个键值,并返回对应的键名。

mixed array_search ( mixed needle, array array [, bool strict])
needle 必需。规定在数组中搜索的键值。
array 必需。规定被搜索的数组。
strict 可选。如果该参数被设置为 TRUE,则函数在数组中搜索数据类型和值都一致的元素。可能的值:
true
false - 默认
如果设置为 true,则在数组中检查给定值的类型,数字 5 和字符串 5 是不同的(参见实例 2)。 $arr = array ("asp", "php", "60");
if(array_search (60, $arr))
{
echo "60在数组1中 <br />";
}
if(array_search (60, $arr, true))
{
echo "60在数组2中 <br />";
}

array_key_exists ()函数在数组中查找某个键名,如果键名存在则返回 true,如果键名不存在则返回 false。

提示:请记住,如果您指定数组的时候省略了键名,将会生成从 0 开始并以 1 递增的整数键名。

bool array_key_exists ( mixed key, array search)
key 必需。规定键名。
array 必需。规定数组。
$array = array("php" => 58, "ajax" => 54);
if (array_key_exists("php", $array))
{
echo "php在数组中";
}

array_unique ()函数删除数组中重复的数。如果两个或更多个数组值相同,只保留第一个值,其他的值被移除。

注意:被保留的数组将保持第一个数组项的键名类型。

array array_unique ( array array)
$arr_int = array ("PHP","JAVA","ASP","PHP","ASP");
$result=array_unique($arr_int);
print_r($result);

数组排序

  • sort():根据元素值升序排序,排序后元 素的下标按顺序为0、1、2…
  • asort():根据元素值升序排序,保持原 有的键值。
  • rsort():sort()的逆序。
  • arsort():asort的逆序。
  • ksort():根据键升序排序,保持键值对。
  • krsort():ksort的逆序。
  • natsort():对值按照“自然排序”升序,保持键值对。
  • natcasesort():不区分大小写。

sort()函数根据数组元素值以升序进行排序。

注:排序后的数组赋予新的“整数”键名,键名从0开始且以1递增,键值同原数组键值。

bool sort( array &array , int sortingtype )
array 必需。规定要进行排序的数组。
sortingtype 可选。规定如何排列数组的元素/项目。可能的值:
0 = SORT_REGULAR - 默认。把每一项按常规顺序排列(Standard ASCII,不改变类型)。
1 = SORT_NUMERIC - 把每一项作为数字来处理。
2 = SORT_STRING - 把每一项作为字符串来处理。
3 = SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。
4 = SORT_NATURAL - 把每一项作为字符串来处理,使用类似 natsort() 的自然排序。
5 = SORT_FLAG_CASE - 可以结合(按位或)SORT_STRING 或 SORT_NATURAL 对字符串进行排序,不区分大小写。
$array = array("a"=>"asp", "p"=>"php", "j"=>"jsp");
sort($array);
print_r($array);

asort()函数根据数组元素值以升序进行排序。

注:排序后的数组元素保持原有的“键值”,键值同原数组键值,针对原先数组进行键值对顺序调换。

bool asort( array &array [, int sort_flags] )
$array = array("a"=>"asp", "p"=>"php", "j"=>"jsp");
asort($array);
print_r($array);

ksort()函数根据数组元素的“键名”以升序排序。

注:排序后的数组元素保持原有的“键值”

bool ksort ( array &array [, int sortingtype])
array 必需。规定要进行排序的数组。
sortingtype 可选。规定如何排列数组的元素/项目。可能的值:
0 = SORT_REGULAR -默认。把每一项按常规顺序排列(Standard ASCII,不改变类型)。
1 = SORT_NUMERIC - 把每一项作为数字来处理。
2 = SORT_STRING - 把每一项作为字符串来处理。
3 = SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。
4 = SORT_NATURAL - 把每一项作为字符串来处理,使用类似 natsort() 的自然排序。
5 = SORT_FLAG_CASE - 可以结合(按位或)SORT_STRING 或 SORT_NATURAL 对字符串进行排序,不区分大小写。 $array = array("a"=>"asp", "p"=>"php", "j"=>"jsp");
ksort($array);
print_r($array);

数组与数据结构

int array_push ( array array, mixed var1 , mixed var2...)函数向数组尾部插入一个或多个元素。
注意:即使您的数组有字符串键名,您所添加的元素将是数字键名。
array 必需。规定一个数组。
var1 必需。规定要添加的值。
var2 可选。规定要添加的值。
mixed array_pop ( array array)函数删除数组中的最后一个元素。
mixed array_shift ( array array) 函数用于删除数组中的第一个元素,并返回被删除的元素键值。
注释:如果键名是数字的,所有元素都将获得新的键名,从 0 开始,并以 1 递增。
int array_unshift ( array array, mixed value1 [, mixed value2...]) 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。
注释:数值键名将从 0 开始,以 1 递增。字符串键名将保持不变。
array 必需。规定数组。
value1 必需。规定插入的值。
value2 可选。规定插入的值。

数组集合

array_diff()函数用于比较两个(或更多个)数组的键值,并返回差集

array array_diff ( array array1, array array2 [, array array3...])
array1 必需。与其他数组进行比较的第一个数组。
array2 必需。与第一个数组进行比较的数组。
array3,... 可选。与第一个数组进行比较的其他数组。
该函数比较两个(或更多个)数组的键值,并返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键值。

array_intersect ()函数用于比较两个(或更多个)数组的键值,并返回交集

array array_intersect ( array array1, array array2 [, array array3...])
array1 必需。与其他数组进行比较的第一个数组。
array2 必需。与第一个数组进行比较的数组。
array3,... 可选。与第一个数组进行比较的其他数组。
该函数比较两个(或更多个)数组的键值,并返回一个交集数组,该数组包括了所有在被比较的数组(array1)中,同时也在任何其他参数数组(array2 或 array3 等等)中的键值。

array_reverse()函数将反转数组中的元素

array array_reverse(array,preserve)
array 必需。规定数组。
preserve 可选。规定是否保留原始数组的键名。
如果设置为 TRUE 会保留数字的键。 非数字的键则不受这个设置的影响,总是会被保留。
可能的值:
true
false <?php
$a=array("a"=>"Volvo","b"=>"BMW","c"=>"Toyota");
print_r(array_reverse($a));
?>
Array ( [c] => Toyota [b] => BMW [a] => Volvo )
返回值:是经过反转的数组,原先数组不受影响。

isset()函数用于检测变量是否已设置并且非 NULL。

bool isset ( mixed var [, mixed var [, ...]])
如果一次传入多个参数,那么 isset() 只有在全部参数都被设置时返回 TRUE,计算过程从左至右,中途遇到没有设置的变量时就会立即停止。 返回值:
若变量不存在则返回 FALSE
若变量存在且其值为NULL,也返回 FALSE
若变量存在且值不为NULL,则返回 TURE

unset()函数用于销毁指定变量

void unset ( mixed $var [, mixed $... ] )
没有返回值。

字符串与数组转换

字符串作为数组访问

分割字符串

explode() 函数使用一个字符串分割另一个字符串,并返回由字符串组成的数组。

array explode ( string $separator , string $str [, int $limit ] )
separator 必需。规定在哪里分割字符串。
string 必需。要分割的字符串。
limit 可选。规定所返回的数组元素的数目。
可能的值:
大于 0 - 返回包含最多 limit 个元素的数组
小于 0 - 返回包含除了最后的 -limit 个元素以外的所有元素的数组
0 - 会被当做 1, 返回包含一个元素的数组 $fish = 'Bass, Carp, Pike, Flounder'; $fish_list = explode(',', $fish); print "The second fish is $fish_list[1]";

合成字符串

implode() 函数返回一个由数组元素组合成的字符串。

string implode(separator,array)
separator 可选。规定数组元素之间放置的内容。默认是 ""(空字符串)。
array 必需。要组合为字符串的数组。 <?php
$arr = array('Hello','World!','Beautiful','Day!');
echo implode(" ",$arr);
?> Hello World! Beautiful Day!
转义、还原字符串

手动转义、还原字符串

echo ‘select * from tb_book where bookname=\’PHP自学视频教程\’’

自动转义字符串

string addslashes ( string $str )

$str = "Is your name O'reilly?";
echo addslashes($str);

自动还原字符串

string stripslashes ( string $str )

$str = "Is your name O\'reilly?";
echo stripslashes($str);

获取字符串长度

int strlen ( string $string )

在utf-8下,汉字占3个字符,其它情况下2个字符

数字、英文、小数点、下划线和空格各占一个字符。

截取字符串

substr() 函数返回字符串的一部分。

string substr ( string $string , int $start, int $length)
string 必需。规定要返回其中一部分的字符串。
start 必需。规定在字符串的何处开始。
正数 - 在字符串的指定位置开始
负数 - 在从字符串结尾的指定位置开始
0 - 在字符串中的第一个字符处开始
length 可选。规定要返回的字符串长度。默认是直到字符串的结尾。
正数 - 从 start 参数所在的位置返回
负数 - 从字符串末端返回

string mb_substr ( string $str , int $start [, int $length
[, string $encoding ]] )
<?php
$str="PHP自学视频教程";
echo mb_substr($str, 0, 5, 'UTF-8');
?>

比较字符串

按字节比较

int strcmp ( string $string1 , string $string2 )
string1 必需。规定要比较的第一个字符串。
string2 必需。规定要比较的第二个字符串。 返回值: 该函数返回:
0 - 如果两个字符串相等
<0 - 如果 string1 小于 string2
>0 - 如果 string1 大于 string2

int strcasecmp ( string $str1 , string $str2 )

注:strcmp区分大小写,strcasecmp不区分大小写

按自然排序法比较

int strnatcmp ( string $str1 , string $str2 )
<?php
$str1="str2.jpg";
$str2="str10.jpg";
echo strcmp($str1, $str2);
echo strnatcmp($str1, $str2);
?>

按指定源字符串的位置比较

int strncmp ( string $str1 , string $str2 , int len)
<?php
$str1="I like PHP!";
$str2=”i like my student!";
echo strncmp($str1, $str2, 6);
?>

检索字符串

strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及该字符串之后的剩余部分,否则返回 FALSE。

string strstr(string,search,before_search)
string 必需。规定被搜索的字符串。
search 必需。规定所搜索的字符串。如果该参数是数字,则搜索匹配该数字对应的 ASCII 值的字符。
before_search 可选。一个默认值为 "false" 的布尔值。如果设置为 "true",它将返回 search 参数第一次出现之前的字符串部分。
<?php
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain;
?>

substr_count() 函数计算子串在字符串中出现的次数。

注意:

子串是区分大小写的。

该函数不计数重叠的子串 。

如果 start 参数加上 length 参数大于字符串长度,该函数则生成一个警告。

string substr_count(string,substring,start,length)
string 必需。规定要检查的字符串。
substring 必需。规定要检索的字符串。
start 可选。规定在字符串中何处开始搜索。
length 可选。规定搜索的长度。
返回值:子串在字符串中出现的次数。

strtok() 函数把字符串分割为更小的字符串(标记)。

string strtok(string,split)
参数 描述
string 必需。规定要分割的字符串。
split 必需。规定一个或多个分割字符。
<?php
$first_token = strtok('/something', '/');
$second_token = strtok('/');
var_dump($first_token, $second_token);
?>
运行结果:
Hello
world.
Beautiful
day
today. <?php
$string = "Hello world. Beautiful day today.";
$token = strtok($string, " ");
while ($token != false)
{
echo "$token<br>";
$token = strtok(" ");
}
?>
运行结果:
string(9) "something" bool(false)

替换字符串

str_replace() 函数替换字符串中的一些字符(区分大小写)。

该函数必须遵循下列规则:

  • 如果搜索的字符串是一个数组,那么它将返回一个数组。
  • 如果搜索的字符串是一个数组,那么它将对数组中的每个元素进行查找和替换。
  • 如果同时需要对某个数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余的元素将用空字符串进行替换。
  • 如果是对一个数组进行查找,但只对一个字符串进行替换,那么替代字符串将对所有查找到的值起作用。

注意:

该函数是区分大小写的。请使用 str_ireplace() 函数执行不区分大小写的搜索。

mixed str_replace(find,replace,string,count)
参数 描述
find 必需。规定要查找的值。
replace 必需。规定替换 find 中的值的值。
string 必需。规定被搜索的字符串。
count 可选。一个变量,对替换数进行计数。 $arr = array("blue","red","green","yellow");
print_r(str_replace("red","pink",$arr,$i));
echo "<br>" . "Replacements: $i";
运行结果:
Array ( [0] => blue [1] => pink [2] => green [3] => yellow )
Replacements: 1

substr_replace() 函数把字符串的一部分替换为另一个字符串。

注意:如果 start 参数是负数且 length 小于或者等于 start,则 length 为 0。

mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
string 必需。规定要检查的字符串。
replacement 必需。规定要插入的字符串。
start 必需。规定在字符串的何处开始替换。
正数 - 在字符串的指定位置开始
负数 - 在从字符串结尾的指定位置开始
0 - 在字符串中的第一个字符处开始
length 可选。规定要替换多少个字符。默认是与字符串长度相同。
正数 - 被替换的字符串长度
负数 - 从字符串末端开始的被替换字符数
0 - 插入而非替换 $credit_card = '4111 1111 1111 1111';
print substr_replace($credit_card, 'xxxx ', 0, strlen($credit_card)-4);

去掉字符串首尾空格和特殊字符

trim() 函数移除字符串两侧的空白字符或其他预定义字符。

trim(string,charlist)
参数 描述
string 必需。规定要检查的字符串。
charlist 可选。规定从字符串中删除哪些字符。如果省略该参数,则移除下列所有字符:
"\0" - NULL
"\t" - 制表符
"\n" - 换行
"\x0B" - 垂直制表符
"\r" - 回车
" " - 空格

ltrim() 函数移除字符串左侧的空白字符或其他预定义字符。

ltrim(string,charlist)
参数 描述
string 必需。规定要检查的字符串。
charlist 可选。规定从字符串中删除哪些字符。如果省略该参数,则移除下列所有字符:
"\0" - NULL
"\t" - 制表符
"\n" - 换行
"\x0B" - 垂直制表符
"\r" - 回车
" " - 空格

rtrim() 函数移除字符串右侧的空白字符或其他预定义字符。

rtrim(string,charlist)
参数 描述
string 必需。规定要检查的字符串。
charlist 可选。规定从字符串中删除哪些字符。如果省略该参数,则移除下列所有字符:
"\0" - NULL
"\t" - 制表符
"\n" - 换行
"\x0B" - 垂直制表符
"\r" - 回车
" " - 空格

字符串与HTML转换

htmlentities() 函数把字符转换为 HTML 实体。

htmlentities(string,flags,character-set,double_encode)
参数 描述
string 必需。规定要转换的字符串。
flags 可选。规定如何处理引号、无效的编码以及使用哪种文档类型。
可用的引号类型:
ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
无效的编码:
ENT_IGNORE - 忽略无效的编码,而不是让函数返回一个空的字符串。应尽量避免,因为这可能对安全性有影响。
ENT_SUBSTITUTE - 把无效的编码替代成一个指定的带有 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD; 的字符,而不是返回一个空的字符串。
ENT_DISALLOWED - 把指定文档类型中的无效代码点替代成 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD;。
规定使用的文档类型的附加 flags:
ENT_HTML401 - 默认。作为 HTML 4.01 处理代码。
ENT_HTML5 - 作为 HTML 5 处理代码。
ENT_XML1 - 作为 XML 1 处理代码。
ENT_XHTML - 作为 XHTML 处理代码。
character-set 可选。一个规定了要使用的字符集的字符串。
允许的值:
UTF-8 - 默认。ASCII 兼容多字节的 8 位 Unicode
ISO-8859-1 - 西欧
ISO-8859-15 - 西欧(加入欧元符号 + ISO-8859-1 中丢失的法语和芬兰语字母)
cp866 - DOS 专用 Cyrillic 字符集
cp1251 - Windows 专用 Cyrillic 字符集
cp1252 - Windows 专用西欧字符集
KOI8-R - 俄语
BIG5 - 繁体中文,主要在台湾使用
GB2312 - 简体中文,国家标准字符集
BIG5-HKSCS - 带香港扩展的 Big5
Shift_JIS - 日语
EUC-JP - 日语
MacRoman - Mac 操作系统使用的字符集
注释:在 PHP 5.4 之前的版本,无法被识别的字符集将被忽略并由 ISO-8859-1 替代。自 PHP 5.4 起,无法被识别的字符集将被忽略并由 UTF-8 替代。
double_encode 可选。一个规定了是否编码已存在的 HTML 实体的布尔值。
TRUE - 默认。将对每个实体进行转换。
FALSE - 不会对已存在的 HTML 实体进行编码。

反转字符串

string strrev ( string $string )

print strrev('This is not a palindrome.');
运行结果:
emordnilap a ton si sihT

重复字符串

string str_repeat ( string $str , int $times )
$str:重复字符串
$times:重复次数

字符串小写化

string strtolower ( string $string )
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtolower($str);
echo $str;
?>

字符串大写化

string strtoupper ( string $string )
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtoupper($str);
echo $str;
?>

ucfirst() 函数把字符串中的首字符转换为大写。

string ucfirst ( string $string )

ucwords() 函数把字符串中每个单词的首字符转换为大写。

string ucwords ( string $string )

chr() 函数从指定 ASCII 值返回字符。

ASCII 值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置 0,十六进制值被定义为带前置 0x。

string chr ( int $ascii )
参数 描述
ascii 必需。ASCII 值。

ord() 函数返回字符串中第一个字符的 ASCII 值。

string ord ( string $string )

str_pad()把字符串填充为新的长度。

string str_pad(string,length,pad_string,pad_type)
参数 描述
string 必需。规定要填充的字符串。
length 必需。规定新字符串的长度。如果该值小于原始字符串的长度,则不进行任何操作。
pad_string 可选。规定供填充使用的字符串。默认是空白。
pad_type 可选。规定填充字符串的哪边。
可能的值:
STR_PAD_BOTH - 填充字符串的两侧。如果不是偶数,则右侧获得额外的填充。
STR_PAD_LEFT - 填充字符串的左侧。
STR_PAD_RIGHT - 填充字符串的右侧。这是默认的。

md5() 函数计算字符串的 MD5 散列。

string md5(string,raw)
参数 描述
string 必需。规定要计算的字符串。
raw 可选。规定十六进制或二进制输出格式:
TRUE - 原始 16 字符二进制格式
FALSE - 默认。32 字符十六进制数

函数

自定义函数

PHP中的函数

  • 系统的内置函数
  • 自定义函数
  • 变量函数

参数传递方式

  • 按值传递

    function example( $m ){ }
    
    
  • 按引用传递

    function example( &$m ){ }
    
    
  • 默认参数

function values($price,$tax="")
{
$price=$price+($price*$tax);
echo "价格:$price<br>";
}
values(100,0.25);
values(100);

通常函数将返回值传递给调用者的方式是使用return语句。

变量的作用域

全局变量

即被定义在所有函数以外的变量,其作用域是整个PHP 文件,但是在用户自定义函数内部是不可用的。想在用户自定义函数内部使用全局变量,要使用global关键词声明,或者通过使用全局数组$globals进行访问

局部变量

即在函数的内部定义的变量,这些变量只限于在函数内部使用,在函数外部不能被使用

静态变量

能够在函数调用结束后仍保留变量值,当再次回到其作用域时,又可以继续使用原来的值。而一般变量是在函数调用结束后,其存储的数据值将被清除,所占的内存空间被释放。使用静态变量时,先要用关键字static来 声明变量,需要把关键字static放在要定义的变量之前

文件包含语句

作用:在程序开发中,会涉及到多个PHP文件。为此,PHP提

供了包含语句,可以从另一个文件中将代码包含进来。

好处:不仅可以提高代码的重用性,还可以提高代码的维护和

更新的效率。

  • include

    include格式如下:

    include '文件路径';“文件路径”指的是被包含文件所在的绝对路径或相对路径。

    在相对路径中,“./”表示当前目录,“../”表示当前目录的上级目录。

  • require

  • include_once

  • require_once

require语句与include语句的区别:

在包含文件时,如果没有找到文件,include语句会发生警告信息 ,程序继续运行;而require语句会发生致命错误,程序停止运行 。

require()语句一般放在PHP脚本页面的最前面,PHP在执行前, 就先读入require()引入的文件,文件的内容会变成此脚本的一部分 ,一旦出现错误,则立即退出程序。

include()语句一般在用到时才引入,所以通常是放在流程控制的处 理区段中,PHP脚本在执行到它时,才会将文件包含进来。

即require()是预加载机制,位置在脚本最前面,一开始就引入所有 可能用到的文件;include()是即用即加载,位置灵活。

require_once语句的区别:

虽然include_once、require_once语句,和include、require的作用几乎相同,但是不同的是带“_once”的语句会先检查要包含的文件是否已经被包含过,避免了同一文件被重复包含的情况。

PHP与Web页面交互

服务器端获取数据的其他方法

全局变量\(_REQUEST默认情况下包含了\)_GET、\(_POST和\)_COOKIE之中的数据。

不管用GET还是POST,两种方式提交的参

数均可用“$_ REQUEST ['参数名']”获得

参数值。

$_SERVER[ ](超)全局变量
数组元素 说明
$_SERVER['SERVER_ADDR'] 当前运行脚本所在的服务器的IP地址
$_SERVER['SERVER_NAME'] 当前运行脚本所在服务器主机的名称。如果该脚本运行在一个虚拟主机上,该名称由那个虚拟主 机所设置的值决定
$_SERVER['REQUEST_METHOD'] 访问页面时的请求方法。例如:“GET”、 “HEAD”、“POST”、“PUT”。如果请求 的方式是HEAD,PHP脚本将在送出头信息后中 止(这意味着在产生任何输出后,不再有输出缓 冲)
$_SERVER['REMOTE_ADDR'] 正在浏览当前页面用户的IP地址
$_SERVER['REMOTE_HOST'] 正在浏览当前页面用户的主机名。反向域名解析 基于该用户的REMOTE_ADDR
$_SERVER['REMOTE_PORT'] 用户连接到服务器时所使用的端口
$_SERVER['SCRIPT_FILENAME'] 当前执行脚本的绝对路径名。注意:如果脚 本在CLI中被执行,作为相对路径,如file.php 或者../file.php,$_SERVER['SCRIPT_FILENAME'] 将包含用户指定的相对路径
$_SERVER['SERVER_PORT'] 服务器所使用的端口,默认为“80”。如果 使用SSL安全连接,则这个值为用户设置的 HTTP端口
$_SERVER['SERVER_SIGNATURE'] 包含服务器版本和虚拟主机名的字符串
$_SERVER['DOCUMENT_ROOT'] 当前运行脚本所在的文档根目录,在服务器 配置文件中定义

上传文件相关配置

在php.ini中,定位到File Uploads项,完成 对上传相关选项的设置。 上传相关选项的含义如下: file_uploads:如果值是on,说明服务器支持文件上传;如果为off,则不支持。一般默认是支持的。

upload_tmp_dir:上传文件临时目录。

upload_max_filesize:服务器允许上传文件的最大值,以MB为单位。

全局变量$_FILES

元素名  说明
$_FILES['filename']['name'] 存储上传文件的文件名。如text.txt、 title.jpg等
$_FILES['filename']['size'] 存储文件大小,单位为字节 $_FILES['filename']['tmp_name'] 存储文件在临时目录中使用的文件名。 因为文件在上传时,首先要将其以临时文件的身份保存在临时目录中
$_FILES['filename']['type'] 存储上传文件的MIME类型,MIME类 型规定各种文件格式的类型。每种 MIME类型都是由“/”分隔的主类型和 子类型组成的。例如:“image/gif”,主类型为“图像”,子类型为GIF格式的文件,“text/html”代表HTML格式 的文本文件
$_FILES['filename']['error'] 存储了上传文件的结果。如果返回0, 则说明文件上传成功

bool is_uploaded_file ( string filename )

bool move_uploaded_file ( string filename, string destination )

上传文件的form表单,必须有enctype属性

enctype="multipart/form-data"

Ajax概述

AJAX是Asynchronous JavaScript And XML的缩写,即异

步JavaScript和XML。

不使用 AJAX,若要更新网页内容,必须重新从服务器加载

整个网页;

使用AJAX,可以异步在后台与服务器进行数据交换,并使

用服务器响应来更新部分网页。

XMLHttpRequest对象

AJAX使用JavaScript的XMLHttpRequest对象与服务器交互,所以使用AJAX处理网页请求主要包含创建XMLHttpRequest对象、发送请求、处理响应等

创建一个跨浏览器的 XMLHttpRequest对象
if (window.XMLHttpRequest)
{ //Mozilla、Safari等浏览器
http_request = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{ //IE浏览器
try
{
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
XMLHttpRequest对象的常用方法

open("method","URL"[,asyncFlag[,"userName"[, "password"]]])

send(content)

setRequestHeader("label", "value")

abort() getAllResponseHeaders()

XMLHttpRequest对象的常用属性

属 性 说 明

onreadystatechange 每次状态改变都会触发这个事件处理器, 通常会调用一个JavaScript函数 readyState 请求的状态。

responseText 服务器的响应,表示为字符串

responseXML 服务器的响应,表示为XML。这个对象可以解析为一个DOM对象

status 返回服务器的HTTP状态码

statusText 返回HTTP状态码对应的文本

XMLHttpRequest对象与服务器交互

Ajax与服务器的交互主要包括3个步骤:

(1)初始化XMLHttpRequest对象

(2)设置请求状态和返回处理函数

xmlobj.onreadystatechange=function_name;

(3)发送HTTP请求

xmlobj.open(send_method,url,flag);

xmlobj.send();

处理响应函数

function function_name()
{
if (xmlhttp.readyState===4 && xmlhttp.status===200)
{
//将处理结果显示在HTML页面中
document.getElementById("nicknews").innerHTML=xmlhttp.responseText;
}
}

PHP操作MySQL数据库

PHP操作MySQL数据库的方法

连接MySQL服务器

mysqli扩展提供了mysqli_connect()函数实现与MySQL数据库的连接

mysqli mysqli_connect ( string server , string username , string password , string dbname , int port , string socket )

选择MySQL数据库

bool mysqli_select_db ( mysqli link, string dbname )

执行SQL语句

mixed mysqli_query( mysqli link, string query , int resultmode )

将结果集返回到数组中

array mysqli_fetch_array ( resource result [, int result_type] )
MYSQL_ASSOC - 关联数组
MYSQL_NUM - 数字数组
MYSQL_BOTH - 默认。同时产生关联和数字数组

从结果集中获取一行作为对象 从结果集中获取一行作为枚举数组

mixed mysqli_fetch_row ( resource result )

从结果集中获取一行作为关联数组

mixed mysqli_fetch_assoc ( resource result )

获取查询结果集中的记录数

释放内存

void mysqli_free_result(resource result);

关闭连接

bool mysqli_close ( mysqli link )

连接与关闭MySQL服务器的最佳时机

会话控制

了解Session

SESSION通常是从注册进入系统到注销退出系统之间所经过的时间。

  • 通过SESSION来控制用户对页面的访问权限。
  • 防止非法用户绕过系统登录直接进入系统。
启动Session

启动Session使用的是session_start()函数。

bool session_start(void);

注册Session

会话变量启动后,全部被保存在全局数组$_SESSION[]中。

使用Session

将各种类型的数据 添加到Session中, 必须应用全局数组 $_ SESSION[]。

删除Session
  • 删除单个会话

    <?php unset ( $_SESSION['name'] ) ; ?>
    
    
  • 删除多个会话

    <?php session_unset(); ?>
    <?php $_SESSION = array(); ?>
  • 销毁Session

<?php session_destroy(); ?>

Cookie的操作

了解Cookie

Cookie文本文件的格式如下:

用户名@网站地址[数字].txt

Cookie常用于以下3个方面:

1.记录访客的某些信息。

2.在页面之间传递变量。

3.将所查看的Internet页存储在Cookies临时文件夹中,这样可以提高以后浏览的速度。

创建Cookie

创建Cookie应用的是setcookie()函数。

bool setcookie(string name[,string value[,int expire [,string path[,string domain[,int secure]]]]])

读取Cookie

在PHP中应用全局数组$_COOKIE[]读取客户端Cookie的值。

应用isset()函数检测Cookie变量

删除Cookie

方法有两种:

一种是使用setcookie()函数删除,

另一种是 在客户端手动删除Cookie。

创建Cookie数组
setcookie(string name[下标],string value,int expire,string path,string domain,int secure)

Cookie与Session的比较

Session与Cookie最大的区别是:

1)Session是将信息保存在服务器上,并通过一个Session ID来传递客户端的信息,服务器在接收到Session ID后根据这 个ID来提供相关的Session信息资源;Cookie是将所有的信息 以文本文件的形式保存在客户端,并由浏览器进行管理和维护。

2)Session为服务器存储,远程用户没办法修改Session文件内容。而Cookie为客户端存储,所以Session要比Cookie安全得多。

传统Session、Cookie有以下明显缺点:

1)Cookie的安全性不好,攻击者可以通过获取本地Cookie进行欺骗或者利用Cookie进行CSRF攻击;

2)使用Cookie时,在多个域名下,会存在跨域问题;

3)Session在一定的时间时,需要存放在服务器,因此当拥有大量用户时,也会大幅度降低服务端的性能;

面向对象基础

类和对象使用

定义类

创建对象,需先定义一个类。

  • 类是由class关键字、类名和成员组成的
  • 类的成员包括属性和方法
  • 属性是描述对象的特征,例如人的姓名、年龄等
  • 方法用于描述对象的行为,例如说话、走路等

$变量名=new 类名称([参数]);

在PHP中,类的封装是通过访问控制修饰符实现的,共有3种,分别为public(公有修饰符)、protected(保护成员修饰符)和private(私有修饰符)。

如果没有写关键字,那么默认就是public。

类的成员—成员常量

在类中定义常量使用关键字const。

const PI= 3.14159;

常量的输出不需要实例化对象, 直接由类名+常量名调用即可。

类名::常量名

类的成员—静态成员

在类中可使用static关键字声明静态属性和静态方法。

访问类中的成员

使用特殊的运算符号“->”访问类中的成员。

$变量名=new 类名称([参数]);
$变量名->成员属性=值;
$变量名->成员属性;
$变量名->成员方法;

“\(this” 操作符
使用\)this变量可以引用该对象的其他方法和 属性,并使用“->”作为连接符。

$this->属性名;
$this->方法名;

注:使用$this变量不可以访问静态成员。

注:使用$this变量不可以访问静态成员。

:: 操作符

操作符“::”可以在没有声明任何实例的情况下访问类中的成员。

关键字::变量名/常量名/方法名

parent关键字:可以调用父类中的成员变量、成员方 法和常量。

self关键字:可以调用当前类中的静态成员和常量。

类名:可以调用本类中的变量、常量和方法。

  • 在类外部

使用“类名::静态成员名(常量)”格式来访问。

  • 在类内部

使用“self::静态成员名(常量)”格式访问。

构造方法(两个下划线加上construct)

function __construct([mixed args [,…]]){ //方法体 }

每个类都有一个构造方法,用于在创建对象时被自动调用。

  • 它主要用于在创建对象的同时,完成初始化功能
  • 若类中没有显式声明,PHP会自动生成一个无参且无任何操作的默认构造方法
  • 当在类中显式声明了构造方法时,默认构造方法将不存在

析构方法(两个下划线加上destruct)

function __destruct(){ // 方法体,通常是完成一些在对象销毁前的清理任务 }

将对象变量赋值为NULL,或用unset()函数删除变量 ,均可删除变量到对象的引用。

当对象的所有引用被删除、对象被显式销毁、执行exit() 结束脚本或者脚本执行结束时,析构函数会被调用。

面向对象的继承

继承关键字extends

子类调用父类的成员方法

通过parent::关键字可以在子类中调用父类中的成员方法。

parent::父类的成员方法(参数);

覆盖父类方法(重载)

覆盖父类方法就是在子类中创建与父类中相同的方 法,包括方法名称、参数和返回值类型。

如果父类和子类中都定义了构造方法, 当子类的对象被创建后, 将调用子类的构造方法, 而不会调用父类的构造方法。

抽象类

抽象类使用abstract关键字来声明。

abstract class 抽象类名称

{ 	//抽象类的成员变量列表 

    abstract function 成员方法1(参数); 

    abstract function 成员方法2(参数); 

}

接口

接口类通过interface关键字来声明。

interface 接口名称
{
// 常量成员
// 抽象方法;
}
interface One
{
const CONSTANT='CONSTANT value';
function FunOne();
}
echo One::CONSTANT;

接口

接口中所有的方法都是抽象的,因此声明时省略 abstract关键字

接口的方法体没有具体实现

在接口中,所有的方法只能是公有的

需要通过某个类使用implements关键字来实现接口。

一个类也可以在继承的同时实现接口:

class MobilePhone extends Phone implements ComInterface
{
// 该类继承了Phone类并实现了ComInterface接口
}

面向对象的多态

通过接口实现多态

定义接口Type,并定义一个空方法go_type()。

然后定义Type_car和Type_Bus子类继承接口Type。

最后通过 instanceof关键字检查对象是否属于接口Type。

面向对象的其他

final关键字

被final修饰过的类不能被继承 被final修饰过的方法在子类中不可以进行重写,也不可以被覆盖。

final

class class_name{ final function method_name() }

clone关键字

对象的克隆可以通过关键字clone来实现。

$克隆对象名称=clone $原对象名称;

魔术方法“__clone()”可以为克隆后的副本对象重新初始化。

它不需要任何参数,其中自动包含\(this和\)that两个对象的引用。

instanceof关键字

instanceof操作符可以检测当前对象是属于哪个类。

ObjectName instanceof ClassName

魔术方法

__set()和__get()方法

__isset()和__unset()方法

__call()方法

__toString()方法

__autoload()方法

__set()方法:在程序运行过程中为私有的成员属性设置值 ,它不需要任何返回值。

__get()方法:在程序运行过程中,在对象的外部获取私有 成员属性的值。

bool __isset(String name)

bool __unset(String name)

__call()方法

__call()方法的作用是:当程序试图调用不存在或不可见的 成员方法时,PHP会先调用__call()方法来存储方法名及 其参数。

__toString()方法

魔术方法__toString()的作用是:当使用echo或 print输出对象时,将对象转化为字符串。

(1)如果没有__toString()方法, 直接输出对象将会发生致命错误(fatal error)。 (2)输出对象时应注意,echo或print函数后面直 接跟要输出的对象,中间不要加多余的字

符。

__autoload()方法

__autoload()方法可以自动实例化需要使用的类。

PDO操作数据库

PHP 5.1可使用轻量级的统一接口PDO(PHP Data Object, PHP数据对象)来访问各种常见的数据库。而使用PDO只需要指 定不同的DSN(数据源名称)即可访问不同的数据库。

首先需要在 php.ini文件中启用设置:

extension=php_pdo.dll:启用PDO扩展库。

extension=php_pdo_mysql.dll:启用MySQL扩展库。

记录查询

(1)使用query()方法执行查询

query()方法参数为一个查询字符串,查询执行成功返回包 含查询结果集的PDOStatement对象,若失败则返回FALSE。

提示: 若查询结果集中记录没有读取完,试图再次执行query()方法将会出错。此 时,可在再次执行query()方法前,调用PDOStatement的closeCursor()方法释 放PDOStatement对象关联的数据库资源。

(2)使用预处理查询

如果一个查询需要多次执行,则可使用PDO对象的prepare() 方法预先提交查询,服务器准备一个预处理查询语句。然后可多 次调用PDOStatement对象的execute()方法执行查询。

查询执行成功返回包含查询结果集的PDOStatement对象,若 失败则返回FALSE。

准备好语句后,调用execute()方法执行查询。

(3)使用带参数的预处理查询

在预处理查询过程中可对其参数进行设置,分别是使用问号 参数、使用命名参数和将参数绑定到变量(:参数名,以冒号开 始的参数名)3种方式设置参数。

① 使用问号参数

② 使用命名参数

③ 将参数绑定到变量

可以将参数绑定到变量,变量的值作为参数值。

如果参数不是命名参数,在绑定时,可使用1开始的整数表 示对应参数。

处理查询结果集

不管用query()方法还是execute()方法执行查询操作,查 询结果都保存在PDOStatement对象中。可用PDOStatement 对象的fetch()、fetchAll()或fetchColumn()方法从查询结果 中集中读取数据。

(1)使用fetch()方法读取查询结果

fetch()方法返回一个包含查询结果集下一条记录的数据,已无记录时返回 FALSE。其基本格式为

(2)使用fetchAll()方法读取查询结果

fetchAll()方法指返回查询结果集中剩余的全部记录到一个二维数组,无 记录时返回FALSE。其基本格式为

(3)fetchColumn()方法读取查询结果

fetchColumn()方法返回查询结果集下一条记录中指定列的值,已无记 录时返回FALSE。其基本格式为

错误处理及调试

常见的错误类型

大致可以分为以下4类

  • 语法错误
  • 运行错误
  • 逻辑错误
  • 环境错误

语法错误:是指编写的代码不符合PHP的编写规范。

特点:语法错误最常见,也最容易修复

例如:遗漏了一个分号,就会显示错误信息这类错误会阻止PHP脚本执行,通常发生在程序开发时,可以通过错误报告进行修复,再重新运行检查。

运行错误:一般不会阻止PHP脚本的执行,但会导致程序出现潜在的问题。

例如:在一个脚本中定义了两次同名常量,PHP通常会在第二次定义时提示一条错误信息。虽然PHP脚本继续执行,但第二次定义常量的操作没有执行成功。

逻辑错误:最让人头疼,不但不会阻止PHP脚本的执行,也不会显示出错误信息

例如:在if语句中判断两个变量的值是否相等,如果错把比较运算符“==”写成赋值运算符“=”就是一种逻辑错误,很难被发现。

环境错误:是由于PHP开发环境配置的问题引起的代码报错

例如:用mb_strlen()这个函数时,如果PHP环境中没有启用mbstring扩展,就会导致程序出错。

错误级别

PHP中的每个错误都有一个错误级别与之关联,用于表示当前错误的等级。

例如Error、Warning、Notice等错误。

PHP采用常量的形式来表示错误级别,每个错误级别都是一个整型。

级别常量 描述
E_ERROR 1 致命的运行时错误,这类错误不可恢复,会导 致脚本停止运行
E_WARNING 2 运行时警告,仅提示信息,但是脚本不会停止 运行
E_PARSE 4 编译时语法解析错误,说明代码存在语法错误, 无法执行
E_NOTICE 8 运行时通知,表示脚本遇到可能会表现为错误 的情况
E_CORE_ERROR 16 类似E_ERROR,是由PHP引擎核心产生的
E_CORE_WARNING 32 类似E_WARNING,是由PHP引擎核心产生的
E_COMPILE_ERROR 64 类似E_ERROR,是由Zend脚本引擎产生的
E_COMPILE_WARNING 128 类似E_WARNING,是由Zend脚本 引擎产生的
E_USER_ERROR 256 类似E_ERROR,由用户在代码中使 用trigger_error()产生的
E_USER_WARNING 512 类似E_WARNING,由用户在代码中 使用trigger_error()产生的
E_USER_NOTICE 1024 类似E_NOTICE,由用户在代码中使 用trigger_error()产生的
E_STRICT 2048 严格语法检查,确保代码具有互用性 和向前兼容性
E_DEPRECATED 8192 运行时通知,对未来版本中可能无法 正常工作的代码给出警告
E_ALL 32767 表示所有的错误和警告信息(在PHP 5.4之前不包括E_STRICT)

遇到Notice提示信息通常是代码不严谨造成的,不会影响脚本继续运行。

Warning错误级别相比Notice更严重一些,不会影响脚本继续执行。

Fatal error是一种致命错误,在运行时发生。一旦发生该错误,PHP脚本会立即停止执行。

Parse error是语法解析错误,当脚本存在语法错误时,无法解析成功,

就会发生此错误。遇到此错误说明脚本没有执行。

手动触发错误
bool trigger_error ( string $error_msg [, int $error_type = E_USER_NOTICE ] )
第1个参数是错误信息内容
第2个参数是错误类别,默认为E_UESR_NOTICE
显示错误报告-修改配置文件

直接配置php.ini文件来显示错误报告。

error_reporting = E_ALL & ~E_NOTICE

display_errors = On

error_reporting用于设置报告的错误级别

display_errors用于设置是否显示错误信息

第1行代码中E_ALL & ~E_NOTICE表示报告除E_NOTICE之外的所 有级别的错误

第2行表示将错误报告显示在输出结果中

显示错误报告-error_reporting()和ini_set()函数

通过PHP提供的error_reporting()和ini_set()函数来实现显示错误报告。

error_reporting(E_ALL & ~E_NOTICE); ini_set('display_errors', 1);

ini_set()函数用来设置php.ini中指定选项的值,仅在本脚本周期内有效

error_reporting()函数用于设置错误级别

若要获取php.ini中的指定选项值,可以使用ini_get()函数进行获取

如何处理错误

记录错误日志

错误日志功能

实现方式:

通过配置文件来记录错误日志信息

记录错误日志-修改配置文件

通过修改php.ini配置文件,可以直接设置记录错误日志的相关配置项

error_reporting用于设置显示错误级别

E_ALL表示显示所有错误

log_error用于设置是否记录日志

error_log用于指定日志写入的文件路径

error_reporting = E_ALL
log_error = On
error_log = C:\web\php_errors.log

通过error_log()函数来记录错误日志信息。

error_log()函数用于将错误记录到指定的日志文件中

// 将错误信息发送到php.ini中的error_log配置的日志中

error_log('error message a');

// 将错误信息发送到指定日志文件中

error_log('error message b', 3, 'C:/web/php.log');

第2个参数用于指定将错误信息发送到何处,当省略时默认为 php.ini中的error_log配置的日志中,此处设置为3,表示发送到 指定的日志文件中。

第3个参数的设置取决于第2个参数,此处表示日志文件的路径

PHP的调试工具

PHP调试工具Xdebug

作用:是一个开放源代码的PHP程序调试器,用来调试和分

析程序的运行状况。

将下载好的php_xdebug-2.3.3-5.5-vc11.dll文件放到PHP的ext目录中

然后在php.ini文件中添加配置信息,引入该扩展即可。

[Xdebug]
zend_extension="C:\phpStudy\PHPTutorial\php\php5.5.38\ext\php_xdebug2.3.3-5.5-vc11.dll"

重启Apache服务使php.ini配置生效。为了验证是否安装成功, 可以通过phpinfo()函数查看配置信息。如果在页面中看到 Xdebug信息,说明Xdebug安装成功。

php基础总结的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  5. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  6. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  7. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  8. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  9. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  10. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

随机推荐

  1. Android NDK 学习之接受Java传入的字符串

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

  2. webstorm编写react native,代码修改后,重新编译运行没有变化的问题

    w我是拷贝一份react native代码到另一台电脑,发现修改代码运行之后不显示修改后的效果,即仍然与原来的效果一样,暂时不知道什么原因, 后来我运行了npm install 就可以了,不知道是不是 ...

  3. 【Java】接口和抽象类总结

    一.接口 1.1 成员变量(其实是常量) 1.2 方法 二.抽象类 2.1 成员变量 2.2 方法 一.接口 1.1 成员变量(其实是常量) 成员变量默认用 public static final修饰 ...

  4. Linux之Vim的使用

    所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...

  5. PAT1025

    这道题是照着晴神的来敲,但是自己技术太渣,中间还是出现了不少问题. 1.学习到排序的做法,利用algorithm库的sort(begin,end,cmp),自己按照题目要求来完成cmp的编写 可能经常 ...

  6. 2018 ACMICPC上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节)

    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节) 链接:https://ac.nowcoder.co ...

  7. python学习之面向对象

    目录 __main__,__name__ __module__,__class__ __init__ __del__ __repr__,__str__ __mro__ __call__ __new__ ...

  8. 前端学习笔记--CSS布局--文件流定位

    1.概述 2.文档流定位:从上到下,从左到右 代码: <!DOCTYPE html> <html lang="en"> <head> <m ...

  9. The 2019 China Collegiate Programming Contest Harbin Site I. Interesting Permutation

    链接: https://codeforces.com/gym/102394/problem/I 题意: DreamGrid has an interesting permutation of 1,2, ...

  10. python 高阶函数之filter

    前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter. 先看一下filter() 函数签名 >>> ...