PHP
PHP的输出
<?php
echo "你好";
echo("你好");
print("你好");
print "hello";
var_dump("接触PHP");//代码调试使用这个
定义变量
php是弱引用语言,所以用起来比较随意。
数据类型
数组
1、索引数组 下标是数字叫做索引数组
2、关联数组 下标是字符串叫关联数组 (类似于ECMA6的map类型)
3、全局数组
$_GET 接收通过get提交过来的所有的数据
_POST 接收通过post提交过来的所有的数据
数组中的索引数组和关联数组可以相互结合,结合成多维数组。
数组的长度 count($cars) 返回数组的长度
ajax
ajax 异步的 javascript和 xml(数据传输格式)
异步的 javascript 和 数据传输
【注】ajax是前后端数据交互的搬运工,都可以异步执行。
xml数据传输格式(
大型的门户网站 新浪、网易、凤凰网)
优点:
1、种类丰富
2、传输量非常大
缺点:
1、解析麻烦
2、不太适合轻量级数据
json数据传输格式(字符串)
95%移动端应用。
优点:
1、轻量级数据
2、解析比较轻松
缺点:
1、数据种类比较少
2、传输数据量比较小
JSON.parse()
JSON.stringify()
【注】任何一个程序都是由很多个小程序组成的。
【注】用来描述一个程序运行状态。
同步 阻塞,当前程序运行,必须等前一个程序运行完毕以后,才能运行。
异步 非阻塞,当前程序运行,和前面程序的运行没有任何关系。
ajax异步加载数据
//1、创建ajax对象
var xhr = new XMLHttpRequest();
//2、调用open
/*
第一个参数: 请求方式 get post
第二个参数:url
第三个参数: 是否异步
true 异步
false同步
*/
xhr.open("get", "1.txt", true);
//3、调用send
xhr.send();
//4、等待数据响应
/*
readystatechange 事件类型
xhr.readyState 发生变化的时候调用
0 调用open方法之前
1 调用你send方法之后,发送请求
2 send方法完成,已经接受到所有的响应内容
3 正在解析下载到的数据
4 解析完成
*/
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
//判断本次下载的状态码都是多少
if(xhr.status == 200){
alert(xhr.responseText);
}else{
alert("Error:" + xhr.status);
}
}
}
ajax对象兼容:(if else)
//ajax对象兼容
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
ajax对象兼容:(try)
//1、创建ajax对象
var xhr = null;
try{
xhr = new XMLHttpRequest();
}catch(error){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
封装ajax:
状态码:
200——交易成功
404——没有发现文件、查询或URl
401——请求授权失败
mysql
PHP连接数据库
<?php
header("Content-type:text/html;charset=utf-8");
/*
链接数据库 天龙八部
*/
//1、链接数据库
/*
第一个参数:链接数据库的IP/域名
第二个参数:用户名
第三个参数:密码
*/
$link = mysql_connect("localhost", "root", "123456");
//2、判断是否连接成功
if(!$link){
echo "链接失败";
exit; //终止后续所有的代码
}
//3、设置字符集
mysql_set_charset("utf8");
//4、选择数据库
mysql_select_db("yyy");
//5、准备sql语句
$sql = "SELECT * FROM student";
//6、发送sql语句
$res = mysql_query($sql);
//设置表头
echo "<table border = '1'>";
echo "<tr><th>学生学号</th><th>学生姓名</th><th>英语成绩</th><th>数学成绩</th><th>语文成绩<th></tr>";
//7、处理结果
while($row = mysql_fetch_assoc($res)){
echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td><td>{$row['english']}</td><td>{$row['math']}</td><td>{$row['chinese']}</td></tr>";
}
echo "</table>";
//8、关闭数据库
mysql_close($link);
?>
【注】保证id不重复,设置id为这个表的主键(PrimaryKey) 选择id为AI(自动增加)
网络协议
计算机网络
ISO 7层的网络分层
通用 5层的网络分层
网络数据在互联网进行传输,遵从传输规则,叫做网络传输协议。
TCP:面向链接协议。
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。(快递,外卖)
【注】如果需要传输,就先建立链接,开始传输数据,当数据传输结束,就直接断开链接。如果再要进行传输,重新建立链接。
三次握手建立连接,四次挥手断开连接
优点: 缺点:
1、安全 1、传输效率低
2、准确度非常高 2、耗资源
UDP:无连接协议
UDP 是User Datagram Protocol的简称, 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 (适用于对于及时性要求高,但是对于数据准确度要求不高)
传输数据:直接传,根本不管是否收到数据。
缺点: 优点:
1、不安全 1、及时性非常高
2、准确度非常低 2、消耗资源少
3、经常丢包 【注】视频聊天。
HTTP(无状态的协议)
cookie
cookie概念
回话跟踪技术: 在一次会话从开始到结束的整个过程,全程跟踪记录客户端的状态(例如:是否登录、购物车信息、是否已下载、是否 已点赞、视频播放进度等等)
cookie的语法
格式: name=value;[expires=date];[path=path];[domain=somewhere.com];[secure],
name 键
value 值 都是自定义
【注】后续中括号的内容(中括号是我加的),都是可选项。
【注】火狐支持本地加载的文件缓存cookie,谷歌只支持服务器加载文件缓存cookie
cookie特点
1、可以设置过期时间
2、最大可以存储4KB,每一个域名下最多可以存储50条数据(不同的浏览器,有偏差)
【注】只能字符串。一般只存储一些重要的信息。登录,购物车信息,是否点赞,视频播放进度等。
/*
encodeURIComponent 将中文编译成对应的字符
decodeURIComponent 将对应的字符编译成中文
*/
//设置cookie
document.cookie = 'username=' + encodeURIComponent("钢铁侠");
//获取cookie
alert(decodeURIComponent(document.cookie));
expires:过期时间,如果没有声明,则为浏览器关闭后即失效。声明了失效时间, 那么时间到期后方能失效。
必须填写,日期对象
【注】系统会自动清除过期的cookie。
path 限制访问路径
如果不去设置,默认是加载当前.html文件的路径
【注】我们设置的cookie的路径,和加载当前文件的路径,必须一致,如果不一致,cookie访问失败。
domain 限制访问域名
如果不去设置,默认是加载当前.html文件的服务器域名/ip
【注】如果加载当前文件域名和设置的域名不一致,设置cookie失败。
secure
如果不设置,设置cookie,可以通过http协议加载文件设置
也可以通过https协议加载文件设置
【注】设置这个字段以后,只能设置https协议加载cookie.
https 证书认证协议
http
闭包
闭包的特点:
1、函数嵌套函数
2、内部函数引用外部函数到的变量或者形参
3、被引用的变量或者形参就不会被垃圾回收机制所回收,常驻内存。
好处:
1、希望一个变量常驻在内存当中
2、避免全局变量污染
3、可以声明私有成员
可以从一个域中取出原本访问不到的变量去使用
模块化开发
1.模块化的写法-原始写法
模块就是实现特定功能的一组方法。
只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块。
比如:tool.js
缺点:"污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系。
2.Javascript模块化的写法-对象写法
把模块写成一个对象,所有的模块成员都放到这个对象里面。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ho7uJOhP-1605075741267)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1604630197591.png)]
3.Javascript模块化的写法-立即执行函数写法(闭包)
使用"立即执行函数"(IIFE),可以达到不暴露私有成员的目的。
外部代码不能访问内部变量
4.Javascript模块化的写法-放大模式
如果一个模块很大,必须分成几个部分,或者一个模块需要继承另一个模块,这时就有必要采用"放大模式"(augmentation)。
5.Javascript模块化的写法-宽放大模式
在浏览器环境中,模块的各个部分通常都是从网上获取的,有时无法知道哪个部分会先加载。如果采用上一节的写法,第一个执行的部分有可能加载一个不存在空对象,这时就要采用"宽放大模式"。
AMD
AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
require.js
(1)实现js的异步加载,避免网页失去响应
(2)管理模块之间的依赖性,便于代码的编写和维护
<script src = 'js/require.js' defer async = 'true' data-main = 'js/main.js' charset="big5">//defer IE下的异步加载 async = 'true' 火狐和谷歌浏览器下的异步 入口文件
data-main属性的作用是,指定网页程序的主模块。在上例中,就是js目录下面的main.js,这个文件会第一个被require.js加载。由于require.js默认的文件后缀名是js,所以可以把main.js简写成main。
主模块的写法
主模块依赖于其他模块,这时就要使用AMD规范定义的的require()函数。
require(["nav","slide","data"],function(nav,slide,data){}
require()函数接受两个参数。第一个参数是一个数组,表示所依赖的模块,上例就是[“nav”,“slide”,“data”],即主模块依赖这三个模块;第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。
require()异步加载nav,slide,data,浏览器不会失去响应;它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题。
模块化加载
require.config({
paths:{
"jquery": "jquery-1.11.3",
"jquery-cookie": "jquery.cookie",//设置依赖关系 jquery-cookie是通过jQuery开发的
"nav": "nav",
"slide":"slide",
"data":"data"
}
)}
使用require.config()方法,我们可以对模块的加载行为进行自定义。require.config()就写在主模块(main.js)的头部。参数就是一个对象,这个对象的paths属性指定各个模块的加载路径。
require.js要求,每个模块是一个单独的js文件。这样的话,如果加载多个模块,就会发出多次HTTP请求,会影响网页的加载速度。因此,require.js提供了一个优化工具,当模块部署完毕以后,可以用这个工具将多个模块合并在一个文件中,减少HTTP请求数。
AMD模块的写法
模块必须采用特定的define()函数来定义。如果一个模块不依赖其他模块,那么可以直接定义在define()函数之中。 如果这个模块还依赖其他模块,那么define()函数的第一个参数,必须是一个数组,指明该模块的依赖性。
define(["jquery"],function($){})
AMD规范
AMD规范:(客户端/浏览器)
声明:
define(function(){
//代码
return {
outA: showA,
outB: showB
}
})
引入:(异步执行)
require("moduleA.js", function(moduleA){
//这里的代码。模块引入之后执行。
moduleA.putA();
moduleA.outB();
})
alert("hello world");
CommonJS规范(服务器)编写代码
声明:
module.exports = {
outA: showA,
outB: showB
}
引入:(同步执行)
var moduleA = require('moduleA.js');
moduleA.outA();
moduleA.outB();