PHP基础

PHP基础-知识

PHP基础

1. 新建php模板

a) 进行模板添加界面:

b) 创建新模板

c) 重新打开webstorm,使用新模板创建文件

2. 前期注意事项:

a) 文件名不能使用中文,否则在浏览器中查看的时候会有编译错误
b) 单引号和双引号都能描述字符串
c) 一条语句后必须添加分号,否则编译错误

3. 变量:

a) 变量以$开头 字母/数字/下划线 不能以数字开头
b) 变量区分大小写
c) 示例:
//定义变量必须添加前缀$
$name=”张三”;
$Name=’李四’;
$age=20;

//输出
echo $name;
echo ‘
‘; //换行
echo $Name;
echo ‘
‘;
echo $age;

4. 数据类型:

a) 字符型、整型、浮点型、布尔型、数组、对象、NULL
/1.定义字符串/
$name=’中华人民共和国’;
echo $name;
echo ‘
‘;
/2.定义整型/
$age=20;
echo $age;
echo ‘
‘;
/3.定义浮点型/
$weight=130.5;
echo $weight;
echo ‘
‘;
/4.定义布尔型:如果是false,则默认不会打印,输入的结果是1、0/
$sex=true;
echo $sex;
echo ‘
‘; /6.定义对象/
class Person{
public $name=’lili’;
public $age=20;
};
//创建对象
$per=new Person;
//输出对象的某个属性值
echo $per->name;
//输出整个对象的复杂属性值
var_dump($per);
/7.null:表示一种特殊的数据类型,表示空值,表示没有为该变量设置任何值,null和NULL是一样的/
b) 单引号&双引号区别
A. 当使用双引号定义字符串的时候,如果包含了其它的变量名,也会进行解析
B. 如果使用单引号,如果包含了其它的变量名,只是当成普通字符串进行处理
C. 示例:

  1. 代码:
    $name=’张三’;
    //使用双引号定义字符串并输出
    $str1=”姓名:$name”;
    echo $str1;

echo ‘
‘;
//使用单引号定义字符串并输出
$str2=’姓名:$name’;
echo $str2;

  1. 结果:

c) 索引数组、关联数组(了解)
/定义数组 索引数组/关联数组/
//1.定义索引数组
$arrIndex=array(“张三”,”李四”,”王五”,”赵六”);
/根据索引输入数组中的元素/
echo $arrIndex[1];
echo ‘
‘;
//2.定义关联数组
$arrRelation=array(
‘name’=>’张三’,
‘age’=>20,
‘sex’=>true
);
/php中,关联数组只能通过键值对的方式获取和输出/
echo $arrRelation[‘age’];
echo ‘
‘;
/定义深度数组—-二维数组/
$arrDep=array(
array(
‘name’=>’jack’,
‘age’=>20
),
array(
‘name’=>’rose’,
‘age’=>18
),
array(
‘name’=>’tom’,
‘age’=>16
)
);
echo $arrDep[1][‘name’];
echo ‘
‘;

5. Php中的字符串拼接和几种输出方式:

//1.拼接字符串使用点运算符
$name=’张三’;
echo ‘我的姓名叫:’.$name;

//2.可以使用var_dump输出复杂类型
$arr=array(
‘name’=>’张三’,
‘age’=>20
);
var_dump($arr);

//3.也可以使用print_r进行复杂类型数据的输出
print_r($arr);

6. Php的函数:

//1.定义普通函数
function sayHi(){
echo ‘向你问好’;
}
//调用函数
sayHi();
echo ‘
‘;
//2.带参的函数,参数还可以添加默认值,如果不传入参数,则使用默认值
function sayHiWithName($name=’jack’){
echo $name.’向你问好’;
echo ‘
‘;
}
//调用带参函数
sayHiWithName();
sayHiWithName(‘张三’);

7. Php的分支语句:

a) 条件分支:if/if-else switch-case.与js中的使用方式一致
$time=time();
echo date(‘yy-m-d’,$time);
echo ‘
‘;
$year=date(‘y’,$time);
echo $year;
echo ‘
‘;
if($year % 2==0){
echo ‘是偶数年’;
}
else{
echo ‘是奇数年’;
}
b) 循环分支:
//2.循环语句:for
$arrIndex=array(“张三”,”李四”,”王五”,”赵六”);
//获取数组的长度
$cnt=count($arrIndex);
for($i=0;$i<$cnt;$i++){
echo $arrIndex[$i].’ ‘;
}
//3.循环分支:foreach
foreach($arrIndex as $key=>$value){
echo $key.’ ‘.$value;
//或者:
/echo $key.’ ‘.$arrIndex[$key];/
echo ‘
‘;
}

8. 表单处理:

a) 说明:
 表单name属性的是用来提供给服务端接收所传递数据而设置的,如果没有设置name属性则无法提交数据
 表单action属性设置接收数据的处理程序
 表单method属性设置发送数据的方式
 当上传文件是需要设置 enctype=”multipart/form-data”,且只能post方式
 $_GET接收 get 传值
 $_POST接收 post 传值
 $_FILES接收文件上传
b) 表单代码:



<form action="08-form.php" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="userName"><br>
    密码:<input type="password" name="userPwd"> <br>
    <!--提交文件数据的时候,需要在form中添加对应的属性-->
    选择相片: <input type="file" name="photo">
    <input type="submit" value="提交">
</form>


c) Php代码:
/$_GET接收 get 传值/
/$_POST接收 post 传值/
/$_FILES接收文件上传/
/echo $_GET;
var_dump($_GET);
print_r($_GET);
/

echo $_POST;
var_dump($_POST);
print_r($_POST);

var_dump($_FILES);
/获取图片对象的某个属性/
var_dump($_FILES[‘photo’][‘name’]);

//将上传的图片移动到当前项目的图片文件夹中
move_uploaded_file($_FILES[‘photo’][‘tmp_name’],’../images/self.png’);

9. 文件导入

include:一般用来导入静态html文件
require:一般用于导入php文件

10. 常用php函数:

a) Php中提供了很多内置的函数供我们使用,可以参阅php帮助文档,下面就列举出几个而已。
b) in_array() :是否在数组中
c) count() :计算数组长度
d) array_key_exists ():检测数组中是否存在key

11. php页面的动态渲染

a) 可以在php文件中直接输出html结构代码
b) 也可以在php文件中输出变量,做到动态的渲染结果
c) 注意:当是一个html文件的时候,php代码是不会执行的,会被当成注释来处理,如果文件类型是php,那么就可以解析满足php语法的语句
d) 示例:
<?php
//动态输出数组的数据
$arr=array(
array(
‘name’=>’商品分类’,
‘src’=>’../images/nav0.png’
),
array(
‘name’=>’商品分类’,
‘src’=>’../images/nav1.png’
),
array(
‘name’=>’商品分类’,
‘src’=>’../images/nav2.png’
)
);
//读取数据,转换为html结构
$htmlStr=’

    ‘;
    foreach($arr as $key=>$value){
    $htmlStr.=’
  • ‘;
    $htmlStr.=’‘;
    $htmlStr.=’

    ‘.$value[‘name’].’

    ‘;
    $htmlStr.=’
  • ‘;
    }
    $htmlStr.=’
‘;
echo $htmlStr;
?>

12. 案例:模拟登录:

<?php
header(‘Content-Type:text/html;charset=utf-8’);

//模拟服务器端数据
$arr=array(
    'userName'=>'admin',
    'userPwd'=>'111'
);

//获取用户的表单输入数据
$userName=$_POST['userName'];
$userPwd=$_POST['userPwd'];

//判断
if($arr['userName'] == $userName && $arr['userPwd'] == $userPwd){
    echo '登录成功';
    header('refresh:1;url=http://www.baidu.com');
}
else{
     echo '登录失败';
     header('refresh:1;url=03-login.html');
}

?>

13:网络传输协议

指服务器和客户端间进行通信时的约束和规范,客户端与服务端的数据交互并不是杂乱无章的,需要遵照(基于)一定的规范进行

1. 常见协议

a) HTTP、HTTPS 超文本传输协议
b) FTP 文件传输协议
c) SMTP 简单邮件传输协议

2. HTTP协议

即超文本传输协议,网站是基于HTTP协议的,例如网站的图片、CSS、JS等都是基于HTTP协议进行传输的。HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范

