一、搭建服务器
1、搭建基础的web服务器Apache
我们直接下载xampp
,避免很多操作
xampp
下载网址:官网链接 百度云盘
- 安装完成之后我们打开Apache服务器,在命令行用命令:apache start或者直接用xampp的可视化工具打开即可
- 然后我们进入浏览器输入Apache就会有一个页面,下图是单独安装的Apache 而我们使用的是xampp所以可能有所出入,有页面之后就是安装成功了
2、安装PHP
上面的xampp
下载之后就是有php7(百度网盘)
的,然后我们使用php
运行一下测试文件
启用win+R
输入cmd
,在输入一下命令
php -f C:\xampp\htdocs\index.php
后面的 C:\xampp\htdocs\index.php
是文件路径
如果成功打印就是PHP安装成功
3、Apache加载PHP
- 我们找到
Apach
的安装目录并进入conf
文件夹打开httpd.conf
文件,如图 - 我们打开
http.conf
文件之后找到LoadModule
- 这里
C:/xampp/php/php7apache2_4.dll
是我的Php适配Apache的dll文件,如下图: - 然后我们在进入浏览器输入localhost/index.php能看见哦我们上面的php文件,如图:
4、安装MySQL
64位MySQl下载
单体MySQL安装教程
当然我们xampp也提供了一个mysql,这个是可以直接使用的,但是任然需要初始化一下,可以去上面的MySQL安装教程里,跳过安装,看怎么配置
5、创建虚拟主机
这里因为我的学习并不需要,所以不录入博客
二、PHP基础知识
1、标记规则
1.1、标准规则
- 通常是嵌入到HTML中的时候使用
<?php
//标记起始为:<?php
//PHP代码块
//标记结束为: ?>
?>
1.2、不完整规则
- 通常是独立的PHP文件(全部都是PHP代码)使用
<?php
//只有起始标记
//PHP代码块
//没有结束标记
1.3、历史规则
- PHP在早起经历了多种标记,现在已经几乎都不用了,但是如果朋友,要认识
// 短标记 short_tag
<?
// 短标记:起始标记没有php
// 目前默认不支持,如果要支持需要开启配置php.ini: short_open_tag = On
?>
****************************************
//ASP标记:asp_tag
<%
//ASP标记:以前ASP语言的方式
//php7已明确不支持
%>
****************************************
//脚本标记
<scrpit lagnguage="php">
//脚本标记:与JavaScript一样
</script>
2、注释
2.1、单行
使用 //
来进行单行注释
// 例如这个
2.2、多行注释
使用 /* */
来进行多行注释
/*例如
这样的
*/
3、基础语法
3.1、变量
- 变量必须使用
$
符号来声明 - 变量名字由字母、数字和下划线组成
- 变量严格区分大小写
- 其中数字不能做开头(不能直接跟在
$
符号后) - 变量命名应尽量与事实需求响应(识别度高),如名字对应
$
name,年龄对应$
age - 比较复杂的组合变量名可以使用下划线(用下划线链接单词,推荐)胡总和驼峰法(单词首字母大写):下划线法
$
family_name;驼峰法:$
familyName
$name = 'Sherry';
$familyName= "Gin";
$family_name= "Lan";
3.2、预定义变量(系统变量)
- $_GET:用户通过get方式提交数据
- $_POST:用户通过post方式提交数据
- $_REQUEST:用户通过get和post提交的数据
- $_SERVER:用户和服务器的基本信息数据
- $_FILES:用户提交的文件数据
- $_SESSION:session数据
- $_COOKIE:sookie数据
- $GLOBALS:所有全局变量,也是唯一一个不是以下划线开始的预定义变量
- $_ENV:环境数据
注意打印以上变量需使用 var_dump() 来打印, echo只能打印简单的变量
3.3、变量传值
- 传递值:将变量的值赋给另一个变量
- 引用传递:将变量所指向的数据的内存地址赋值给另一个变量,两个变量指向同一个值,任何一个的修改都会影响到另一个变量
$a = 100;
$b = $a; //将 $a 的值100赋给了 $b
$c = &$a; //将 $a 指向100的地址赋值给 $c
echo $a,$b,$c; //100,100,100
$b = 'b'; //改变 $b 的结果,但是 $a 不受影响, 依然是100
echo $a,$b,$c; //100,b,100
$c = 'c'; //改变 $c 的结果,但是 $a 与$c 公用一个数值空间,所以 $a 也会变成 'c'
echo $a,$b,$c; //c,b,c
3.4、常量
- 常量名通常用大写字母表示
- 常量名不需要
$
符号开始 - 常量名由字母、数字、下划线组成,其中不能以数字开头
- 复杂的常量名使用下划线表示法:FAMILY_NAME
- 常量的命名比变量其实要宽松(
不建议使用
)
//有效常量名
define("PI", 3.1415926);
define("SELF_PI", 3);
const FAMILY_NAME = "Green";
define("-_-", "smile"); // 宽松(但是不建议,没有明确见名得意)
3.5、系统常量
- PHP_VERSION:PHP版本号
- PHP_INT_SIZE:PHP中得int数据所占用得内存字节数
- PHP_INT_MAX:PHP中int数据所能表示得最大值
上面三个是不能改变的,下面得Markdown不好打出来
4、数据类型
-
基本数据类型
- 整形( Int/Integer):存储整数数据
- 浮点型( Float):存储小数数据和超过整形范围的数据类型
- 布尔型( Bool/Boolean)存储布尔类型数据,只有 true和 false两个值
- 字符串型( String)存储字符串数据(最常见)
-
- 字符串查看可以通过下标来查看,下标从0开始
复合数据类型
- 数组型(Array):存储数组数据(即多个数据存放到一个变量中)
-
- 使用
array()
关键字来初始化数组
- 使用
-
- 使用数组括号
[ ]
来初始化数组
- 使用数组括号
-
- 使用变量和
[ ]
来初始化数组,但是这个时候需要给定一个值,而且一次只能添加一个元素
- 使用变量和
- 对象型(Object):存放对象数据,由类实例化得到(面向对象) 特殊数据类型
- 资源型(Resource):存放外部资源数据(数据库资源\文件资源)
- 空型(null):变量没有存储任何数据
4.1、数组
- 索引数组
- $arr1 = arry(1,2,3,4,5);
- 关联数组
- $arr2 = array(‘name’ => “张三”, ‘age’ => 30, ‘gender’ => “男”);
- 混合数组
- $arr3 = array(1,2,“name” => ‘张三’, ‘age’ => 30);
4.2、二维数组
<?php
$user1 = array('name' => "张三", 'age' => 30);
$user2 = array('name' => "李四", 'age' => 23);
$user3 = array('name' => "王五", 'age' => 40);
// 以上全是以为数组
// 下面开始就是二维数组
$users = array($user1, $user2, $user3);
// 访问也很简单,使用下标访问,我们给 $users 下标只是访问到 一维数组 再次使用下标就可以了
echo $users[0]["name"] //这一行可以打印张三
4.3、数据类型转换
- 自动转换
- php根据运算场景来进行数据类型的转换
- 第一个字符是字母或者其他特殊符号,结果为0
- 第一个字符是数字,可以依次往后保留,直到不是数字为止
- 如果在数字往后推的情况下,碰到第二个小数点结束(保留一个小数点)
- php根据运算场景来进行数据类型的转换
- 强制转换
- 我们使用 (
数据类型
)数据来把数据强行转为括号内的数据类型
- 我们使用 (
5、运算符
5.1、 赋值运算符
- 给变量或者常量 进行赋值运算:把右边的结果保存到左边
- = :最常见的赋值运算
- +=: 左边与右边的运算结果(整体)相加,然后再把整个运算结果赋值给左边
- -=,=,/=:与 += 一致
- 注意:在使用“/=”进行运算的时候,右侧的结果不能为0,否则会报错
//简单的赋值
$num1 = 10;
//复合操作
$num1 += 10;
//等价于以下操作
$num1 = $num1 + 10; //注意位置, 是等价于变量在右侧表达式的最左边
//优先级操作
$num2 = 10;
$num2 *= 1 + 1;
//等价操作
$num2 = $num2 * (1 + 1) //注意该操作是左侧变量与右侧整体结果做操作
//注意事项
$num2 /= 0; //错误
//等价操作
$num2 = $num2 / 0 //除数不能为0
5.2、算数运算符
- 普通算术运算符,需要符号左右两边都是数值
- +、-、*、/ 加减乘除
- %:取模运算,也就是取余数
5.3、错误抑制符号
- 单目运算,将可能出现的比较低级的错误给抑制,不报错误
- @:在可能出现错的表达式之前使用
<?php
/* 错误抑制是一种代码的保护机制,为了不让用户看到错误,因为用户不明白错误是什么原因。更多的时候,程序员应该将所有错误都预估并通过代码表现 */
$a = 10 / 0; //程序直接报错,非常专业错误
@$a = 10 /0; //系统依然错误,但是不会报错给用户
5.4、比较运算符
- 用于两个表达式的比较,比较结果通常使用
true
或false
- >,< 大于和小于
- >=,<= 大于等于和小于等于
- == 左边等于右边返回true
- === 左边等于右边且数据类型一致返回true
5.5、逻辑运算符
- 用于针对运算结果进行运算
- &&: 逻辑 与 运算(也作 and),需要同时满足,否则false
- ||: 逻辑 或 运算(也作or),有一个false就false
- !:逻辑 非 运算,让结果取反
- 逻辑运算符(逻辑与和逻辑或)也称之为短路运算:即左边表达式如果能够确定结果,那么右边表达式就不再判定
5.6、连接、三元、自操作运算符
-
连接运算符
和Java、Python不同PHP的连接运算符是.
一个英文句号来连接左右两边 -
三元运算符
- 三个表达式组成的一个运算表达式
- 表达式1?表达式2:表达式3
- 如果表达式1成立,整个结果为表达式2;否则为表达式3
- 三元运算符可以嵌套:表达式1?(表达式2?表达式3:表达式4):表达式5
-
自操作运算符
- 自动操作的运算方式
- ++/–:自增/自减,在原来的基础上加/减1
- 前置自操作:先自我运算,然后把最终自己的结果给其他运算
- 后置自操作:先把自己的结果给其他运算,然后自我运算
<?php
//最明显的前置后置区别就是输出
$a = 10;
$b = 10;
echo $a++; // 这时候输出的是10,等echo完了之后在+1
echo ++$b; // 这时候输出的是11,因为他是先+1之后才进行输出的
//注意 ++ 要写在整体变量的前后
6、流程控制
- 在php中,流程控制分为三种:顺序结构、分支结构和循环结构
- 顺序结构:最普遍的一种结构,不需要人为控制,就是代码按照编写的顺序从上往下逐行执行
- 分支结构:需要认为控制,将可能发生的结果对应的代码块,按照指定的条件去判断执行,通常情况下是根据条件选择一个对应的代码块执行
- 循环结构:是代码高校解决重复问题的一种方式,通常是设定变化条件,然后让代码块在指定范围内重复执行
6.1、顺序结构
<?php
//定义变量
$a = 100; //php解释器先解释第一行代码
//输出结果
echo $a; //php解释器顺序执行第二行代码
6.2、分支结构
6.2.1、IF分支结构
- IF分支语法:if分支根据业务的复杂性可以分为三种,即简单if分支、标准if分支和复杂if分支
- 简单if分支:简单的if分支是只有一个代码块,达到某个指定的条件才会执行,否则不执行对应的代码块。语法规则为
<?php
if (条件){
//满足条件则执行的代码块
}
- 标准if分支:一个满足一个不满足的情况
if (条件){
//满足条件要执行的代码块
}else{
//不满足条件要执行的代码块
}
- 在PHP中elseif和else if同时支持,效果等同
<?php
//支持多种支付
$choice = "微信";
if ($choice == "支付宝"){
echo "支付宝支付";
}elseif ($choice == '微信支付') { //这里使用elseif 或者else if 都行
echo "微信支付";
}else {
echo "其他支付";
}
- 在使用if来判断的时候也可以嵌套多个if
- IF分支注意事项:如果条件变换是循序渐进的,那么在条件编写的时候,一定要注意条件变换的顺序性,以及发生条件区间封闭性。如按照年龄来划分人所处某一类人的时候,一定是最狭窄的体哦阿健先判断(满足的概率偏小),最后是最宽的条件。
6.2.2、Switch分支结构
- 基本语法
switch (条件变量){
case 匹配值1:
//满足条件执行的代码块
break;//结束分支结构 注意break; 必须写在case执行完之后否则还会继续执行
case 匹配值2:
//满足条件执行的代码块
break;
default:
//如果都不满足而执行的代码块
break;
}
6.3、循环结构
6.3.1、for循环
for (初始化条件; 条件判断; 条件变更){
//重要重复执行的代码(循环体)
};
// 其中如果我们将循环条件设置成 ;; 那么这个就是死循环除非有break; 否则不会退出
例如:
- 小练习——计算1-100的立方和
<?php
$sum = 0;
for ($a=1; $a<=100; $a++){
$sum += $a ** 3;
};
echo "1-100的立方和是:".$sum;
- 结果图
6.3.2、While循环
- 基础语法
while (循环条件)
{
//循环体
};
//例如
//输出1到100的整数
$i = 1; //定义初始化变量
while ($i <= 100){
//循环体
echo $i; //输出 $i
//变更循环条件
$i++ //在循环体中控制循环变量
}
- do …… while
<?php
do{
//循环体
}while(条件);
// 例如
$i = 1;
$res = 0;
do{
//循环体
$res=0;
$i = 0;
}while($i <= 100);
6.3.3、foreach循环
<?php
$arr = array("name" => "张三", "age" => "30", "gender" => "男");
foreach($arr as $k => $v){
//$k 代表去除的数组元素的下标
//$v代表去的的数组元素值
echo $k.':'.$v."<br>";
}
// 循环外访问内部变量
echo $k . ':'. $v . '<br>'; // 最后一个元素值:gender :男
以上所有循环都可以用continue;/break;来继续/跳出循环也可以指定控制的循环层数,默认为1(即本层)
7、PHP函数
7.1、函数基础语法
<?php
function 函数名(形参列表){
//函数体
return 返回值;
}
// 例子
function showNumber (){
$sum = 0;
for ($a=1; $a<=100; $a++){
$sum += $a ** 3;
};
return $sum;
}
echo '1-100的立方和为' . showNumber();
- 注意! 调用函数一定要先定义函数,再在函数下面调用,虽然php也可以先调用但是并不建议
- 如果函数里定义了形参,那么调用函数的时候就必须传入参数不然就会报错,当然在定义函数的时候也可以定义默认值比如
function($num = 1){}
这样$num
的默认值就是1 - 例如
7.2、参数传递
<?php
function changeValue($a, &$b){
echo '<br/>';
echo $a++,"<br/>";
echo $b++,"<br/>";
}
$a = 10;
$b = 10;
echo $a,$b;
changeValue($a,$b);
echo $a,$b;
//引用传值必须使用变量传递
// changeValue(100, 100)样子就是错误的
// 因为我们 function 里用的是 &$b 引用的是内存地址所以不能直接赋值
changeValue(100, $b);
7.3、函数体
- 函数体中可以定义变量保存数据
- 函数体中可以使用分支结构进行逻辑判断
- 函数体中可以使用循环实现数据迭代
- 函数体中可以调用函数(与外部调用方式一样)
- 函数体可以定义函数(匿名函数)
- 函数体中可以调用类(高级)
7.4、函数返回值
- 函数一定有返回值:如果用户指定就会返回指定结果,否则返回NULL
<?php
function display(){
echo "hello world"; //函数目标是数据输出,所以不需要返回值
}
var_dump(display()); // NULL,说明函数最终还是返回了结果NULL
function getBack(){
return 100;
}
var_dump(getBack()); // 100
//我们可以使用变量来接受返回值
$num = getBack();
echo $num; // 100
7.5、静态变量
- 定义:静态变量,即在函数内部使用
static
关键字修饰的变量,这种变量是在函数第一次调用时执行,而且只执行一次,在函数再次调用时,会自动跳过这一行(不会再次执行)。这种变量能够在同一个函数多次调用共享数据的变化。
- 基础语法:使用
static
关键字修饰变量,通常静态变量都会在定义的时候进行初始化(即给定值)
<?php
function getStatic(){
static $c = 0; //静态变量
$var = 0; //普通变量
}
- 静态变量与函数内定义的普通变量的区别在于,初始化那行只会执行一次
<?php
function getStatic(){
static $c = 0; //静态变量
$var = 0; //普通变量
//自增输出
echo $c++, $var++
}
//调用
getStatic(); //0,0:第一次调用,$c初始化,两个都是从0开始,输出后都变成1
getStatic(); //1,0:第二次调用,$c不在初始化,所以是1,
//而$var继续初始化为0,所以最终输出变成1,0,$ c变成2
- 静态变量的作用范围:虽然静态变量允许跨函数共享数据,但是静态变量只允许在当前函数内部使用,其他任何地方都用不了
7.6、作用域
<?php
//作用域
$a = 100; //全局变量,在全局作用域中访问
$_GET['age'] = 1; //超全局变量:借助系统变量$_GET
function display(){
$b = 50; // 局部变量,只能在局部作用域访问(函数自身内部)
// echo $a; // 错误:系统提示该变量未定义
echo $_GET['age']; // 1 能够访问
}
// echo $b; //错误,系统提示该变量未定义
echo $_GET['age'];
- 可以使用
global
关键字在函数内部进行引入,global
关键字是一个全局引用/定义变量,如果是引入全局变量,必须使用global
定义一个外部同名变量(global
只能声明变量,不能赋值)
7.7、还有系统函数和可变函数,暂时不看
8、文件包含
8.1、文件包含基础语法
<?php
//文件包含
include 'index.php'; //包含index.php文件(当前php文件同级目录)
//调用文件之后就可以使用文件内的函数等
//例如
//调用文件
include 'function.php';
//调用function中的函数
echo '1-100的立方和为' . showNumber();
例如:
注意!在引入外部文件时候要先引入在使用外部文件里面的内容,否则就会报错
例如
<?php
showNum(); //这时会报错找不到函数
include "function.php";
- 文件路径
- **./**表示同级目录(当前文件所属文件夹),每个文件夹下都有 " ." 文件,代表当前目录
- **…/**表示上级目录(当前文件所属文件夹的上级文件夹)
- 什么都不写就代表是当前目录