php基础

既然要用到php那么我先来说这个php的基础,结构,承担的这个角色
注意文件夹名字包括文件的名字一定要用这个英文,不然会出现未知的错误。–很恶心

1. 变量

  1. 变量以$开头 字母/数字/下划线 不能以数字开头
  2. 大小写敏感(区分大小写)

2.数据类型

字符型、整型、浮点型、布尔型、数组、对象、NULL
code block:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//字符串类型..
$username="wangwu";
echo $username;
//整型
$age=11;
echo $age;
echo '<br/>';
//浮点型。
$money=10.11;
echo $money;
echo '<br/>';
//布尔类型.
$flag=false;
echo $flag; //输出1,1代表true ,false 没有任何输出.

索引数组

//数组,定义数组。
两种类型的数组,,
1.一种是关联数组

2. 一种是索引数组
1
2
3
4
5
6
7
8
$array=array(0,1,3,4);
/*用来输出数组里面详细的信息。*/
/* var_dump($array);*/
/*索引数组可以根据索引去取值.*/
echo $array[2];
//关联数组
$array=array("username"=>"zhangsan","age"=>11);
echo $array['username'];

3.内容输出

echo:输出简单数据类型,如字符串、数值
print_r():输出复杂数据类型,如数组
var_dump():输出详细信息,如对象、数组(了解)

4.运算符

基本与Javascript语法一致
$chat1=”hello”;
$chat2=’world’;
echo $chat1.$chat2;
. (点)号表示字符串拼接符,Javascript中为+号

5.函数

与Javascript基本一致
函数名对大小写不敏感
默认参数(了解即可)

1
2
3
4
5
6
7
8
9
10
11
/* function sayHello(){
echo 'ahaaha';
}
sayHello();*/
/**
默认参数。
*/
function sayHello($person="小明"){
echo '你好'.$person;
}
sayHello("小猪");

6.分支、循环语句

与Javascript基本一致

1
2
3
4
5
6
7
8
9
//遍历数组
//索引数组遍历
$array=array("1","2","33","44");
//获取到数组的长度。 count() 用来获取php 的数组的长度
$count=count($array);
for($i=0;$i<$count;$i++){
echo $array[$i];
}

遍历关联数组

1
2
3
4
5
6
7
$array2=array("username"=>"lizhonghua","desc"=>"家里在卖中华");
foreach($array2 as $key=>$val){
echo $key;
echo "=====";
echo $val;
echo "<br>";
}*/

二维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
$array3=array(
array("username"=>"zhangs","age"=>28),
array("username"=>"lisi","age"=>36)
);
for($i=0;$i<count($array3);$i++){
foreach($array3[$i] as $key=>$val){
echo $key;
echo "====";
echo $val;
}
echo "<br>";
}

7.常用PHP函数

1
2
3
4
5
6
7
8
9
in_array() 是否在数组中
count() 计算数组长度
array_key_exists 检测数组中是否存在key
array_key_exists('admin'前面是查询的内容, $users后面这个是数组)
file_get_contents读取文件;输出的这个东西是一个字符串
var_dump 输出数组的详细信息
print_r 输出数组;
$files = $_FILES['upload']['tmp_name'];
move_uploaded_file($files, './demo.jpg');

注意:需要知道更多的查找W3C

8.表单处理

html中的设置:
表单name属性的是用来提供给服务端接收所传递数据而设置的
表单action属性设置接收数据的处理程序(在我们这个中就是某个目录下的.php 文件)
表单method属性设置发送数据的方式
当上传文件是需要设置 enctype=”multipart/form-data”,且只能post方式

php 接受时候用的函数
例如点击html文件中a标签

1
<a href="01demo.php?username=zhangsan&age=12">get 方式提交</a>

php文件中的处理
$_GET接收 get 传值

1
2
$username=$_GET["username"];(后面的这个是你传过去的变量)
echo $username;(响应给html在页面就会输出这个东西)

$_POST接收 post 传值
$_FILES接收文件上传

