PHP学习笔记.docx

上传人:b****6 文档编号:4688226 上传时间:2022-12-07 格式:DOCX 页数:47 大小:2.01MB
下载 相关 举报
PHP学习笔记.docx_第1页
第1页 / 共47页
PHP学习笔记.docx_第2页
第2页 / 共47页
PHP学习笔记.docx_第3页
第3页 / 共47页
PHP学习笔记.docx_第4页
第4页 / 共47页
PHP学习笔记.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

PHP学习笔记.docx

《PHP学习笔记.docx》由会员分享,可在线阅读,更多相关《PHP学习笔记.docx(47页珍藏版)》请在冰豆网上搜索。

PHP学习笔记.docx

PHP学习笔记

PHP基本语法:

1.html和php混合编程;

2.一个语句以;(封号)结束;

3.如何定义一个变量,和变量如何使用;

定义一个变量以$符号打头

$a=1;//定义了一个变量$a,变量的名称是$a而不是a初始值是1

4.变量的类型不是固定不变的,而是根据上下文的环境而决定的。

运行时决定变量的类型。

在运行的一瞬间才知道此变量的类型。

不是浏览器决定的,而是由服务器端的apache服务器决定的,在深入点是由apache载入的php处理模块决定的。

$a=1;//$a是一个整型变量

$a=1.1;//$a是一个小数类型了

可以用var_dump(变量名)去打印出变量的类型和数值

5.PHP是弱数据类型编程语言;

6.PHP区分大小写;

$i和$I是不一样的变量。

7.PHP的变量名称,应该以字母或者下划线开头,而不应该以数字开头。

也不要用特殊的字符开头,关键字也不要使用(不推荐使用)

一个程序就是一个世界

不论是那种程序语言,变量是其基本组成单位。

Parse:

解析

error:

错误

syntax:

语法错误

PHP数据类型:

三大类

1基本数据类型

整型,浮点数(包含了单精度和双精度),布尔类型。

2符合数据类型

数组(array),对象(object)

3特殊数据类型

null,资源类型(resource)

何为定义一个变量

php

$a=10;//相当于定义了一个变量$a,并赋值9

?

>

什么叫给变量赋值

php

$a=10;

$a=8;//赋值,表示用新的值替换了旧的值

?

>

基本数据类型详解:

整型:

1可以用十进制,也可以用十六进制(0x打头)或者八进制(0打头)

2php不支持无符号数,所以说php中的整型都是有符号数。

3在php中一个整型一般占用4个字节(与平台还有一定关系),一个字节占用8bit,可以用echoPHP_INT_SIZE来查看本机器上一个整型所占的字节数。

PHP_INT_MAX来查看本机器能表示的最大整型数据。

表示范围-2147483647~2147483647。

如果一个数超过了整型的表示范围的时候,php会自动升级为float类型

布尔类型:

∙布尔值FALSE

∙整型值0(零)

∙浮点型值0.0(零)

∙空白字符串和字符串"0"

∙没有成员变量的数组

∙没有单元的对象

∙特殊类型NULL(包括尚未设定的变量)

∙所有其它值都被认为是TRUE(包括任何资源)。

浮点数:

浮点数的字长和平台相关,通常最大值是1.8*e308并具有14位十进制数字的精度。

*精度从左边的第一个非0的数字算起

字符串:

●字符串是由字符组成的,一个字符占用一个字节。

●字符串的大小问题:

原理上可以使无限制大小的。

和内存有关。

●字符串单引号和双引号的问题:

☺输出的区别

单引号中的变量会被当作字符串直接输出

双引号中的变量会被变量的值替换而输出

☺解析的却别

单引号会解析单引号的为转义字符,双引号会解析双引号的为转义字符,其他的组合都会原样输出。

php表达式:

任何有值的东西anythingthathasavalue

php运算符:

Ø算数运算符:

注意:

如果除不尽的时候保留14位

涉及到字符变量的算术运算:

在处理字符变量的算术运算的时候,PHP沿用了Perl的习惯,而非C语言,在Perl中’Z’+1将得到’AA’,而在C中,'Z'+1将得到'['{ord('Z')==90,ord('[')==91)。

左运算符:

-=

+=

