【知识重构】PHP基础知识再学习 (1-3天重学PHP)

PHP基础知识再学习

学习背景

在之前项目的使用或者是开发工作中,很少了解一门语言的基本内容,定义,或者说基本函数,都只是简单的根据需要什么功能,去找怎么实现这个功能,需要什么函数,需要怎么样去写这个函数,需要应用到哪个库。


长此以往,导致了一种陋习,那就是,每次需要一个功能,都只是知道该使用哪个函数,甚至可能说知道该怎么去使用哪个函数。
但是,对函数的具体参数,或者函数实现的功能的具体区别,了解甚微。
甚至,在用到一些很少用的基本函数的时候,还会需要想一想,基本函数是怎么调用的,是怎么写的,去百度一下基本函数的用法。

这极大的降低了效率,延长了我们开发需要的时间
并且,最重要的是,因为不了解基本函数的调用情况和传参情况,这就导致我们在写一个基于基本函数的自定义函数的时候,经常会报一些warning甚至是error,每次修复这些warning和error,又消耗了我们大量的时间,甚至可能因为这些东西,留下程序逻辑上的漏洞…


为了避免这种情况再次发生,在这里,再次学习PHP的基本知识,巩固PHP。


PHP 是什么?

  • PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。
  • PHP 脚本在服务器上执行
  • PHP 可免费下载使用
    PHP

首先我们需要了解PHP的提前知识

一些 HTTP状态码 ,作为正常调用php或者失败调用php的返回值

HTTP状态码的作用是:Web服务器用来告诉客户端,发生了什么事

状态码定义的范围原因分类
1XX100-101信息提示
2XX200-206成功
3XX300-305重定向
4XX400-415客户端错误
5XX500-505服务器错误

我们常见的大部分是以下状态码

200 OK 服务器成功处理了请求(这个是我们见到最多的)
301/302 Moved Permanently(重定向)请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置
304 Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存
404 Not Found 未找到资源
501 Internal Server Error服务器遇到一个错误,使其无法对请求提供服务


PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器


PHP是一种弱类型语言,这就意味着,我们在声明一个变量的时候,不需要告诉它变量的类型是什么,只需要声明变量,变量的类型会在声明变量的时候,自动转化。


PHP的变量,必须以下划线或者字母开头,不允许数字开头,不允许出现空格。

且PHP的变量和PHP的语法,会区分字母的大小写。


PHP变量的作用域有
  • global (全局) (函数内声明+global限定词,函数外直接声明)
  • local
  • static (运行完之后不被删除的局部变量)
  • parameter (参数作用域 函数声明的时候传入的参数)

PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
STATIC 变量仍然是函数的局部变量


PHP的输出方法
<?php
	$str = " hello world!";
	echo $str;                          //1
	print($str);                        //2
	var_dump($str);                     //3
	print_r($str);                      //4

我们常见并且常用的,输出方法就为这些,但是这些方法是有不同的,
首先,我们看方法的运行结果
输出方法
然后,我们看四种输出方法的不同。

echo 是 php 的一种语言结构,使用的时候,可以加括号,也可以不加括号。
作为一种语言结构,echo语句没有返回值
print同样是php的一种语言结构,不过,print需要加括号,并且,print只能用于输出一个字符串。(echo可以输出一个或者多个字符串),print有返回值(BOOL)

因为echo没有返回值,因此echo的运行速度比print运行速度快

和print_r,都是php的函数,作为函数,它有返回值,(尽管返回值用不到),
这两个函数,可以输出比较复杂的信息,比如数组 对象
不过,var_dump会同时输出数组的 类型 长度 和 内容。 而 print_r 只会输出 内容
因此,我们经常使用var_dump作为基础的调试行的使用


PHP的类型比较

php的判断相等,有 ===== 两种,分别判断为 松散比较相等(只比较 相等 ,不比较类型) , 严格比较相等 (既比较 相等,又比较 类型 相等)

对于 0 null 和 false 和 “”,
我们有如下说法

0 和 false 在数值上相等, 即他们有值, 但是类型不同 因此他俩之间,松散比较相等,严格比较不等
null 就没有值,没有类型,因此,null和 0 和 false ,松散比较也不相等
“” 类似于 null


!=!== 同理,不再解释

PHP常量

常量在php头,用 define 定义

define ("name","value","默认为false")

不难理解,其中第三个参数,是 是否大小写敏感
常量默认是全局有效


PHP基本语句

条件语句

当您编写代码时,您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。
在 PHP 中,提供了下列条件语句:

if块

  • if 语句 - 在条件成立时执行代码
  • if…else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
  • if…elseif…else 语句 - 在若干条件之一成立时执行一个代码块

switch块
工作原理:首先对一个简单的表达式 n(通常是变量)进行一次计算。将表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码。代码执行后,使用 break 来阻止代码跳入下一个 case 中继续执行。default 语句用于不存在匹配(即没有 case 为真)时执行。

