PHP速学

简介

php(Hypertext Preprocessor ,超文本预处理器),是一种通用开源脚本语言,php主要应用是将程序嵌入到HTML文档中去执行,执行效率高。php是一款弱数据语言,语法相对简单并且提供了丰富的类库。php主要是结合了Linux、Nginx、Apache、MySql可以更加方便快捷的搭建一套系统。现目前使用最多的就是动态生成网页,自身加以学习运用为网络安全打好基础。

基本知识

1、注释

PHP注释和其他语言一样两种方式,行注释和块注释如下:

# 这是一个行注释

// 这也是一个行注释

/*
这是一个
块注释
*/

2、变量

PHP的所有变量都是以 "$“符号开始,并且要以”;"结束语句,简单介绍四种流程:
在这里插入图片描述

$num = 10 ;                    //赋值
echo $num;                     //访问
$num = 'Hello word';           //修改
unset($num);                   //删除

2.1 预定义变量

PHP系统内部制定了变量,也是PHP自动收集的数据结果,目的是为了方便开发者使用,他们同样也是变量并且都是数组,系统提供了九个预定义变量每个都有自己特定的数据。

预定义变量名称描述
$_GET用户通过get方式提交的数据
$_POST用户通过post方式提交的数据
$_REQUEST用户通过post方式和get方式提交的数据
$_SERVER用户和服务器的基本信息数据(数据由系统定义好)
$_FILES用户提交的文件数据
$_SESSIONsession数据 (服务器端存储的会话信息)
$_cookiecookie数据(客户端存储的文本文件)
$GLOBALS所有全局变量,也是唯一一个不是以下划线开始的预定义变量
$_ENV环境数据

举个例子:一个用户在前端页面通过form表单中的input标签中name传值,而PHP就利用$_POST接收。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<body>
	<form action="./a.php" method="post">
		<input type="text" name="user">
		<input type="password" name="password">
		<input type="submit" name="submit">
	</form>
</body>
</html>
<?php
$user = $_POST['user'];
$password = $_POST['password'];
echo '账号:'.$user;
echo '密码'.$password;
?>

在这里插入图片描述
在这里插入图片描述

2.2 变量传值

变量传值分为值传递和引用传递其中:
1、值传递:自身不受影响
2、引用传递:变量代表地址传递,一个改变影响多个

//值传递
$a = 10;
$b = $a;

//引用传递
$c = 10;
$d = &$c;

在这里插入图片描述

3、常量

常量是一种存储数据的符号,常量通常写大写字母,一旦定义将不可改变。
1、定义常量

(1)、使用函数:define(‘常量名’,常量值);
(2)、使用关键字:const 常量名 = 常量值;

2、访问
(1)、直接访问
(2)、用constant(‘常量名’);访问

//定义
define('VERSION',10);
const VERSION = 10;

//访问
echo VERSION;
echo constant('VERSION');

//定义数组常量
const MATH = array('PI' => 3.14,'E' => 2.72);
echo MATH['PI'];

3.1 系统常量

系统常量也分为两种一种是固定系统常量还有一种是魔术常量其中:
1、固定系统常量:值固定的。
2、魔术常量:值可以变但是不是自己控制是随系统参数而变。

系统常量

名称介绍
PHP_VERSIONPHP版本号
PHP_INT_SIZEPHP中整数所占用的字节数
PHP_INT_MAXPHP中整数所能表示的最大数

魔术常量
这里是两个下横线“- -DIR- -”

名称介绍
_DIR _当前运行文件所在的绝对路径
_FILE _当前运行文件的绝对路径并且带文件名
_LINE _当前代码所在行号
_FUNCTION _函数内部使用,表示当前函数的名字
_CLASS _类内部方法使用,表示当前类的名字
_METHOD _类内部方法使用,表示当前方法的名字并且带类名
_NAMESPACE _当前所属命名空间的名字

使用直接输出即可

<?php
echo '这是第 " '  . __LINE__ . ' " 行';
?>

4、数据类型

数据类型通俗来说分为三大类和八小类

基本数据类型
整型(int/integer)
浮点型(float)
布尔型(bool/boolean)
:字符串型(string)
复合数据类型
数组型(array)
对象型(object)
特殊数据类型
资源型(resource)
空型(null)

可以利用var_dump()系统函数查看变量详细情况;数据大小(或长度)、数据类型。

4.1 整型

