PHP学习笔记
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP学习笔记,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含34307字,纯文字阅读大概需要50分钟。
内容图文
![PHP学习笔记](/upload/InfoBanner/zyjiaocheng/600/55731aad32744ec29e978ae38ae57ef6.jpg)
基础篇
<?php
$v1=1;
$result=isset($v1);//isset()函数判断一个值是否为空
echo $result;
echo "<br>";
var_dump($result);//也是输出可以输出一个变量的完整信息
$result2=isset($v3);
echo "<br>v3的结果为:";
var_dump($result);
unset($v1);//unset()函数销毁变量
$result3=isset($v1);
echo "<br>v1被unset()之后为";
var_dump($result3);
echo $v1;
?>
结果:
1<br>bool(true)
<br>v3的结果为:bool(true)
<br>v1被unset()之后为bool(false)
PHP Notice: Undefined variable: v1 in D:\javascript\p.php on line 15
-
值传递和引用传递
1.值传递
<?php $v1=10; $v2=$v1; $v1=20; echo $v1; echo "<br>"; echo $v2; ?>
结果:
20 10
2.引用传递 &
传递的是内存地址,也就是两赋值那个变量也指向了同一个内存
<?php $v1=10; $v2=&$v1; $v1=20; echo $v1; echo "<br>"; echo $v2; ?>
结果:
20 20
-
$_SERVER变量
它代表一次请求中,客户端或服务端的一些"基本信息"或系统信息,包括很多
常用的有
1.PHP_SELF : 表示当前请求的网页地址(不包含域名部分)
2.SERVER_NAME : 表示当前请求的服务器名
3.SERVER_ADDR : 表示当前请求的服务器IP地址
4.DOCUMENT_ROOT : 表示当前请求的网站物理路劲
5.REMOTE_ADDR : 表示当前请求的客服端的IP地址
6.SCRIPT_NAME : 表示当前网页地址
-
常量
1.define(‘常量名’,‘常量值’)
<?php define('P1',3.14); echo P1; ?>
2.const 常量名=常量值
<?php const P1=3.14; echo P1;//或者constant('P1') ?>
3.判断常量是否存在
defined("常量名");
-
预定义变量
预定义变量就是PHP语言内部预先定义好的变量,我们可以直接使用
PHP_VERSION 表示当前PHP的版本信息
PHP_OS 表示当前PHP运行所在的系统信息
PHP_INT_MAX 表示当前版本PHP中的最大的整数值
M_PI 表示圆周率Π
-
几个魔术常量
魔术常量也是常量,只是在形式上为常量,而其值是’‘变化’'的
_ DIR _ 代表当前PHP网页文件所在的 文件名
_ FILE _ 代表当前PHP网页本身的路径
_ LINE _ 代表当前这个常量所在的行号
-
进制的转换
1.decbin() 将10进制数转为2进制
2.decoct() 将10进制数转为8进制
3.dechex() 将10进制数转为16进制
或将2,8,16进制转为10进制
1.bindec() 将2进制数转为10进制
2.octdec() 将8进制数转为10进制
3.hexdec() 将16进制数转为10进制
-
标量类型
-
布尔类型
只有两个数值,true,false(不区分大小写)
在需要当做"布尔值"进行判断或比较的时候,以下数据会被当作布尔值的false
false,0,0.0,"",'0‘,空数组
-
数组类型
数组就是将多个"数据"放在一起,排成一个有序序列,这个序列做为一个整体(里面包括了多个数据),就称为数组
有下标:
<?php $array=array('zhang' => 123,'wei' => 134); echo $array['zhang']; echo '<br>'; echo $array['wei']; echo '<br>'; print_r($array)//输出该数组 ?>
无下标:
<?php $array=array('zhang','wei'); echo $array[0]; echo '<br>'; echo $array[1]; ?>
-
字符串
用单引号或双引号引起来的
注意:双引号字符串中,如果出现"$"符号,则该符号后的连续字符串(单词)会被识别为一个变量名,如果识别成功(即确实存在该变量),则会将该变量转换为实际内容。如果识别失败(即实际没有该变量),则会报错
<?php $str1=1234343; echo "hahah {$str1}1"; echo "hahha$str11";//报错 echo "\$str1adfdfa: $str1"; ?>
单引号:
只能使用两个转义符 \ \ (代表一个反斜线),\ '(代表一个单引号)
双引号:
能使用较为丰富的转义符,包括: \ ,", \n,\r,\t,$等
heredoc字符串
形式:$s1=<<<“标识符”
内容
标识符;
<?php $str=<<<"a" ahafalf安抚杰拉德解放了 发动发动反击了 啊打发浪 echo "<input type="text" ></input>" a; echo $str; ?>
? nowdoc字符串
? 形式:$s=<<<‘标识符’
? 内容
? 标识符;
? 字符串长度:
? 1.字符个数
? strlen()
? 2.字节个数
? mb_strlen()
-
空类型NULL
只有一个值,null(不区分大小写)
v 1 = n u l l ; / / 此 时 , 具 有 变 量 v1=null;//此时,具有变量 v1=null;//此时,具有变量v1,但其中的数据是‘空的‘(没有数据)
空值变量,isset()判断的结果是false
-
浮点型
<?php $x = 10.365; var_dump($x); echo "<br>"; $x = 2.4e3;//10的3次方 var_dump($x); echo "<br>"; $x = 8E-5; var_dump($x); ?>
-
-
类型判断
-
gettype()
获取一个变量的类型,结果为一个变量类型的名称(字符串)
<?php $x = 10.365; echo gettype($x); ?>
-
settype()
设置一个变量的类型
<?php $x = 10.365; echo settype($x,'string'); echo gettype($x);//string ?>
-
is_int()
判段是否为整数类型
-
is_float()
判断是否为浮点类型
-
is_bool()
判断是否为布尔类型
-
is_string()
判断是否为字符串
-
is_numeric()
判断是否为数字类型(含整数,小数以及纯数字字符串)
-
is_object()
判断变量是否为一个对象
-
-
两个特殊判断
-
isset()
判断一个变量是否存在,或变量中是否有数据,有则返回true,否则返回false,变量中没有数据返回false
-
empty()
判断是否为’空’,如果确实为‘空’,返回true,否则返回false,如果变量中的数据为空,返回true,否则false
-
-
数据类型转换
-
自动转换
-
强制转换
<?php $x =(int) 10.365; echo $x; echo "<br>"; $x1=(string)1000; echo $x1; echo '<br>'; $x2=(float)10; echo $x2; ?>
-
-
运算
-
算术运算符
+,-,*,/,%
-
连接运算符(.)
-
自操作
–,++
<?php $v=10; $v1=10; $s= ++$v; $s1= $v1++; echo $s;//11 echo $s1;//10 ?>
也前++先自加在取值,后++先取值后自家加
-
自赋值运算符
针对数字+=,-=,*=,/=,%=
针对字符串 .=
-
比较运算
针对数字的大小进行比较的运算
如果不是数字,会自动转换为数字
包括:>,>=,<,<=,==,! = , = = =,! = =
所有比较运算符:运算的结果只有两个可能:true或false
等于(==):模糊
全等于( = = =):严格比较数据类型一样
-
逻辑运算符
1.逻辑与 &&
只有两个条件都为真的时候,结果才是真(true)
2.逻辑或 ||
只要有任意条件为真,结果就是真
3.逻辑非 !
就是对一个布尔值进行"取反"操作
! true 结果为:false
! false 结果为: true
-
-
错误抑制符 @
在一个表达式出现错误的时候,可能将错误"隐藏"掩盖起来不输出。
通常,该符号用于实际运行环境中的一些条件非我们(程序员)能控制的情形。如果出现该情形并没有报错,则我们可以抑制该错误的显示(只是该错误不显示,不是没有错误了)
-
条件运算符
只有一个条件运算符,形式为:
表达式1 ? 表达式2 : 表达式3
<?php $v=10; $v1=20; $v2 = $v1 / $v ? "1" : "2"; echo $v2; //1 ?>
-
if分支结构
-
单分支
-
双分支
if (条件) { if(条件) { ..... } else { ....... } } else { ......... }
-
多分支
if (条件判断) { //分支1 } elseif(条件2){ //分支2 } elseif(条件3){ //分支3 } else{ //最后的else分支,可以没有! }
-
-
switch分支
switch (表达式或变量) { case 值1: 分支语句1; break; case 值2: 分支语句2; break; ....... default: 默认分支; }
-
while循环语句
<?php $v=10; echo $v; while($v) { echo "ha"; $v--; } ?>
-
do --while()循环
<?php do{ }while(条件)
-
do --while是不管条件满不满足先执行一次
-
for 循环
<?php for(循环变量初始化;循环条件判断;循环变量的改变){ 循环体.... } ?>
循环可以嵌套
-
循环中断
循环是按给定的条件,只要条件满足就会继续执行循环体
但我们也可以在循环过程中,人为将循环中断。
-
continue中断
中断当前正在进行的循环体(即后续语句不在执行),继续下一次循环要执行的语句。
格式:
continue [$n];
表示要中断第几层的循环,继续该层循环的下一次,其中$n可以省略,如果省略,表示1,就是中断当前层的循环。
-
break中断
即停止当前正在进行的循环体,去执行循环体之后的语句
break [$n];
表示要中断第几层的循环,继续该层循环的下一次,其中$n可以省略,如果省略,表示1,就是中断当前层的循环。
-
函数
function 函数名(){
函数体
}
-
函数定义
function 函数名 ($形参1,$形参2...){ 函数体; }
函数调用形式:
函数名( 实 参 1 , 实参1, 实参1,实参…)
-
函数参数的传值方式
实参是一个变量的情况,就是两个变量的传值方式。默认情况下是值传递。
可以使用 & 符号设定为引用传递
function f1($p1,&$p2...){ .... }
-
函数返回值
一个函数在执行结束时,可以让其返回一个数据,这就是函数的返回值.
语法:
return 要返回的数据;
-
可变函数
所谓可变函数,就是函数名是一个变量的情形。可变函数实际上就是在调用函数的时候,使用一个变量来表示函数
function f1(){ .... } $f='f1'; $f();//调用了函数f1,这就是可变函数
-
匿名函数
就是一个“定义时没有名字"的函数
$f1=function (形参...){ ........... }; $f(实参);//这就是调用该函数
-
跟函数有关的函数
function_exists(‘函数名’) //判断一个函数是否已经存在
func_get_arg($n) //在函数内部可用,用于获得第N个实参
func_get_args() //在函数内部可用,用于获得所有实参
func_num_args() //在函数内部可用,用于获得实参的个数
-
常用数学函数
max 取得若干数中的最大值 min 取得若干数中的最小值 round 对某个数据进行四舍五入 cdil 对某个数"向上取整"将一个数据往上找出其小的一个整数 floot 对某个数"向下取整"将一个数据往下找出其大的一个整数(含其本身) abs 取某个数据的绝对值 sqrt 计算某个数的开方值 pow 对某个数进行"幂运算" //$n1=pow(3,2)//3的2次 rand 获得某两个数之间的随机整数 mt_rand 获得某两个数之间的随机整数(含两个数),比rand更快
-
常用时间函数、
time 获得当前时间(精确到秒) microtime 获得当前时间(精确到微秒) mktime 创建一个时间数据,参数为时,分,秒,月,日,年 date 将一个时间转换为某种字符串形式 idate 取得一个时间的某个单项数据值,比如idate("Y")取得年份数 strtotime 将一个字符串"转换"为时间值 date_default_timezone_set 在代码中设置"时区" date_default_timezone_get 在代码中获取"时区"
-
作用域
-
局部变量
一种特殊的局部变量
function xx(..){ static $s1=10; //此时,$s1就是静态变量 }
静态变量的特点:
? 静态变量的值不会再函数调用结束时被销毁,而是会一致保留。也就是说,当我们再次调用函数时,该变量(的值)还是能继续使用
-
全局变量
就是函数外部范围的作用域,其中定义的变量就是全局变量
全局变量只能再其所在的全局作用域中可以直接使用(访问)
-
超全局作用域和超全局变量
包括局部作用域和全局作用域的整个作用域范围。
超全局变量可以再所有范围中使用
<?php $v1=1; function func(){ echo $GLOBALS['V1'];//使用外面v1变量 } func(); ?>
<?php $v1=1; function func(){ global $v1; echo $v1;//使用外面v1变量 } func(); ?>
$GLOBALS数组(变量)和global关键字,都能实现,在局部作用域中使用全局变量。
文件加载
将一个(别的)文件包含到当前文件中,成为当前文件运行过程中的一部分。
语法:
include "要载入的文件路径";//可以用相对路径也可以用绝对路径 include_once "要载入的文件路径"; require "要加载的文件"; require_once "要加载的文件";
获取物理路径(绝对路径)的方式:
? _ DIR _ :表示当前文件所在路径,由它可以构建出绝对路径
getcwd():表示当前正在访问的网页路径,由它可以构建出绝对路径。
错误处理
出错程序运行时的错误
-
常见错误代号
-
E_NOTICE
提示性错误,轻微
错误发生后,后面的程序继续执行
-
E_WARNING
警告性错误,稍微严重
错误发生后,后面的程序继续执行
-
E_ERROR
严重错误 / 致命错误
错误发生之后,后面的程序不能再执行
-
E_PARSE
语法错误(语法解释错误)
语法解释错误,是直接就不能运行程序
-
E_USER_NOTICE
用户自定义的警告错误
-
E_USER_WARING
用户自定义的警告错误
-
E_USER_ERROR
用户自定义的严重错误
-
E_ALL
它是一个代表”所有“错误的代号
-
-
自定义触发错误
trigger_error("自定义错误提示内容",自定义错误的代码)
<?php $n=10; if ($n==10) { trigger_error("错误"); } else{ echo $n; } ?>
-
自定错误
<?php //声明,我们自己使用自己的函数来处理错误 //set_error_handler("处理错误的自己的函数名") set_error_handler('my_error'); //定义函数 function my_error($errCode, $errMsg, $errFile, $errLine) //$errCode错误代号 $errMsg错误信息 $errFile错误文件 $errLine错误行号 { //错误提示 echo "<h1>错误了</h1>"; } echo $n; ?>
<?php set_error_handler('my_error'); function my_error($errCode, $errMsg, $errFile, $errLine) { echo "<h1>错误了</h1>"; echo "<br>错误行号:". $errLine; echo "<br>错误信息:".$errMsg; echo "<br>错误文件:".$errFile; echo "<br>错误代号:".$errCode; } echo $n; ?>
字符串常用函数
字符串输出
-
echo
输出一个或多个字符(不是函数,是语言结构)
-
print
输出一个字符串
-
print_r
输出变量得较为详细得信息
-
var_dump
输出变量得完整信息
实例:
<?php $arr=['中','国',12,14]; echo $arr; echo "<br>"; print $arr; echo "<br>"; print_r($arr); echo "<br>"; var_dump($arr); ?>
结果:
Array Array Array ( [0] => 中 [1] => 国 [2] => 12 [3] => 14 ) array(4) { [0]=> string(3) "中" [1]=> string(3) "国" [2]=> int(12) [3]=> int(14) }
字符串去除与填充
-
trim
消除一个字符串两端得空白字符或指定字符(空白字符包括,空格,\n,\r,\t等)
-
ltrim
消除一个字符串左边得空白字符或指定字符
-
rtrim
消除一个字符串右边的空白字符或指定字符
-
str_pad
将一个 字符串使用指定的字符填充到指定的长度
-
字符串连接与分割
-
implode
将一个数组的值连接起来组成一个字符串
-
join 同 implode
<?php $a=['qq','aa','lll']; var_dump($a); echo "<br>"; $v2=implode('-',$a); echo $v2; $v3=implode('',$a); echo "<br>"; echo $v3; echo "<br>"; $v4=join('-',$a); echo $v4; echo "<br>"; $v5=join('',$a); echo $v5; ?>
结果:
array(3) { [0]=> string(2) "qq" [1]=> string(2) "aa" [2]=> string(3) "lll" } qq-aa-lll qqaalll qq-aa-lll qqaalll
-
explode
将一个字符串使用指定的字符分割为一个数组
<?php $a='a b c d e f g'; $b=explode(' ',$a); var_dump($b); ?>
结果:
array(7) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" [4]=> string(1) "e" [5]=> string(1) "f" [6]=> string(1) "g" }
-
str_split
将一个字符串按指定的长度分割为一个数组
<?php $a='abdgagdfdfda'; $b=str_split($a,4); var_dump($b); ?>
结果:
array(3) { [0]=> string(4) "abdg" [1]=> string(4) "agdf" [2]=> string(4) "dfda" }
字符串截取
-
substr
获取一个字符串中指定位置开始指定长度的字符串
<?php $str=substr('adfdfddfdfa',4); echo $str; ?>
结果:
fddfdfa
-
strstr
获取一个字符串中某个指定字符首次出现的位置起,到最后结尾处的字符
<?php $str=strstr('abc.adg.123.txt','.'); echo $str;
结果:
.adg.123.txt
-
strrchr
获取一个字符串中某个指定字符最后一次出现的位置起,到最后结尾处的字符。
<?php echo strrchr('abcd12.3.txt','.'); ?>
结果:
.txt
字符串替换
-
str_replace
将一个字符串中的指定字符,替换为给定的新字符
<?php $v1='afddfddgfd23432dfa'; $v2=str_replace('a','6',$v1); echo $v2;
6fddfddgfd23432df6
-
substr_replace
将一个字符串中指定位置开始的指定个数的字符,替换为给定的新字符,也就是把字符串的一部分替换为另一个字符串
substr_replace(string,replacement,start,length) <?php $v1='afddfddgfd23432dfa'; $v2=substr_replace($v1,'1',2,5); echo $v2;
结果:
af1gfd23432dfa
字符串长度与位置
-
strlen
获取字符串的字节长度
-
strpos
获取一个字符串中某个字符串首次出现的位置
strpos('abcd.12.3.txt','.');//结果是4
-
strrpos
获取一个字符串中某个字符串最后一次出现的位置
strrpos('abcd.12.3.txt','.');//结果是 9 strrpos('abcd.12.3.txt','cd');//结果是 4
字符转换
-
strtolower
将一个字符串转为小写
-
strtoupper
将一个字符串转换为大写
-
lcfirst
将一个字符串的首字母转为小写
-
ucfirst
将一个字符串的首字母转换为大写
-
ucwords
将一个字符串中的所有单词的首字母转换为大写
数组
数组下标
数组下标可以是整数或者字符串
-
整数下标
可以使用任意整数,也可以不显式使用下标,此时默认就是整数下标。
而且,从前往后,每一个没有使用下标的单元,系统给其分配的下标为之前所用过整数下标的最大值+1(对于第一个是0)
$arr=arry('a',2=>'b','c','x'=>'d','e');//其下标分别为:0,2,3,'x',4 $arr1=array(5=>'a',2=>'b','c','x'=>'d'); //其下标分别为5,2,6,'x'
$arr['x']=5; //这一行,会自动创建一个数组 $arr[]=6; //此时下标就是0 $arr[]=8; //下标为1
-
索引数组
通常是指一个数组的下标是从0开始的连续的整数
-
关联数组
通常是指一个数组的下标都是字符串
$person=array('name'=>'张三','age'=>18,'edu'=>'大学','salary'=>10000);
PHP数组的维数
<?php
$arr=[
[1,2,3],[4,5,6],[7,8,9]
];
$arr1=[1,2,3,4,5];
$len=count($arr);
$len1=count($arr1);
echo $len; //3
echo "<br>";
echo $len1;//5
?>
数组遍历foreach
使用foreach 语句遍历数组
<?php
$arr1=['a'=>1,'b'=>6];
foreach ($arr1 as $value) {
echo $value;
echo "<br>";
}
foreach($arr1 as $key=>$value)
{
echo "<br>";
echo $value;
echo "<br>";
echo $key;
}
?>
结果:
1
6
1
a
6
b
数组指针操作函数
$re = current( $arr1); //取得 数組中当前指针所在单元的值;
$re = key( $arr1 ); //取得数组中当前指针所在单元的键(下标) ;
$re = next( $arrl ); //将数组中的指针往后移动-一个位置,并取得新位置上的值;
$re = prev( $arr1 ); //将数组中的指针往前移动一个位置,并取得新位置上的值;
$re = end( $arr1 ); //将数组中的指针移动到最后一个位置,并取得新位置上的值;
r e = r e s e t ( re = reset( re=reset(arr1); //将数组中的指针移动到最前一个位置,并取得新位置上的值;
常用数组函数
-
max()
获取一个数组中的最大值
-
min()
获取一个数组中的最小值
-
count()
获取一个数组的元素个数
-
in_array()
判断一个数据是否在指定数组中
$b=in_array($数组,数据);//结果为true或false
-
range()
生成某个范围的连续值得数组,比如range(3,9)会得到数组,array(3,4,5,6,7,8,9);
-
array_keys()
取得一个数组中得所有"键"并放入一个索引数组中
-
array_values()
取得一个数组中得所有"值"并放入一个索引数组中
数组查找函数
-
in_array()
在一个数组中找是否存在某个数据
-
array_search()
在数组中搜索给定得值,如果成功则返回相应得键名
-
array_key_exists()
检查给定得键名是否存在于数组中
PHP+MYSQL
PHP连接数据库
-
mysqli_connect()
mysqli_connect([host][username][password][dbname][port])
dbname 是数据库名称
port 是MYSQL服务器的端口号,默认是3306
<?php
$db_host='localhost';
$db_user='root';
$password='root';
$port='3306';
$link=mysqli_connect($db_host,$db_user,$password);
var_dump($link);
?>
-
@运算符
PHP支持一个错误控制运算符@,当将其放置在一个php表达式之前,该表达式可能产生的任何错误信息都被忽略掉(不包含语法错误)
<?php $db_host='localhost'; $db_user='root'; $password='root1'; $port='3306'; if(!$link=@mysqli_connect($db_host,$db_user,$password)) { //如果错误了就返回bool(false),正确的话就正常执行。 die();//中止程序向下运行 } var_dump($link); ?>
-
exit()或die()
输出一个消息并且退出当前脚本,等同于die()
void exit($string); 输出$string的值,并终止程序的运行
选择数据库
语法:
musqli_select_db(mysql $link,string $database); //如果成功放回TRUE,失败返回False
-
设置数据库返回字符集
mysqli_set_charset($link,$charset); //$charset为要设置得字符集
执行各种SQL语句
-
mysqli_query()
mysqli_query($link,$query); //query是查询字符串 //mysqli_query()仅对SELECT,SHOW,DESCRIBE语句返回一个mysqli_result结果集对象,如果查询执行不正确则返回FALSE,对于其他类型得SQL语句,mysqli_query()在执行成功时返回TRUE,出错时返回FALSE。
注意:
? 查询字符串不应以分号结束,和命令行模式下有区别
-
mysqli_free_result()
释放与结果集相关得内存
mysqli_free_result(mysqli_result $result); //$result为结果集对象
内存中的变量何时消失:
1.网页执行完毕,所有与本网页相关的变量自动销毁2.手动销毁指定的
从结果集获取一行数据
-
mysqli_fetch_row()
从结果集中取得一行作为枚举数组
mysqli_fetch_row(mysqli_result $result)
返回根据所取得的行生成的数组,如果没有更多行则返回FALSE
mysqli_fetch_row()从指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从0开始。
-
mysql_fetch_assoc()
从结果集中获取一行数据,并作为关联数组(字段名作下标)返回
$arr=mysql_fetch_assoc($result);
返回值:从结果集取得的行生成的关联数组,如果没有更多行则返回false
-
mysqli_fetch_array()
从结果集中取得一行作为关联数组,或数字数组,或者二者兼有。
mysqli_fetch_array(mysqli_result $result)
第二个参数
mysqli_fetch_array(mysqli_result $result,MYSQLI_ASSOC) //返回关联数组 mysqli_fetch_array(mysqli_result $result,MYSQLI_NUM) //返回枚举数组
-
mysqli_fetch_all()
从结果集中取得所有行作为关联数组,枚举数组,或二者兼有。
mysqli_fetch_all(mysqli_result $result)
从结果集中获取记录数
-
mysqli_num_rows()
取得结果集中行的数目
mysqli_num_rows(mysqli_result $result)
此命令仅对select有效
-
mysqli_affected_rows()
取得前一次mysql操作所影响的记录行数
mysqli_affected_rows(mysqli $link)
实战笔记
-
hearder()
hearder("refresh:3;url=./list.php"); 告诉浏览器等待三秒跳转到指定的页面
目录操作
-
创建目录mkdir()
mkdir(string $pathname [,int $mode=0777][,bool $recursive=false]) //$patchname指定目录的路径 //$mode默认的mode是0777,就是最大访问权限,在windows下被忽略 //$recursive如果指定的路径的上级目录不存在,则也会递归创建
<?php $patch='./list/a/b/c/d'; mkdir($patch,0777,true);
-
判断当前文件是目录还是文件 is_dir()
is_dir($dirname)
-
判断目录或文件是否存在 file_exists()
file_exists($dirname)
-
删除目录 rmdir()
rmdir(string $dirname) //该目录必须为空
-
更改目录访问权限 chmod()
改变文件的访问权限
chmod(string $filename,int $mode)
-
取得目录或文件的权限 fileperms()
int fileperms(string $filename) //以10进制返回文件的权限
-
重命名或移动文件或目录 rename()
rename(oldname,newname)
如果原目录和新目录都位于同一个父目录下,则认为是改名
如果原目录和新目录位于不同父目录下,则认为是移动
-
打开目录 opendir()
打开目录句柄,可用于之后的closedir(),readdir(),和rewinddir()调用中
resource opendir(string $path) //成功返回目录句柄的resource,失败返回false
-
读取目录中条目 readdir()
从目录句柄中读取条目
string readdir(resource $dir_handle)
返回目录中下一个文件的文件名。文件名以在文件系统中排序返回,成功返回文件名,失败返回false
-
显示中文目录或文件 iconv()
字符串按要求的字符编码来转换
string iconv(string $old_charset,string $new_charset,string $str)
-
关闭目录句柄 closedir()
关闭由dir_handle指定的目录流。流必须之前被opendir()所打开.
void closedir(resource $dir_handle)
PHP操作文件
-
打开文件 fopen()
打开文件或URL
resource fopen(string $filename,string $mode) //$filename 指定要打开的目标文件或URL //$mode 指定文件的打开方式 r,w,a,x......
-
关闭文件 fclose()
bool fclose(resource $handle)
-
读取文件内容
-
读取指定大小的文件内容fread()
string fread(resource $handle,int $length)
-
获取文件内容大小 filesize()
filesize($filename); //$filename文件名
-
读取一行文件 fgets()
从文件指针中读取一行
string fgets(resource $handle [,int $length]) //$length从handle指向的文件中读取一行并返回长度最多为length-1字节的字符串。碰到换行符,EOF或以读取了length-1字节后停止
-
读取文件内容到数组中 file()
把整个文件读入一个数组中
array file(string $filename[,int $flags=0]) //$filename 文件的路径 //附加选项。FILE_USE_INCLUDE_PATH(1),在include_path中查找文件 //FILE_IGONRE_NEW_LINES(2),在数组的每个元素末尾不添加换行符 //FILE_SKIP_EMPTY_LINES(4),跳过空行
不需要打开文件和关闭文件
-
把文件内容读到字符串中 file_get_contents()
把整个文件读入一个字符串
string file_get_contents(string $filename)
<?php //读取远程网页数据 $filename='http://www.baidu.com'; //不用打开和关闭文件 $str=file_get_contents($filename); //打开数组 print_r($str); ?>
写入文件
-
将一个字符串写入文件
int file_put_contents(string $filename,mixed $data[,int $flags=0]) //filename要被写入数据的文件名 //data要写入的数据
-
写入文件
int fwrite(resource $handle,string $string)
拷贝文件
将文件按从source拷贝到dest
bool copy(string $source,string $dest) //如果目标文件存在则会覆盖
删除文件
bool unlink(string $filename) //成功时返回true,或者失败时返回false //删除文件不会进入回收站
其他的文件操作函数
-
filesize()
可以获取文件大小,单位为字节
-
is_writable()
判断文件是否可写
-
is_readable()
判断文件是否可读
-
feof()
判断文件指针是否到达文件末尾
-
filectime()
获取创建文件的时间
-
fileatime()
获取文件最新访问的时间
-
filemtime()
获取文件最后修改时间
-
图像
创建空画布图像
resource imagecreatetruecolor(int $width,int $height)
成功返回图像资源,失败返回false
创建基于已有图像的图像
由文件或URL创建一个新图像
resource imagecreatefrompng(string $filename)
//$filename为图像的完整路径
imagecreatefromjpeg()和imagecreatefromgif()
输出图像到浏览器或保存文件
以jpg/gif/png格式将图像输出到浏览器或文件
bool imagejpeg(resource $image[,string $filename[,int $quality]])
imagegif(),imagepng()格式都一样但没有第三个参数
图像操作
-
为图像分配颜色
int imagecolorallocate(resouce $image,int $red,int $green,int $blue)
-
给画布填充背景颜色
imagefill(图像资源,x坐标,y坐标,颜色值)
-
水平的画一行字符串
imagestring(resouce $img,int $font,int $x,int $y,string $s,int $col)
<?php
//创建一个画布
$img =imagecreatetruecolor(1080,640);
//分配颜色
$color1=imagecolorallocate($img,0,0,0); //黑色
$color2=imagecolorallocate($img,255,0,0);//红色
//填充背景色
imagefill($img,0,0,$color1);
//imagestring(图像资源,字号大小,X坐标,Y坐标,字符串,文字颜色)
//往图像上写入一行字符串(非中文)
$str="welcome to start";
imagestring($img,5,0,0,$str,$color2);
//输出图像到浏览器
header('Content-Type:image/png');
imagepng($img);
//销毁图像资源
imagedestroy($img);
-
获取画布的宽度和高度
imagesx($img); //$img是图像资源
全局变量数组$_FILES
-
$_POST数组中保存的是普通表单元素数据
-
$_FILES数组中保存的是上传文件的 信息
$_FILES数组中有5个元素
1.上传文件员名称
2.文件类型
3.上传文件数据临时存放位置
4.上传过程中是否有错误发生
5.上传文件大小
COOKIE操作
-
添加COOKIE数据
向客户端发送一个HTTP cookie
bool setcookie(string $name[,string $value][,int $expire=0][,string $path][,string $domain][,bool $secure =false][,bool $httponly=false])
1.$name cookie的名称
2.$value cookie的值,会自动进行url编码。接收时会进行url解码。cookie值得类型只能是标量数据类型
3.$expire cookie的有效时间
4.$path cookie的服务器路径
5.$domain cookie的域名
6.$secure 规定是否通过安全的https连接传输cookie
-
读取cookie数据
全局变量$_COOKIE
<?php echo "用户名:".$_COOKIE['username']."<br>"; echo "密码:".$_COOKIE['password']."<br>";
-
COOKIE设置
默认cookie的有效期是关闭浏览器时,自动失效。该cookie称为临时cookie
一般用time() + N 表示新的时间戳,在当前时间点再加上N秒后,产生一个新的时间戳
//添加COOKIE数据:目录有效性,COOKIE只在public目录下生效 setcookie("username","admin",time()+7*24*3600,"/public"); setcookie("password","123456",time()+7*24*3600,"/public");
-
COOKIE路径有效性
设置cookie只能在指定的目录及其子目录下有效
$path默认为"/",代表当前网站根目录,在当前目录及其所有子目录都可以使用。
由于浏览器每次请求时,携带到服务器端很多的cookie数据,会导致请求数据变得庞大,将cookie划分各个路径中,减少每个路径下cookie的数量
setcookie("username","admin",time()+7*24*3600); setcookie("password","123456",time()+7*24*3600);
-
COOKIE域名有效性
给一个cookie指定访问的域名
默认情况下,cookie在当前域名下有效。如果设置为主域,则在所有域名下都可以使用。如果设置为子域名,则只能在子域名下使用该COOKIE
setcookie("username","admin",time()+7*24*3600,'/','2018.cn')
-
删除COOKIE数据
1.设置cookie有效性为过去的某一个时间
setcookie("username","admin",time()-1) setcookie("password","1235",time()-1)
2.设置cookie的值为false或空字符串
3.不设置cookie
-
COOKIE总结
1.COOKIE储存在客户端,相对来说不太安全
2.COOKIE储存的数据类型,只能是字符串
3.COOKIE储存的数据容量,大约只能储存4KB数据
4.浏览器可以禁用缓存,也可以禁用COOKIE,则COOKIE功能就失效
SESSION
-
SESSION概述
1.session对象储存特定用户的会话数据
2.session将会话数据储存在服务端
3.session是基于cookie技术的,没有cookie就没有session
4.session在整个用户会话中,一直存下去,一个用户会话失效,从用户登录开始,到与用户登录结束。
5.session储存的内容类型,不限于字符串
6.session储存的数据量要比cookie大的多
7.session数据储存在服务端,更安全,可靠。
-
开启SESSION会话功能
启动新会话或重用现有会话
bool session_start(void)
S E S S I O N 变 量 默 认 是 不 存 在 的 , 与 _SESSION变量默认是不存在的,与 S?ESSION变量默认是不存在的,与 _ POST,$ _ GET,$ _FILE。不一样,必须先开启SESSION才能使用$ _SESSION变量。
每个需要session数据的页面,都要开启session功能
-
添加SESSION数据
对session的管理(增删改查),都是通过超全局数组$ _ SESSION进行的
$_SESSION[key]=value
一个网站不管添加多少个SESSION数据,最终在浏览器端只储存一个SESSION的ID值。
-
读取SESSION数据
$value=$_SESSION[key]
-
删除SESSION数据
使用unset()函数
unset($_SESSION['username']); $_SESSION=array();//删除整个session数组
删除SESSION数据,并没有删除SESSION文件
-
销毁SESSION文件
删除当前的SESSION文件,不影响其他的SESSION文件。
session_destroy();
面向对象
面向对象是以事物(对象)为中心的编程思想
-
类的成员属性
类的成员属性就是指某个类具有的公共的特征,特性。类中定义的变量就是类的成员属性。
类的成员属性和普通变量的区别,类的成员属性必须要带权限修饰符,而普通变量不需要
-
权限修饰符
1.public(公共权限)
在任何地方都可以访问,主要包括,类外,本类中,子类中都可以访问。
2.private(私有权限)
只能在本类中被访问,在类外和子类中都无权访问
3.protected(受保护的权限)
只能在本类中和子类中被访问,在类外不能被访问
-
创建类的实例对象
$obj = new Student()
<?php class Student { public $name = 'zhang'; public $age = 18; } $obj = new Student(); //输出当前对象的属性 echo $obj->name; //给成员属性重新赋值 $obj->name ='wei'; echo $obj->name; //给当前对象添加一个新属性 $obj->borth=2020; echo $obj->borth; //删除属性:使用unset()可以删除变量,数组元素,对象属性等 unset($obj->age); // ?>
<?php class Student { public function showInfo($name, $age) { echo "{$name}的年龄是{$age}岁!"; } } //创建类的对象 $obj=new Student; //调用对象的方法 $obj->showInfo('zhang',12); ?>
-
伪变量$this的使用
在php中,使用$this变量来代替当前对象,例如 $this->name=“张三”
$this代表当前对象,是到当前对象的一个引用。
只有创建对象后,$this变量才存在。类不会自动运行
-
类常量
常量的值必须是一个定值,不能修改,也不能删除
常量在内存中只有一份,不管创建多少个对象
类常量可以极大节省服务器内存,可以被所有对象去共享
常量的定义:
类常量没有权限,只有属性和方法才会有权限
使用const来定义类的常量(局部常量),只能在局部作用域下使用,define()定义常量是全局常量,在任何地方都可以使用
const 常量名=常量值; //类常量,不用创建对象,直接就能访问 ClassName::常量名;
-
构造方法
当使用new关键字创建对象时,第一个自动调用的方法,就是构造方法。
构造方法的名称是固定的
void _construct([mixed $args[,$...]])
构造方法可以带参数,也可以不带参数,构造方法不是必须的,是可选的。
<?php class Student { //定义私有成员属性 private $name; private $age; private $sex; //公共的构造方法 public function __construct($name2, $age2, $sex2) { $this->name = $name2; $this->age =$age2; $this->sex=$sex2; } public function showinfo() { $str="姓名:{$this->name}"; echo $str; } } $obj=new Student("zhang",25,"男"); $obj->showinfo(); //姓名:zhang
-
析构方法
对象销毁前自动调用的方法,就是析构方法
析构方法的名称是固定的:
void _destruct(void)
析构方法不带任何参数。作用就是垃圾回收工作
-
静态属性和静态方法
static关键字修饰的属性,就是静态属性。
static关键字修饰的方法,就是静态方法。
静态属性:就是类的属性,与类相关,与对象无关
静态方法:就是类的方法,与类相关,与对象无关。
类的东西(类常量,静态方法,静态属性),通过“类名::”来调用。静态属性或静态方法在内存中只有一份,被所有对象去共享。它的好处就是节省内存。
<?php class Student { private static $count=60; //公共的静态方法 public static function showinfo() { $str="班级认数:".Student::$count; echo $str; } } //在类外访问公共的静态方法 Student::showinfo(); ?> //班级认数:60
-
self关键字使用
$this是指向当前对象的指针,而self是指向当前类的指针
t h i s 关 键 字 用 来 调 用 对 象 的 属 性 和 方 法 , s e l f 用 来 调 用 类 常 量 , 静 态 属 性 , 静 态 方 法 , this关键字用来调用对象的属性和方法,self用来调用类常量,静态属性,静态方法, this关键字用来调用对象的属性和方法,self用来调用类常量,静态属性,静态方法,this关键字只能在成员方法中使用,self关键字可以在成员方法和静态方法中使用
-
类的继承
<?php class Student { public $name="zhang"; public $age=23; } //定义一个Student的继承类 class JCHENG extends Student { public function a(){ echo $this->name; } } $obj=new JCHENG(); $obj->a(); //zhang
-
parent关键字
self代表当前类,parent代表父类
self和parent可以存在于所有方法(成员方法和静态方法)中
self用来调用本类的内容,包括:类常量,静态属性,静态方法,成员方法。
parent用来调用父类的内容,包括,常量,静态属性,静态方法,成员方法。
self和parent都使用范围解析符"::"来调用其他内容
<?php class Student { const TITLE ="zhangsan"; protected static $count=60; } //定义一个Student的继承类 class JCHENG extends Student { const TITLE ="lisi"; protected static $count=160; public function showInfo() { $str="父类常量:".parent::TITLE; $str1="子类常量".self::TITLE; echo $str; echo "<br>"; echo $str1; } } $obj=new JCHENG(); $obj->showInfo(); ?> //父类常量:zhangsan //子类常量lisi
-
类的多态
PHP不支持在同类中方法重写,可在子类中重写方法
重写要求:
-
子类中重写的方法,要与父类中的方法同名
-
子类中重写的方法形参个数,要与父类中的同名方法形参个数一致
-
子类中重写的方法类型,要与父类中同名方法类型一致
-
子类中重写的方法的访问权限,不能低于父类中同名方法的访问权限。
-
父类方法权限为private,子类无法继承,也无法重写
<?php class Student { public function showinfo($a, $b) { echo "hahah"; echo $a; echo $b; } } class Itcast extends Student { public function showinfo($name, $age) { echo "执行"; echo $name; echo $age; } } $obj1 = new Itcast(); $obj1->showinfo("zhang",15); //执行zhang15
-
-
最终类和最终方法
Final关键字修饰的类,就是最终类
Final关键字修饰的方法,就是最终方法
最终类,该类只能实例化,不能被继承,该类十分完善了,不需要升级和拓展
最终方法:该方法可以被继承,但不能重写。该方法十分完善了,不需要重写了
-
抽象类和抽象方法
abstract关键字修饰的类,就是抽象类。抽象类,该类不能直接实例化,必须先继承后再实例化。常用在基础类。
抽象方法:方法必须先继承后重写,所有的抽象方法都必须要重写,少一个都不行。
抽象方法没有方法体,必须在子类重写后,再定义方法体
如果一个类中有抽象方法,该类必须是抽象类
-
克隆对象
克隆对象是两个独立的新对象,对象地址不一样
$obj = new Student(); $obj1 = clone $obj;//克隆新对象$obj1
-
魔术函数
-
__toString()
将对象转换成字符串时,__toString()会自动调用。
php不支持对象转字符串,因此,不能使用echo输出一个对象。
-
__invoke()
当把一个对象当成函数调用时,__invoke()会自动调用
-
__get()
当访问一个不可访问属性时,__get()魔术方法会自动调用
<?php class Student { private $name ="张三"; private $age =24; public function __get($n) { return $this->$n; } } $obj = new Student(); echo $obj->name; //张三
-
__set()
在给不可访问属性赋值时,__set()会被调用
<?php class Student { private $name ="张三"; private $age =24; //给私有属性赋值 public function __set($n,$v){ $this->$n=$v; } //访问私有属性 public function __get($n) { return $this->$n; } } $obj = new Student(); $obj->name="zhang"; echo $obj->name; //zhang
-
__isset()
当对不可访问属性调用isset()或empty()时,__isset()会被调用
-
__unset()
当对不可访问属性调用unset()时,__unset()会被调用
-
__call()
在对象中调用一个不可访问方法时,__call()会被调用
-
__callStatic()
用静态方式调用一个不可访问方法时,__callStatic()会被调用
变量序列化
序列化是将变量转换为可保存或传输的字符串的过程
反序列化就是在适当的时候把这个字符串再转化为原来的变量使用
序列化
<?php $arr=array('db_host'=>'root','db_passwd'=>'1234'); //将变量转成可保存的字符串 $str=serialize($arr); echo $str; //将序列化字符串,保存到记事本 file_put_contents('./1.txt',$str);
反序列化
<?php //序列化字符串,还原成原始变量 //读取记事本数据 $str=file_get_contents('./1.txt'); //将序列化字符串,还远程变量 $arr=unserialize($str); print_r($arr);
-
对象序列化
对象的序列化,与其他变量数据一样
对象序列化的内容只能包含成员属性
当序列化对象属性时,serialize()函数会检查类中是否存在一个魔术方法__sleep(),如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。
静态延时绑定
如果只有一个类,self和static都代表当前类
如果在继承范围,self永远代表当前类,static代表最终执行的类
命名空间
命名空间是一种封装事物的方法
在很多地方都可以见到这种抽象概念,在操作系统中目录用来将相关文件分组,对目录的文件来说,它就扮演了命名空间的角色。在PHP中,命名空间用来解决在编写类库或应用程序时名称冲突的问题
-
定义命名空间的要求
空间中可以包含任意合法的PHP代码,但只有三种代码受命名空间的影响,它们是:类,函数和常量。
命名空间通过关键字namespace来声明,命名空间必须是程序脚本的第一条语句
<?php namespace AP; class Student { public $name; public $age; public function __construct($name, $age) { $this->name=$name; $this->age=$age; } public function showinfo() { echo $this->name; echo $this->age; } }
<?php require_once('./6.php'); //访问命名空间的类型 $stu=new AP\Student('zhang',18); $stu->showinfo();
如果想直接使用空间下的类名,使用use导入
如果类名与当前环境下类名冲突,使用as关键字
use APP\HOME\Student as Student1
PDO
PDO是PHP数据对象(PHP data object)的缩写
PDO拓展为PHP访问数据库定义了一个轻量级的,一致性的接口。PDO作用是统一各种数据库的访问接口,PDO接口中的方法就可以对各种数据进行操作。
-
创建PDO类的对象
PDO::__construct(string $dsn[,string $username[,string $password]]) //例如 $dsn="mysql:host=127.0.0.1;port=3306;dbname=db;charset=utf8" $username,数据库用户名 $password,数据库密码
-
PDO::exec()方法
执行一条sql语句,并返回受影响的行数
-
PDO::query()方法
执行一条sql语句,返回一个结果集对象
-
PDO::lastInsertId()方法
返回最后插入行的ID或序列值
-
PDO::setAttribute()方法
设置数据库句柄属性
-
PDOstatement::fetch()方法
从结果集中获取一行,并向下移动指针
-
PDOStatement::fetchALL()方法
返回一个包含结果集中所有行的数组
-
PDOStatement::rowCount()方法
返回受上一个sql语句影响的行数
<?php //数据库连接信息 $dsn="mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8"; $username="root"; $password="root"; //创建PDO类饿对象 $pdo =new PDO($dsn,$username,$password); $sql="INSERT INTO shijian VALUES(21,0,0)"; //执行sql语句,并返回受影响的行数 $result=$pdo->exec($sql); echo $result; //获取最后插入成功的记录的ID $id=$pdo->lastInsertId(); echo $id; //设置PDO属性:设置从结果集提取数组的类型为关联数组 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC); $sql1="select * from shijian"; //执行sql语句,返回结果集对象 $pdosta=$pdo->query($sql1); foreach ($pdosta as $arr) { print_r($arr); } //获取查询记录数 echo $pdosta->rowCount();
MVC框架
mvc是模型->视图->控制器的缩写,是一种软件设计典范,用一种业务逻辑,数据,界面显示分离的方法组织代码。在MVC中每个模块只做自己范围内的事情
-
内容总结
以上是互联网集市为您收集整理的PHP学习笔记全部内容,希望文章能够帮你解决PHP学习笔记所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。