1
2
$data=file_get_contents("jsonp.txt");
echo $data;

在这里就不多讲了,后面还会说起这个东西

wamp 介绍

这个工具是这个系列主要使用的

Windows + Apache + Mysql + PHP,首字母组合。集成安装环境,即在window下的apache、php和mysql的服务器软件。
其中包含了三部分
Apache: Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
MySQL:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
PHP:php 的运行环境。

1.安装WampServer

安装wampserver,和普通软件安装无差别,除指定安装路径外,其它默认安装

2.管理HTTP服务

配置apahce 请在这个目录.
C:\wamp\bin\apache\Apache2.2.21\conf(路径根据你安装的)
任务图标 绿色为正常启动状态
通过图形控制台可以启动、重启、停止所有服务
(安装后运行再右下角会出现程序的小图标,单击就会出现菜单项)

注意事项

  1. 检查网络是不是通的 ping 对方IP
  2. 检查防火墙是否开启,如果开启将不能正常被访问
  3. 检查访问权限 Allow from all
    C:\wamp\bin\apache\Apache2.2.21\conf(路径根据你安装的)
    打开httpd.conf这个文件夹
    在第235 行添加 Allow from all
  4. 理解默认索引
  5. 确保端口没有被其它程序占用
  6. “#”表示注释
  7. 修改配置要格外小心,禁止无意修改其它内容

3配置根目录

网站根目录是Web服务器上存放网站程序的空间,可通过修改配置文件自定义,
如E:/www (简单的说就是我们做的网站要存放在这个文件夹)

具体步骤:

  1. 在wampserver安装目录下
    bin\apache\Apache2.2.21\conf\httpd.conf
    默认访问的是c://wamp/www/(也有不一样的)

  2. 设定根目录,查找并修改(默认地178行)
    code block:
    DocumentRoot "D://wamp/www/"
    例如 DocumentRoot "E:/www/"
    这样我们就指定好了存放网站的根目录

  3. 配置根目录,查找 205行
    改为

  4. 修改完后,并不能立即生效,需要重启Apache
    注:可以指定任意目录为根目录

4.网站部署

将我们制作好的网页拷贝到配置好的根目录下,浏览器访问127.0.0.1即可。

5 配置虚拟主机

在一台Web服务器上,我们可以通过配置虚拟主机,然后分别设定根目录,实现对多个网站的管理。
具体步骤如下:

  1. 开启虚拟主机辅配置,在httpd.conf 中找到
    在第469行我们可以看到

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

去掉第二句话的#这样我们才能配置虚拟的主机

  1. 配置虚拟主机,打开conf/extra/httpd-vhosts.conf(也是在这个目录中)
    1
    2
    3
    4
    5
    6
    7
    8
    <VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "d:/www/"
    ServerName aichen.com
    ServerAlias www.aichen.com
    ErrorLog "logs/dummy-host.example.com-error.log"
    CustomLog "logs/dummy-host.example.com-access.log" common
    </VirtualHost>

分别修改以下三项
DocumentRoot “E:/www/example”
ServerName “example.com”
ServerAlias “www.example.com”
其它项无需指定。
修改成上的上面我们配置完HOSTS文件就可以直接用www.aichen.com输入在地址栏中就可以显示我们的文件夹。。这个文件夹显示的内容就是我们这个根目录的文件

  1. 修改DNS(hosts)文件
    打开C:\Windows\System32\drivers\etc\hosts(这个目录是固定)
    127.0.0.1 后面写的就是你的那个网站具体的格式你可以看你原来的那个文件是怎么你就怎么

重启Apache(必须的)

浏览器访问www.example.com

了解基础部分的相关概念

软件的基本架构

  1. C/S: Client Server,如:FoxMail qq , 263 即时通讯需要去下载一个安装包,客户端程序需要自己去编写。
  2. B/S: BrowserServer(需要打开浏览器,通过浏览器访问的软件)
    天猫 ,世纪佳缘网等一些网站。

bs 架构与cs 架构的区别:

CS 架构:
    - 升级麻烦
    - 开发成本高
    - 性能快
BS 架构
    - 升级方便
    - 开发成本低
    -  性能要慢一点

客户端

具有向服务器 索取服务能力的终端,如比如手机、电脑等,通过安装不同的客户端软件,可以获取不同的服务,比如通过QQ获得即时通讯服务、通过迅雷获得下载服务等。
常见的客户端软件: 浏览器、QQ、迅雷、Foxmail等。
以浏览器为宿主环境,结合 HTML、CSS、Javascript等技术,而进行的一系列开发,通常称之为 前端开发

服务器

服务器就是一个软件装在一台计算机里头

1. 服务器类型

按照不同的划分标准,服务可划分为以下类型:

  1. 服务类型可分为:文件服务器、数据库服务器、邮件服务器,Web 服务器等;
  2. 操作系统可分为:Linux服务器、Windows服务器等;
  3. 应用软件可分为 Apache服务器、Nginx 服务器、IIS服务器、Tomcat服务器、Node服务器等。

2. 服务器软件

使计算机具备提供 某种服务能力的应用软件,称为服务器软件,通过安装相应的服务软件,然后进行配置后就可以使计算具备了提供某种服务的能力。
常见的服务器web 服务器软件有:

  • web 服务器:Apache、Nginx、IIS、Tomcat、NodeJS等;
    Apache 使用量最大的一个服务器。
  • HTTP服务器
    即网站服务器,主要提供文档(文本、图片、视频、音频)浏览服务,一般安装Apache、Nginx服务器软件。

网络的基础

1 IP地址

所谓IP地址就是给每个连接在互联网上的主机分配的一个32位地址。(就像每部手机能正常通话需要一个号码一样)
查看本机IP地址 ping、ipconfig、ifconfig

2 域名

由于IP地址基于数字,不方便记忆,于是便用域名来代替IP地址,域名是一个IP地址的“面具”
查看域名对应的IP地址 ping

3 DNS服务 Domain Name System

DNS记录了 IP 地址和域名的映射(对应)关系
查找优先级本机hosts文件、DNS服务器
访问过程
比如我们访问http://www.baidu.com ,首先会到本机的hosts文件当中进行相应的查找,没有找到,然后去dns 服务器上面去找.找到对应的ip 地址,根据ip 地址定位到互联网上面的主机,根据端口定位到服务。然后由主机完成响应,一般我们都是响应一个html 页面,浏览器得到这个页面,解析这个页面,然后一张网页就出现在我们的面前了。

4 端口

端口号是计算机与外界通讯交流的出口,每个端口对应不同的服务。
现实生活中,银行不同的窗口办理不同的业务。
查看端口占用情况 netstat -an
常见端口号 80、8080、3306、21、22

静态资源与动态资源

我们可以把服务器上面存放的文件都理解为资源。一种是静态资源,一种是动态资源。我们可以通过浏览器去访问我们的资源,那什么是静态资源,什么是动态资源勒。

静态资源:可以直接通过浏览器打开。比如我们的css,js ,html,image
动态资源:php,jsp,asp。比如我们去访问一个服务器上面的动态资源php

服务器需要把动态资源转换成静态资源然后响应给客户端浏览器。

1. Function的介绍

  1. 创建函数的方式
    code block:

    + :  声明式
           function foo() {
           console.log(arguments);
            }
           foo(1, 2, "3", {name:'jerry'});
    
    + :  表达式
            var foo = function() {
            console.log(arguments);
            };
            foo(1, 2, "3", {name:'jerry'}, true);
    
    + :  构造函数:
    Function(arg1, arg2, ...,argN ,body)所有的参数类型均为 字符串;
    arg1, arg2, ...,argN 为可选的参数列表,表示 为 生成函数的形参列表;
    body 为必选参数,表示为 生成函数的 函数体部分。
    var  foo = new Function('val1', 'val2', 'return val1 + val2;');
    
  2. 由于函数也可以通过Function构造函数来创建,那么函数也是对象;具有proto属性

