php基础总结
期间看到的几篇有意思的博客
为什么 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基础总结的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- 无法写入配置文件...需要在IIS中手动创建此虚拟目录,才可以打开此项目
无妄之灾 之前闲着没事写了一个webapi项目,今天下了班闲来无事就像拿出来改改,没想到打开的时候就提示出现错误. 没错就是这货,其实也不是第一次遇见这个问题了,但是之前一直没有找到解决方案,在网 ...
- 动态URL是什么?动态URL有什么特点?
动态URL是什么动态URL就是动态页面,动态链接,即指在URL中出现“?”这样的参数符号,并以aspx.asp.jsp.php.perl.cgi为后缀的url. 动态URL有什么特点1.在建设反向链接 ...
- Java学习笔记——第3篇
面向对象 结构化程序的任何一个结构都具有唯一的入口和唯一的出口,并且程序不会出现死循环. 虽然Java是面向对象的,但Java的方法里则是一种结构化的程序流. 面向对象的基本思想:类.对象.继承.封装 ...
- kubernetes集群初始化(二)
参考地址:https://github.com/unixhot/salt-kubernetes 一.系统初始化 1.1.安装docker 所有节点都安装docker,设置docker国内yum源 [r ...
- diff算法实现
大致流程 var vnode = { tag: 'ul', attrs: { id: 'list' }, children: [{ tag: 'li', attrs: { className: 'it ...
- String decryption with de4dot
Introduction de4dot is a wonderful tool for deobfuscating known and unknown .NET protections. Dealin ...
- U盘损坏?
- wsgiref 与 Django框架初识
前戏: Web框架的本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,这样我们就可以自己实现Web框架 软件开发架构: c/s架构 客 ...
- python 操作 MySQL 即相关问题
导入pymysql import pymysql # 创建connect()对象 conn = pymysql.connect( host = '127.0.0.1', port = 3306, us ...
- layui table 跨页记忆选择
layui 表格功能目前默认不支持跨页记忆选择 下面来实现layui table跨页记忆选择实现 基于layui版本 1.4.5 表格跨页通用方法 //表格分页复选框 layui.define(['j ...