常用请求方法 POST、GET、PUT、DELETE

3. 请求-请求报文:request //response

请求由客户端发起,其规范格式为:请求行、请求头、请求主体。如:

b) 请求报文行: 由请求方式、请求URL和协议版本构成

c) 请求报文头
 Host:localhost请求的主机
 Cache-Control:max-age=0控制缓存(no-cache| no-store)
 Accept:/ 接受的文档MIME类型
 User-Agent:向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识. 浏览器UA 字串的标准格式为: 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息
 Referer:从哪个URL跳转过来的
 Accept-Encoding:可接受的压缩格式
d) 请求报文体:即传递给服务端的数据
注:当以post形式提交表单的时候,请求头里会设置
Content-Type: application/x-www-form-urlencoded,而当以get形式请求时不需要这种设置

4. 响应-响应报文 :

响应由服务器发出,其规范格式为:状态行、响应头、响应主体

a) 状态行:由协议版本号、状态码和状态信息构成
b) 响应头:
 Date:响应时间
 Server:服务器信息
 Content-Length:响应主体长度
 Content-Type:响应资源的MIME类型
c) 响应主体:即服务端返回给客户端的内容
d) 状态码:

常见的有200代表成功、304文档未修改、403没有权限、404未找到,500 服务器错误
说明:客户端与服务器在进行数据传输的时候都是以字节形式进行的,可以理解成是以文本形式传输,这时浏览器就需要明确知道该怎么样来解析这些文本形式的数据,MIME就是明确告知浏览器该如何来处理

14:AJAX编程:

即 Asynchronous Javascript And XML,AJAX 不是一门的新的语言,而是对现有持术的综合利用。本质是在HTTP协议的基础上以异步的方式与服务器进行通信。

1. 异步:指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步。其优势在于不阻塞程序的执行,从而提升整体执行效率。XMLHttpRequest可以以异步方式的处理程序。

2. XMLHttpRequest说明

a) 作用:浏览器内建对象,用于在后台与服务器通信(交换数据) ,由此我们便可实现对网页的部分更新,而不是刷新整个页面

3. 请求:

一个简单的请求组成(以post为例):var xhr=new XMLHttpRequest();

1. 请求行

xhr.open(‘post’,’05-XMLHTTPRequest-test.php’);—-post

xhr.open(‘get’,’05-XMLHTTPRequest-test.php? name=rose&age=20’);—get

2. 请求头

xhr.setRequestHeader(‘Content-Type’,’application/x-www-form-urlencoded’);–post
get:no —get

3. 请求体

xhr.send(null); —get
xhr.send(“name=rose&age=20”);—post

4. Get和post请求的区别

 Get不需要设置请求头
 Get的数据传递通过url进行传递,而post在send方法中传递

4. 响应

HTTP响应是由服务端发出的,作为客户端更应关心的是响应的结果。由于服务器做出响应需要时间(比如网速慢等原因),所以我们需要监听服务器响应的状态,然后才能进行处理

1. onreadystatechange是Javascript的事件的一种,其意义在于监听XMLHttpRequest的状态

2. readyState:响应状态,返回XMLHTTP请求的当前状态

readyState 状态 状态说明
(0)未初始化 此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行为初始化作好准备。值为0表示对象已经存在,否则浏览器会报错--对象不存在。
(1)载入 此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数(method,url,true)完成对象状态的设置。并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。
(2)载入完成 此阶段接收服务器端的原始响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。
(3)交互 此阶段解析接收到的服务器端响应数据。即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。状态3表示正在解析数据。
(4)完成 此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。

3. status:响应码-常用响应码

 HTTP: Status 200 – 服务器成功返回网页
 HTTP: Status 404 – 请求的网页不存在
 HTTP: Status 503 – 服务不可用

5. 简单案例

6. GET和POST请求方式的差异

a) GET没有请求主体,使用xhr.send(null)
b) GET可以通过在请求URL上添加请求参数
c) POST可以通过xhr.send(‘name=itcast&age=10’)
d) POST需要设置

e) GET效率更好(应用多)
f) GET大小限制约4K,POST则没有限制

-------------本文结束感谢您的阅读-------------