2. 相关结论:

1.  所有的函数都是Function实例。

1
2
3
4
5
6
7
// Object函数的构造函数为 Function
console.log(Object.constructor);
console.log(Array.constructor);
console.log(Date.constructor);
console.log(RegExp.constructor);
var foo = function() {};
console.log(foo.constructor);
2. 所有的函数的构造函数为Function;
1
2
3
4
5
console.log(foo.__proto__ === Function.prototype);
console.log(Object.__proto__ === Function.prototype);
console.log(Array.__proto__ === Function.prototype);
console.log(Date.__proto__ === Function.prototype);
console.log(RegExp.__proto__ === Function.prototype);
3. 所有的函数的原型对象 为 Function.prototype.
1
2
3
4
console.log( Function.prototype.__proto__ === Object.prototype );
console.log( typeof Function.prototype );
console.log(Function.prototype.prototype);
// Array -> Function.prototype -> Object.prototype -> null

3. 小结

将函数    称为 函数对象
其他对象  称为 普通对象

4. 绘制函数的原型链

5. arguments对象属性(这是一个类数组,保存着的是这个)

1>  : length 实参的个数
2>:callee 返回正在执行的函数; 应用在匿名函数递归调用
1
2
3
4
5
6
7
8
9
10
var v = (function (n) {
if (n < 1) {
return undefined;
} else if (n === 1 || n === 2) {
return 1;
} else {
return arguments.callee(n - 1) + arguments.callee(n - 2);
}
}(8));
console.log(v);

6. 函数相关属性

1>:caller 返回调用当前函数的函数
2>: length 形参的个数
3>: name   存储函数的名字

7. 模拟函数重载

在js中,没有函数重载,只能通过arguments对象进行模拟
            // 如果函数没有传递实参,就直接打印false;
    // 如果传递一个实参,就将其直接打印出来;
    // 如果传递两个实参,就将两个实参拼接起来,在打印出来;
    // 如果传递一个实参并且类型为 数字的话,就加1,在打印。
    function foo() {
        if(arguments.length === 0){
            console.log(false);
        } else if(arguments.length === 1){
            if(typeof arguments[0] === 'number'){
                console.log(arguments[0] + 1);
            } else {
                console.log(arguments[0]);
            }
        } else if(arguments.length === 2){
            console.log(arguments[0] + '' + arguments[1]);
        }
    }
    foo();
    foo(1);
    foo("JQK");
    foo('A', '2');

8. 函数递归:

1>  概念:函数调用自身
2> 经典递归案例
    a:  等差数列第n项值
    b: fibonacci数列第n项值
var v = (function (n) {
        if (n < 1) {
            return undefined;
        } else if (n === 1 || n === 2) {
            return 1;
        } else {
            return arguments.callee(n - 1) + arguments.callee(n - 2);
        }
    }(8));
    console.log(v);

9. 词法作用域: 规定变量的作用域是由变量声明的位置决定,而不是由使用变量的位置决定。

在词法作用域中,只有函数可以分割作用域。在函数内部是一个完整作用域。与外界隔离
也就是,在函数内部可以访问函数外部的数据;但是函数外部无法访问内部的数据。

10. 变量名(函数名)提升

在js预解析阶段执行的操作。
js本身是边解析边执行的。

11. 在预解析阶段:

首先,分析代码语法,如果有语法错误,就直接抛出异常。
其次,将变量名以及函数声明提升 到当前作用域最顶端。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 1: 全局变量是window对象的属性
// 2:变量名提升
var a;
if( 'a' in window ){
a = 10;
} else {
a = 20;
}
console.log(a);// 10
var a = 10;
if( a in window ){
a = 10;
} else {
a = 20;
}
console.log(a);// 10

12. in运算符

1》 规则:前面的属性名字,要用字符串来表示;如果为变量,那么会将变量的值隐式转换成字符串,然后去判断变量的值是否为指定对象的属性(可以为继承过来的属性)。
2》注意: 后面的参数必须为对象;否则报错。