/=

%=

.=

Ø++和--运算符:

Ø比较运算符:

!

=只有值不相等则真,和<>是等价的,而!

==只要值不相等或者类型不相等则为真。

Ø逻辑运算符:

Ø运算符优先级:

and和&&都表示与,他们的却别是什么?

主要体现在优先级上面

三元运算符

表达式1?

表达式2:

表达式3

如果表达式1的结果为真,

php

$a=90;

$b=180;

$c=$a>$b?

10:

12;

echo$c;

?

>

字符串运算符:

当两个变量是基本数据类型,用.连接的时候,就表示把他们的内容拼接,在拼接的时候都会按照字符串来处理。

$a="hello,world";

$b="okok";

$c=$a.$b;//把$a表示的内容和$b的内容拼接在一起

//只要用.连接了,他就会把两边的东西当成字符串来处理。

echo$c;

类型运算符:

instanceof用于判断某个变量是否是哪个对象数据类型,也就是类数据类型

运算符优先级列表:

 

PHP进阶篇:

只有php代码在服务器端执行,其他的都会在浏览器端执行。

HTTP协议:

1.http协议是建立在tcp/ip协议基础上的。

2.所有的web传出都是建立在http协议之上的

3.全称:

超过文本传输协议。

基本结构:

请求行

消息头

消息体(实体内容)

GET/test/hello.htmlHTTP/1.1

Accept:

*/*[表示客户端可以接受任何数据类型]

Referer:

http:

//localhost:

80/news.html[表示我从哪里来的,以后用于防盗链技术的重点属性]

Accept-Language:

zh-cn[页面语言]

User-Agent:

Mozilla/4.0[告诉服务器我的浏览器的内核,操作系统]

Accept-Encoding:

gzip,deflate[表示接受什么样的数据压缩格式]

Host:

localhost:

80[主机:

80]

Connection:

Keep-Alive[我是一个长链接]

需求,我们如何在服务器获得浏览器的相关信息呢:

$_SERVER

php

echo"

";

print_r($_SERVER);

echo"

";

?

>

如上的path路径是服务器端得path路径

因为客户端向服务器只发送了最上面的几条数据,其他的信息都是服务器补充进去的了。

以上用的比较多的是:

HTTP_HOST

REMOTE_ADDR访问此页面的浏览器的ip

DOCUMENT_ROOT:

apache的主目录

REQUEST_URL:

获取请求的资源名称

http请求的种类:

get/post

get和post的区别:

1.安全性,get请求的数据会显示在地址栏上,也就是在http协议的请求行中,而post请求发送的数据放在http协议中的消息体里面的。

2.提交的数据的大小。

说明:

ttp协议本身没有限制书得大小,主要是浏览器在对get/post的数据量的请求做了限制。

get请求的大小:

2k+35,post请求没有限制。

3.get请求更利于收藏夹收藏此页面。

应用:

Date:

[请求页面的当前时间]

Content-Length:

452[表示会送的数据用452个字节]

Content-Type:

text/html[文档的类型]

Cache-control:

private[要缓存]

对状态码的说明:

举例说明,http响应的实际用处:

302:

表示移动到了新的地址。

使用:

我们现在希望,当我们访问a.php页面时,让其自动重定向到b.php页面。

方案1.header(“Location:

b.php”);

此句话会向浏览器发送一个302状态码,告诉浏览器重新访问b.php页面。

header()函数:

说明:

可以改变一个http头。

302状态码也可以让其跳转到外网。

404码:

表示页面不存在了。

304码:

告诉浏览器,资源没有修改,无需重取。

缓存机制。

举例说明:

下面是一个比较全面的http响应:

Last-Modified:

浏览器请求的资源最新更新时间

通过http响应,控制浏览器间隔一定时间去跳转

php

header(“Refresh:

3;url=”);//隔三秒

?

>

这三个用来联合控制页面是否要被缓存

http响应控制浏览器缓存,现在我们禁用缓存:

不管刷新还是回车键,都要去的最新的信息。

php

//通过header来禁用缓存

header("Expires:

-1");

header("cache_Control:

no-cache");

header("Pragma:

no-cache");

echo"hellocache";

?

>

http实际应用:

文件下载:

文件基本知识:

类型文件分为两大类:

文本文件和二进制文件(图片视频音频)

操作原理:

判断文件是否存在:

存在:

打开文件,$fp=fopen(“a.txt”,”r+”);

代码:

php

//参数说明

//$file_name:

文件名

//$file_sub_dir下载文件的子路径"/xxx/xxx"

functiondown_file($file_name,$file_sub_path){

//先死后活

//演示图片

//如果文件名是中文,需要一定的转码

//$file_name="girl.jpg";

$file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_path.$file_name;

//$file_name=iconv("utf-8","gb2312",$file_name);//中文处理

if(!

file_exists($file_path)){

echo"文件不存在";

return;

}

//1.打开文件

$fp=fopen($file_path,"r");

//获取文件大小

$file_size=filesize($file_path);

//如果文件数据很大,所以是分批返回。

header("Content-type:

application/octet-stream");

header("Accept-Ranges:

bytes");//按字节返回

header("Accept-Length:

$file_size");//返回文件的大小

//这里是对

header("Content-Disposition:

attachment;filename=".$file_name);

//向客户端回送数据

$buffer=1024;

$file_count=0;

//这句话用于判断文件是否结束,

while(!

feof($fp)&&($file_size-$file_count>0)){

$file_date=fread($fp,$buffer);

$file_count+=$buffer;

//把部分数据会送给浏览器

echo$file_date;

}

//关闭文件

fclose($fp);

}

down_file("girl.jpg","/http/down/");

?

>

 

优秀代码:

代码的健壮性

代码的扩展性

代码的安全性

代码的效率

 

PHP数据库编程:

php有三种方式来操作mysql数据库

①mysql扩展库

②mysqli扩展库

③pdo技术

mysql扩展库和mysql数据库的区别:

CURD操作

我们的搭建环境:

启用mysql扩展库,在php.ini文件中。

createtableuser1(

idintprimarykeyauto_increment,

namevarchar(32)notnull,

passwordvarchar(64)notnull,

emailvarchar(128)notnull,

agetinyintnotnull

);

showvariableslike‘%char%’查看客户端的编码格式。

便于中文的插入。

可以设置setcharacter_set_results=gbk和setcharacter_set_client=gbk来修改乱码。

或者直接setnamesgbk;就ok了

取得资源的方式:

mysql_fetch_row($res);返回索引数组,推荐使用

mysql_fetch_assoc($res);返回关联数组

mysql_fetch_array($res);返回索引数组和关联数组

mysql_fetch_object($res);返回一个对象,把一行数据当作一个对象返回。

mysql_query():

此方法如果是dql语句,再返回结果集(资源集),如果是dml语句,则会返回一个bool值。

删除语句很特殊,如果没有删除即删除的记录数为0,但它的执行结果是正确的。

为了开发效率,我们现在可以封装MySQLHelper.class.php

注意:

dml语句可以完成所有的没有返回结果语句的SQL语句。

题目:

请编写一个函数,可以结构一个表明,然后把该表的表头和信息显示在网页上。

使用mysqli扩展库操作数据库:

mysqlimprove的意思:

mysql扩展库的增强版。

mysql扩展库和mysqli扩展库的比较:

2.mysqli的稳定性和安全性,效率有所提供。

3.mysqli支持面向对象,同时也提供了面向过程的变成风格。

mysqli快速入门:

从user1中读取数据显示到网页上;

在mysqli扩展库中也提供了四种方式获取mysqliresult:

mysqli_result:

:

fetch_assoc<==>mysql_fetch_assoc

mysqli_result:

:

fetch_row<==>mysql_fetch_row

mysqli_result:

:

fetch_array<==>mysql_fetch_array

mysqli_result:

:

fetch_object<==>mysql_fetch_array

mysqli释放结果集有三种方式:

voidmysqli_result:

:

free();

voidmysqli_result:

:

close();

voidmysqli_result:

:

free_result()

使用原则是尽量晚创建,尽量早释放。

✪mysql的sql语句特别说明:

如果操作的字段类型是string类型的,则要求必须用’’包起来

如果操作的字段类型是数值型,则可以用’’包起来,数据库有转化。

mysqli增强功能

批量执行dml语句:

$sqls=”sql1;sql2;sql3;……”;

mysqli:

:

multi_query($sqls);

可以混合使用delete、update、insert。

批量执行dql语句:

mysqli:

:

multi_query($sqls);

mysql事务处理:

事务:

用于保证数据的一致性。

$mysqli->autocommit(false);

//内部自己做了一个保存点

$sql1="updateaccountsetbalance=balance-2whereid=1";

$sql2="updateaccount2setbalance=balance+2whereid=2";

$a=$mysqli->query($sql1);

$b=$mysqli->query($sql2);

if(!

$a||!

$b){

echo"失败,回滚".$mysqli->error;

$mysqli->rollback();//如果失败,则用内部的保存点去回滚

}else{

//提交事务

$mysql->commit();

}

补充:

控制台中也可以来操作事务:

开启事务:

starttransaction

作保存点:

savepoint保存点名称

回滚操作:

rollbackto保存点名称

提交事务:

commit

保存点可以做多个,但是如果提交后,做的所有的保存点都会被吞掉。

 

事务的特点:

acid:

原子性,一致性,隔离性,持久性

mysqli扩展库的预处理技术:

mysqli_stmt

问题的需求,要添加50个用户。

方案1:

for循环向数据库中添加50个用户

方案2:

批量插入,使用$mysqli->multi_query($sqls);

预编译发生在数据库端。

方案3:

预编译:

速度快而且可以防止sql注入漏洞

//添加

//创建对象实例

$mysqli=newmysqli("localhost","root","root","test");

$mysqli->query("setnamesutf8");

//创建预编译对象

$sql="insertintouser1(name,password,email,age)values(?

?

?

?

)";

$mysqli_stmt=$mysqli->prepare($sql);

//绑定参数

$name="消遣";

$password="xiaoqian";

$email="xiaoqian@";

$age="10";

//参数绑定,此处类型和数据都要对应关系

$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);

//执行操作

$b=$mysqli_stmt->execute();

这样我们就可以多次插入,以后的插入语句只需要传递参数,就像下面这样,优点是执行速度会快很多,而且防止了sql注入的问题:

$name="消遣";

$password="xiaoqian";

$email="xiaoqian@";

$age="10";

//参数绑定,此处类型和数据都要对应关系

$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);

//执行操作

$b=$mysqli_stmt->execute();//返回值是一个bool型。

//查询

$sql="selectid,name,emailfromuser1whereid>?

";

$mysqli_stmt=$mysqli->prepare($sql);

$id=5;

//绑定参数

$mysqli_stmt->bind_param("i",$id);

//绑定结果集

$mysqli_stmt->bind_result($id,$name,$email);

//执行

$mysqli_stmt->execute();

while($mysqli_stmt->fetch()){

echo"
--$id--$name--$email";

}

//释放结果

$mysqli_stmt->free_result();

//关闭预编译命令

$mysqli_stmt->close();

//关闭连接

$mysqli->close();

案例需求:

获得一个表的信息:

编写一个函数,接受表明,把表头和表的数据显示在页面。

超全局变量:

1.$_GET

2.$_POST

3.$_REQUEST

4.$_SERVER

5.$_ENV

6.$_FILE

7.$_COOKIE

8.$_SESSION

9.$_GLOBALS

$_GET方式:

解决乱码的问题:

方案一:

奇数汉字字符乱码:

奇数字符串后面加一个全角空格,在服务器拿到的时候用trim()去掉两头的空格。

方案二:

urlencode()方式

客户端:

$str=urldecode(“北京好”);然后name=$str;

服务器:

可以这样就受,也可以直接接受。

$str=urldecode($_GET(‘name’));

表单数据建议使用post而不要使用get方式

判断get获得的是否为空:

If(empty($_GET[‘city’])){

Echo“没有收到数据“;

}else{

Echo$_GET[‘city’];

}

$_POST提交数据:

举例,接受表单信息:

界面:

用户注册

用户名:


密 码:


性 别:


你喜欢什么:

唱歌

游泳

打游戏

学习

玩电脑

骑车

你的所在地:

北京

西安

上海

哈密


个人介绍:


你选的图片

<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1