$int1 = 123;       //十进制     --> %d
$int2 = 0123;      //八进制     --> %o
$int3 = 0x123      //十六进制   --> %x
$int4 = 0b101      //二进制     --> %b
$int5 = -123       //负数       --> %d

其中最大的整数位PHP_INT_MAX (9223372036854775807)也是最大正数,而最大负数位PHP_INT_MAX - 1 。如果在最大整数在加一就会被浮点数所接收。
php也提供了进制转换的函数

转换函数名
二 —> 十bindec
十 —> 二decbin
十 —> 八decoct
八 —> 十octdec
十 —> 十六dechex
十六 —> 十hexdec

4.2 浮点型

浮点型也就是小数如(1.2),其中还包括了科学计数法产生的数,超过最大整数的数PHP_INT_MAX + 1,浮点数的存储空间有八个字节,有效精度13-14位,超过的将会四舍五入,在14位之前的数肯定精准,最大1.8e308,不适用于精度要求比较高的地方使用,也不适用于进行精确比较。

$floata = 1.2;

4.3 布尔型

布尔类型就两个值 true 和 false 不区分大小写

4.4 字符串型

字符串型分为三种分别为单引号包裹、双引号包裹、界定符包裹(<<<)

$str1 = 'hello world';

$str2 = "hello world";

$str3 = <<<EOT    //EOT后不允许有任何字符包括空格
	$str1
EOT;