<?php
switch (n)
{
case label1:
    如果 n=label1,此处代码将执行;
    break;
case label2:
    如果 n=label2,此处代码将执行;
    break;
default:
    如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>

循环语句

在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行。我们可以在代码中使用循环语句来完成这个任务。

在 PHP 中,提供了下列循环语句:

  • while - 只要指定的条件成立,则循环执行代码块
  • do…while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
  • for - 循环执行代码块指定的次数
  • foreach - 根据数组中每个元素来循环代码块

while循环

while 循环将重复执行代码块,直到指定的条件不成立。

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

do while循环

do…while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环。

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

for循环

for 循环用于您预先知道脚本需要运行的次数的情况。

for (初始值; 条件; 增量)
{
    要执行的代码;
}

参数:

  • 初始值:主要是初始化一个变量值,用于设置一个计数器(但可以是任何在循环的开始被执行一次的代码)。
  • 条件:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束。
  • 增量:主要用于递增计数器(但可以是任何在循环的结束被执行的代码)。
  • 注释:上面的初始值和增量参数可为空,或者有多个表达式(用逗号分隔)。

for each循环

foreach 循环用于遍历数组。(关联数组)

foreach ($array as $value)
{
    要执行代码;
}

数组

在 PHP 中创建数组
在 PHP 中,array() 函数用于创建数组:

$arr=array();

在 PHP 中,有三种类型的数组:

  • 数值数组 - 带有数字 ID 键的数组
  • 关联数组 - 带有指定的键的数组,每个键关联一个值
  • 多维数组 - 包含一个或多个数组的数组

数组的应用十分广泛,尤其是关联数组,十分广泛,数组的相关知识,一定要学好!!

这里,我们主要简单应用一下 关联数组

<?php
    $arr = array("peter"=>18,"tom"=>17,"jack"=>16); //关联数组的声明定义
    $arr['jacy']=15;                                //第二种定义方法
    foreach($arr as $x => $x_value)                 //foreach 遍历 关联数组
    {
        echo  "name:".$x." age:".$x_value."</br>";
    }

数组的排序

php自有的数组排序函数

  • sort() - 对数组进行升序排列
  • rsort() - 对数组进行降序排列
  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列

PHP超级全局变量

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

PHP 超级全局变量列表:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

从名字,不难看到,每个超级变量是干什么的

我们前边已经介绍过 $GLOBALS变量,
下面我们再看看常用(我用过的超级全局变量)

$_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。

SERVER,有很多东西,可以var_dump一下,观察一下输出值

<?php
	var_dump($_SERVER);

(偶尔需要检测和模拟请求)

GET 和 POST ,分别是两种方式传参获得的参数
FILES 可以获得传来的文件

(超级全局变量使用还是比较广泛,检测和获取数据,都要使用)



PHP魔术
PHP魔术常量

魔术常量它们的值随着它们在代码中的位置改变而改变

  • LINE
    文件中的当前行号。
  • FILE_
    文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
  • DIR
    文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
  • FUNCTION
    函数名称
  • CLASS
    类的名称
  • TRAIT
    Trait 的名字
  • METHOD
    类的方法名
  • NAMESPACE
    当前命名空间的名称(区分大小写)。
魔法方法

PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。

__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被称为魔术方法(Magic methods)。

详情看
https://www.php.net/manual/zh/language.oop5.magic.php


PHP 面向对象 (OPP)

What?! 都9102年了,你还有 对象?
new 一个! 自己玩

php的面向对象,和其他语言没有什么太大区别,鉴于篇幅长度,不再赘述


PHP表单

我们用超级全局变量 _GET_POST ,来接受表单数据
当我们获取到表单数据之后,就可以在后端进行基本的表单数据判断,然后返回相应的结果

表单数据的安全性和可靠性必须经过判断,并进行相应处理,防止恶意攻击

我们简单比较一下get方法和post方法

GETPOST
Url显示传参Body隐式传参
2048字节与设置有关,一般为最大为2-8M
回退数据不会重新提交回退数据会重新提交
可被缓存/添加书签不可以被缓存/添加书签
显性来看,POST的安全性比GET高,但是,因为传输协议问题,这两种方式,实际上都是不安全的

表单数据的处理
表单数据的处理

  • 表单数据有效性判断(比如手机号肯定没字母)
  • 表单数据有害性判断(XSS攻击和SQL注入)

如果,表单数据有害,要如何处理!
处理函数

一般,我们处理XSS攻击采用函数 htmlspecialchars() 对其进行转义。
这里可以采用自定义函数来处理输入数据

function test_input($data)
{
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

当然,如果在数据的输入的时候,就有一个有效性的判断,显然会更加方便高校,减少了函数的运行时间

针对SQL注入,我们一般用预处理方法

1.先预发送一个sql模板过去
2.再向mysql发送需要查询的参数

这样就避免了提交 恶意参数 利用SQL语法(待学习)的漏洞问题。


PHP session 和 cookie

主要用来识别用户
如果用户每次访问网页,都需要重新签发一个凭证,未免有些多余,如果我们可以保存这些凭证,在用户需要的时候,或者我们需要鉴别用户的时候,将它拿出来进行对比,就略去了重新签发的时间

cookie

cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

cookie的基本设定方法

<?php
$expire=time()+60*60*24*30;
setcookie("user", "runoob", $expire);
?>

cookie的取用方法,即 超级全局变量$_COOKIE;
cookie删除 即 cookie无效~过期
把cookie,set为过期时间即可

session

PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的

Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。

在使用session之前,必须进行 session_start()

<?php session_start(); ?>

session调用同样是 $_SESSION
session删除,可以用 unset 或者 destory

SESSION 和 COOKIE的区别

SESSIONCOOKIE
保存在服务器端保存在用户端
比较安全没有SESSION安全(用户伪造)
session如果很多,会占据服务器资源一般只可以用20个COOKIE

事实上,SESSION是基于COOKIE实现的


PHP json

在新版本的php中,json方法类已经内置了

我们在和前端页面进行交互的时候,传输的,往往是json格式的数据,这就要求

  • 我们把我们php各种类型的数据,编码为json
  • 我们从前端获得json数据,可以解码为php可识别的类型

JSON基本函数

json_encode($arr);   //编码

json_decode($arr);   //解码

其余php基本库知识(函数),在整理php面试题的时候,会单独另外开贴。


欢迎指正错误,谢谢各位观看。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值