IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Php基础学习笔记 -> 正文阅读

[PHP知识库]Php基础学习笔记

一、搭建服务器

1、搭建基础的web服务器Apache

我们直接下载xampp,避免很多操作
xampp下载网址:官网链接???????????????????百度云盘

  • 安装完成之后我们打开Apache服务器,在命令行用命令:apache start或者直接用xampp的可视化工具打开即可
    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文件,如图 Apache加载PHP
  • 我们打开http.conf文件之后找到LoadModule
    加载module
  • 这里C:/xampp/php/php7apache2_4.dll是我的Php适配Apache的dll文件,如下图: Php适配Apache文件
  • 然后我们在进入浏览器输入localhost/index.php能看见哦我们上面的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:用户通过getpost提交的数据
  • $_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)存储布尔类型数据,只有 truefalse两个值
字符串型( 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根据运算场景来进行数据类型的转换
      1. 第一个字符是字母或者其他特殊符号,结果为0
      2. 第一个字符是数字,可以依次往后保留,直到不是数字为止
      3. 如果在数字往后推的情况下,碰到第二个小数点结束(保留一个小数点)
  • 强制转换
    • 我们使用 (数据类型)数据来把数据强行转为括号内的数据类型

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、比较运算符

  • 用于两个表达式的比较,比较结果通常使用truefalse
  • >,< 大于和小于
  • >=,<= 大于等于和小于等于
  • == 左边等于右边返回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、流程控制

  1. 在php中,流程控制分为三种:顺序结构、分支结构和循环结构
  • 顺序结构:最普遍的一种结构,不需要人为控制,就是代码按照编写的顺序从上往下逐行执行
  • 分支结构:需要认为控制,将可能发生的结果对应的代码块,按照指定的条件去判断执行,通常情况下是根据条件选择一个对应的代码块执行
  • 循环结构:是代码高校解决重复问题的一种方式,通常是设定变化条件,然后让代码块在指定范围内重复执行

6.1、顺序结构

<?php
//定义变量
$a = 100;		//php解释器先解释第一行代码
//输出结果
echo $a;		//php解释器顺序执行第二行代码

6.2、分支结构

6.2.1、IF分支结构

  1. IF分支语法:if分支根据业务的复杂性可以分为三种,即简单if分支、标准if分支和复杂if分支
  2. 简单if分支:简单的if分支是只有一个代码块,达到某个指定的条件才会执行,否则不执行对应的代码块。语法规则为
<?php
if (条件){
	//满足条件则执行的代码块
}
  1. 标准if分支:一个满足一个不满足的情况
if (条件){
	//满足条件要执行的代码块
}else{
	//不满足条件要执行的代码块
}
  1. 在PHP中elseif和else if同时支持,效果等同
<?php
//支持多种支付
$choice = "微信";

if ($choice == "支付宝"){
	echo "支付宝支付";	
}elseif ($choice == '微信支付') {	//这里使用elseif 或者else if  都行
	echo "微信支付";
}else {
	echo "其他支付";
}
  1. 在使用if来判断的时候也可以嵌套多个if
  2. IF分支注意事项:如果条件变换是循序渐进的,那么在条件编写的时候,一定要注意条件变换的顺序性,以及发生条件区间封闭性。如按照年龄来划分人所处某一类人的时候,一定是最狭窄的体哦阿健先判断(满足的概率偏小),最后是最宽的条件。

6.2.2、Switch分支结构

  1. 基本语法
switch (条件变量){
	case 匹配值1:
		//满足条件执行的代码块
		break;//结束分支结构    注意break;  必须写在case执行完之后否则还会继续执行
	case 匹配值2:
		//满足条件执行的代码块
		break;
	default:
		//如果都不满足而执行的代码块
		break;
}

6.3、循环结构

6.3.1、for循环

for (初始化条件; 条件判断; 条件变更){
	//重要重复执行的代码(循环体)
};
//  其中如果我们将循环条件设置成 ;; 那么这个就是死循环除非有break;  否则不会退出

例如:
for循环例子

  • 小练习——计算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、函数返回值

  1. 函数一定有返回值:如果用户指定就会返回指定结果,否则返回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关键字修饰的变量,这种变量是在函数第一次调用时执行,而且只执行一次,在函数再次调用时,会自动跳过这一行(不会再次执行)。这种变量能够在同一个函数多次调用共享数据的变化。
  1. 基础语法:使用static关键字修饰变量,通常静态变量都会在定义的时候进行初始化(即给定值)
<?php
function getStatic(){
	static $c = 0;		//静态变量
	$var = 0;		//普通变量
}
  1. 静态变量与函数内定义的普通变量的区别在于,初始化那行只会执行一次
<?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
  1. 静态变量的作用范围:虽然静态变量允许跨函数共享数据,但是静态变量只允许在当前函数内部使用,其他任何地方都用不了

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";
  • 文件路径
    • **./**表示同级目录(当前文件所属文件夹),每个文件夹下都有 " ." 文件,代表当前目录
    • **…/**表示上级目录(当前文件所属文件夹的上级文件夹)
    • 什么都不写就代表是当前目录
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:33:57  更:2022-10-31 11:34:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/22 18:59:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码