其中:
1、单引号只能解析少量的转义符号比如:单引号('),反斜杠(\)。

echo 'hello \'\'\\word';

2、双引号就有较多的转义符:($)、(")、(\)、(\r|n)、(\t)、有php变量也可以解析。

echo "hello\"\$\\\r\t word";
$a = "hello";
//假如输出$a
echo "$abc"; //并不会单独输出a而是abc
//建议使用
echo "{$a}bc";

4.5 数组

1、创建

$arr1 = array();
$arr2 = [];
$arr3 = [1,2,3];
$arr4 = ['Name'=>'张三','age'=>30];

2、添加

$arr5[] = 10;            //自动生成下标
$arr6['Name'] = '男';    //下标为Name

3、删除

unset($arr);

二维数组

$p1 = array('name'=>'张三','age'=>18);
$p2 = array('name'=>'李四','age'=>19);
$p = array($p1,$p2);              //二维数组

echo $p[0]['name'];               //抓取第一个人名字

4.6 类型判定和转换

类型判定不需要特意去记忆用 is_+数据类型,is_ 即可以查看所有,有特殊的比如is_numeric 判定数据是否为数值是则返回true,is_scalar 查看是否为标量(是否为基础数据类型)是返回true.

类型转换,类型转换php一般都会自动帮你转换自己也可以强制转换。
1、不改变原来数据类型

$a = 1;
$b = (boolean)$a;

2、改变原来数据类型

$a = 1;
settype($a,'bool');

资源和NULL不能强制转换

5、运算

5.1 普通运算符

//普通运算符+ - * / % **
$a = 1;
$b = 2;
$c = $a + $b;   //相加
$c = $a - $b;   //相减
$c = $a * $b;   //相乘
$c = $a / $b;   //相除
$c = $a % $b;   //取余
$c = $a ** $b;  //幂运算左底数右次方

5.2 错误抑制

错误抑制只对简单的错误有效比如(notice、warning)

$a = @(10/0);

5.3 飞船运算符

符号介绍
<=>左边大于右边返回1(int类型),小则返回-1
===左边等于右边且两边数据类型一致返回true
!==左边等于右边且两边数据类型不一致返回true

5.4 合并运算符

合并运算符 $a??B
a 存在,整个表达式返回 a 存在,整个表达式返回 a存在,整个表达式返回a的值。
$a不存在,整个表达式返回B的值。
合并运算的目的是保证代码的逻辑完整性;既总有个结果不会不存在。

例:用户用POST提交数据

$gender = $_POST['gender'];
$gender = $_POST['gender']??'男';

5.5 连接运算符

连接运算符以“.”为代表。

$a = 'hello';
$b = 'world';

$c = $a.' '.$b;

5.6 三目运算符

$age = 15;

$res = $age >= 18?'上网':'不能上网'; 
//       条件       结果1   结果2
//满足条件则返回结果1 不满足则返回结果2

5.7 逻辑运算符

&& —>逻辑与and
|| ------>逻辑或or
逻辑运算为短路运算,实际开发大概率能判定结果的放在前面。比较是通过对两边的布尔结果进行比较

&& 只有两边同时为true结果才为true否则为false。如果第一个判断就为假那么后面的条件将不会判断。
|| 两边只要有一个true就判断为真,一个没有就为假。如果第一个判断为真那么后面的条件将不会判断

5.8 自增运算符

$a = 1;
$b = $a++;    //先用后加    $b = 1;

$c = 1;
$d = ++$c;    //先加后用    $d = 2;

5.9 运算符优先级

在这里插入图片描述

6、流程控制

执行的最后销毁所有资源

6.1 if

格式
1、 if(条件) {执行内容}
2、if(条件){执行内容}else{执行内容}
3、if(条件){执行内容}else if(条件){执行内容}…else{执行内容}

<?php
$age = 18;
if($age >= 18){
	echo "已满十八岁";
}
?>
<?php
$age = 18;
if($age >= 18){
	echo "已满十八岁";
}else{
	echo "未成年";
}
?>
<?php
$age = 18;
if($age >= 18){
	echo "已满十八岁";
}else if($age < 18 && $age > 0){
	echo "未成年";
}else{
	echo "您输错了";
}
?>

if语句内能嵌套if语句但是不建议超过三层。

6.2 switch

选择语句

<?php
$a = 1;
switch($a){
	case 1 : echo '我是1';
			break;                 //没有break程序将一直执行下去造成无必要消耗
	case 2 : echo '我是2';
			break;
	default: echo '我不是1也不是2,我是除它们以外的任何';   
			break;  
}
?>

7、循环

php循环分为四种分别为:while、for、foreach、do-while。

7.1 while

<?php
$a = 1;
while(true){              //条件为真运行
	echo '这是个while循环';
	$a++;
	if($a == 10){
		break;
	}
}
?>

7.2 for

<?php
for($a = 1;$a <= 10;$a++){
	echo '这是一个for循环';
}
?>

7.3 foreach

foreach是php专门用来遍历数组的关键字
语法:foreach(数组变量 as 下标变量 => 变量值){
通过下标变量读取数组中每个元素下标(可以没有)
通过值变量读取数组中每个元素的值
}

例:

$info = array('name' => '鸣人','skill' => '螺旋丸');

foreach($info as $key => $value){      //下标变量,变量值名字自取
	echo $key.':'.$value.'<br/>';
}

7.4 do-while

do-while语句用处比较少,但也是必须要熟悉的,

do {
要执行的代码;
} while (条件为真);

<?php 
$x=1; 

do {
  echo "这个数字是:$x <br>";
  $x++;
} while ($x<=5);
?>

7.5 break/continue

其中还有比较重要的点是 break 和continue
break:终止循环
continue:终止本次循环
continue[N]:回到N层循环继续下一次循环开始
break[N]:跳出N+1层循环,没有则结束

8 、函数

php中函数关键字为function(){},运行时先加载到内存中(栈区),用完后释放,每个函数都有返回值,有return时候返回后面的值,没有return时返回NULL。return(强制结束)

<?php
function def(){
	echo "这是一个函数";
}
def();
?>
<?php
function def2($a){        //形参
	echo "\$a=".$a;
}
$b = 1;
def2($b);                 //实参
?>

在传值的过程中也分为普通传值和引用传值,引用传值函数内变量改变外部变量也会改变,普通传值则不会。

function sum(&$b){}       //引用传递
sum($b)

9、函数高级

9.1 作用域

局部变量函数内
全局变量全局访问,函数内部不能访问
超全局变量$ GLOBALS全局变量都会被收纳在$GLOBALS中

可以利用超全局变量来保存数据,让数据不受作用域的限制。

<?php
$a = 100;
function display(){
	echo $GLOBALS['a'];         //可以输出a的值
	$GLOBALS['b'] = 1000;       //可以成功,相当于定义了一个全局变量,不会被释放	
}

?>

跨作用域访问:即在局部作用域访问全局,或全局访问局部。在函数内部使用global关键字声明变量,在用global声明变量时候不能够赋值,内外部都是指向同一个内存。

例:

<?php
$a = 100;
function display(){
	global $a;    //声明不能赋值
	echo $a++;    //100
}
display();
echo $a;          //101
?>

9.2 静态变量

静态变量在函数内部定义,可以在函数多次调用时,共用的局部变量。
静态变量在函数加载时(不是调用时)初始化(只初始化一次),静态变量可以在同一函数多次调用时共享数据的变化。

例:

<?php
function display(){
	$count = 1;
	static $count2 = 1;
	echo $count1++.",".$count2++;
}

display();         //输出1,1
display();	       //输出1,2
?>

9.3 强制类型

作用:
1、实参必须对应形参类型
2、保护函数内部运行逻辑正确
3、省去函数内部判定逻辑
4、提升解析效率
语法 function 名字(类型 变量名){}

想让强类型完全生效需要提前声明
declare(strict_types = 1);声明在最前面

<?php
declare(strict_types = 1);
function addNumbers(int $a, int $b): int {
return $a + $b;
}
?>

9.4 可变参数

可变参数 “
当函数获取不固定数量的形参时可以用可变参数 … a r g s ,多的实参会传进 args,多的实参会传进 args,多的实参会传进args。

<?php
function my_sum($a,$b,...$args){
	$sum = $a + $b;
	foreach($args as $v){
		$sum = $v;
	}
	return $sum;
}
$sum = my_sum(1,2,3,4,5,6,7)
?>

9.5 可变函数

用一个变量来保存函数,可以变量访问函数

<?php
function display(){
	echo _FUNCTION_;
}

$var = 'display';
$var();

?>

9.6 匿名函数

1、简单匿名函数
2、回调匿名函数
3、匿名函数闭包

变量 = function(){函数体 return 返回值};

简单匿名函数

$func = function($str){echo $str;};
$func('hello word');      //调用

回调匿名函数
将匿名函数定义在函数实参中,当做一个实参传递给形参
例:

<?php
//将数组内的每个参数三次方
$num = [1,2,3];

function my_cube($arr,$cube){
	$list = [];
	foreach($arr as $value){
		$list[] = $cube($value);
	}
	return $list;
}
$res = my_cube($num,function($n){return $n**3}
print_r($res);
?>

匿名函数闭包
函数闭包代表定义在函数内部的函数,内部函数为匿名函数,内部函数不能直接访问外部函数的局部变量

<?php
function outer(){
	$inner = function(){
		echo 'hello';    //不能用外层函数参数,gloable也不行
	};
	$inner();
}
?>

9.7 系统函数

系统函数的效率比开发者自己用PHP封装的函数效率高,系统函数可以通过API文档(可以从官网下载)进行查看使用。

常用输出类 :echo、print_r、var_dump、exit/die(输出并终止)
常用时间类 :time、data、strtotime(转为时间戳)、microtime(时间戳,精度高)
常用数学类 :max、min、floor、ceil、mt_rand、round。

字符串类常用:

函数名介绍
addslashes对ASCII码中的特殊字符进行转义(防止SQL注入)
htmlsmpecialchars将HTML特殊符号转为实体
htmlsmpecialchars_decode将实体符号转换为普通字符
chr将ASCII对应的数值转换成对应符号
ord将ASCII字符转换为对应数值
explode将字符串按照指定符号分隔,得一数组
md5使用md5进行加密
str_repeat将字符串重复指定次数
str_shuffle随机打乱一个字符串
str_split按照指定长度将数组分割,返回数组
strip_tags去除HTML和PHP标记
strlen获取字符串长度
stripos/strpois查找字符串中首次出现目标字符串的位置
substr从字符串中截取指定位置的长度的子字符串
trim去除字符串两边空格,默认是空格也可以设置其他
vcfirst首字母大写
strtolower所有字母小写
strtoupper所有字母大写
strstr获取字符串中某个字符首次出现到最后的字符串
str_replace字符串替换

10、文件包含

文件包含的作用,作用数据或结构跨脚本使用,提升开发效率,提供代码复用,利于代码维护
使用被包含文件内容(被请求文件永远是主体)

在这里插入图片描述
实现:
include ‘文件名’ 包含
requier ‘文件名’ 必须要有
include_once ‘文件名’ 包含一次
requier_once ‘文件名’ 必须包含一次

例:
数据提供者 data.php

//data.php
$info = [
	'name' => '张三',
	'age' => '18',
	'gender' => '男'
];

数据显示者 list.html

<html>
	<head>
		<title>显示个人信息</title>
	</head>
	<body>
		姓名:
		年龄:
		性别:
	</body>
</html>

逻辑处理者 controller.php

//想要使用data.php中的数据
include 'data.php';     //向上包含
include 'list.html';

然后进入到list.html里面

<html>
	<head>
		<title>显示个人信息</title>
	</head>
	<body>
		姓名:<?php echo $info['name'];?>
		年龄:<?php echo $info['age'];?>
		性别:<?php echo $info['gender'];?>
	</body>
</html>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值