▷ PHP —— 一份前端开发工程师够用的PHP知识点(持续更新)

⌹ beat365官方 ⏱️ 2025-09-22 05:56:05 👤 admin 👁️‍🗨️ 4430 ❤️ 605
PHP —— 一份前端开发工程师够用的PHP知识点(持续更新)

PHP —— 一份前端开发工程师够用的PHP知识点(持续更新)

《工欲善其事,必先利其器》 本文只是记录本小菜鸡在工作中遇到的知识点,欢迎大家随时补充!

一、初识 PHP

首先,PHP 它是什么?PHP 它又能做什么?

PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言;PHP 脚本可以高效的在服务器上执行;PHP 可免费下载使用;PHP 文件可包含文本、HTML、JavaScript 代码和 PHP 代码;PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器;PHP 文件的默认文件扩展名是 “.php”;PHP 可以使用渲染模板,生成动态页面内容;PHP 可以创建、打开、读取、写入、关闭服务器上的文件;PHP 可以收集表单数据;PHP 可以发送和接收 cookies;PHP 可以添加、删除、修改您的数据库中的数据;PHP 可以限制用户访问您的网站上的一些页面;PHP 可以加密数据。

二、初识 MVC

不同于前端所识的 MVVM,MVC 全名是 Model View Controller,是模型(model)- 视图(view)- 控制器(controller)的缩写,这是一种使用“模型-视图-控制器”设计创建Web应用程序的模式,同时提供了对HTML、CSS和JavaScript的完全控制,它是一种软件设计典范。

Model (模型)是应用程序中用于处理应用程序数据逻辑的部分,通常体现在负责对数据库进行操作的部分;View (视图)是应用程序中处理数据显示的部分,通常体现在页面渲染的数据中,视图是依据模型(model)的数据进行渲染的;Controller (控制器)是应用程序中处理用户交互的部分,通常体现在负责从视图读取数据,控制用户输入,并向模型发送数据。

那么这种编程模式有什么优点?

MVC 使用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间;MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易;MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

三、初识内存

PHP 的内存拥有四个分区。

1.栈区

程序可以操作的部分,在这里,PHP 不存储数据,只运行程序代码。所拥有的空间小但运行速度快,避免存在死循环,需要及时释放。

2.代码段区

这里不存在任何的操作,只储存你的 PHP 程序代码。所拥有的空间小,避免存在多个程序代码,需要及时释放。

3.数据段区

存储一些 PHP 普通数据类型的数据,这里分为全局区和静态区。拥有的空间大且效率高。

4.堆区

存储复杂的 PHP 数据类型,空间大但是效率低。

四、安装和使用

如果你要在服务端使用 PHP:

找一台支持 PHP 的主机,你就能愉快的写代码,服务器是自动解析这些 PHP 文件的;如果服务器不支持 PHP ,那么需要安装 web 服务器(apache、nginx),再安装 PHP。

如果你要在本地电脑使用 PHP:

建议安装 phpstudy,它是一个环境集成软件,包含了 apache, mysql, nginx, ftp;把你的 PHP 代码挂载到 phpstudy 网站域名对应的文件夹上,开启之后就可以通过浏览器本地浏览调试。

五、语法

分两种情况,第一种情况是在原生 PHP 文件里面书写:

PHP 脚本在服务器上执行,然后将纯 HTML 结果返回给浏览器,所以 PHP 脚本可以放在文档中的任何位置。

// PHP代码

?>

原生的 PHP 文件通常包含了 HTML 标签和一些 PHP 脚本代码,例如我们输出一个 Hello World:

My first PHP page

echo "Hello World!";

?>

第二种情况是在 PHP 框架的模板文件里面的书写语法:

由于 PHP 的框架一般都遵循上面提及的 MVC 设计典范(例如 thinkphp 框架),有些时候我们需要在 HTML 文件里面输出 PHP 代码,则需要用下面这种语法书写:

{php}

// PHP代码

{/php}

例如给一个 HTML 标签输出的文本做判断,这时候我们可以这样写:

{foreach name="list" item="vo" key="k" }

{switch name="vo.gender" }

{case value="0"}未知{/case}

{case value="1"}男{/case}

{case value="2"}女{/case}

{/switch}

{/foreach}

六、变量

跟 JavaScript 一样,PHP 是弱类型语言,这意味着某些变量输出时可能会跟首次定义的数据类型不一样,且不会报错:

$a = 8;

$b = "123";

$a = $b;

echo $a; // 输出 “123”

?>

跟 JavaScript 一样,PHP 的变量,可以事先声明但不赋值,也可以即时声明,即刻使用。上述例子中,PHP 的变量都需要从一个 $ 符号开始,后面跟着变量的名称,其命名规则与 JavaScript 基本一致。

变量以 $ 符号开始,后面跟着变量的名称;变量名必须以字母或者下划线字符开始;变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ );变量名不能包含空格;变量名是区分大小写的($y 和 $Y 是两个不同的变量)。

七、数据类型

第一种,简单数据类型:

整型(int / integer):系统分配4个字节存储,表示整数类型;浮点型(float / double):系统分配8个字节存储,表示小数或者整型存储不下的整数;字符串类型(string):系统根据实际长度分配,表示字符串;布尔类型(bool / boolean):只有两个值。

第二种,复合数据类型:

对象类型(object):存放对象;数组类型(array):存放多个数据,可以是其他类型。

第三种,特殊数据类型:

资源类型(resource):存放资源数据,例如数据库,文件等数据;空类型(NULL):只有一个值 NULL,且不可被运算。

八、作用域

PHP 有四种不同的变量作用域,分别是:

local(局部作用域)global(全局作用域)static(静态作用域)parameter(参数作用域)

局部作用域和全局作用域互不相干扰,不可互相访问。如果要在局部作用域中访问一个全局变量,则需要 global 关键字:

$a = 123;

function test() {

global $a;

echo $a;

}

test();

// 输出 123

?>

另外,PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中,index 保存变量的名称,这个数组可以用来更新全局变量:

$a = 123;

function test() {

$GLOBALS['a'] = $GLOBALS['a'] + 1;

}

test();

echo $a;

// 输出 124

?>

为什么叫静态作用域?因为当一个函数完成时,它的所有变量都会被删除。如果你希望某个局部变量不要删除,就用 static 关键字进行声明局部变量,这个功能类似于 JavaScript 的闭包:

function test() {

static $a = 0;

echo $a;

$a++;

}

test();

test();

test();

// 依次输出:0,1,2 而不是每次都输出 0

?>

需要注意的是,它依然是一个局部变量,外部访问不到。

九、输出

echo(),输出一个或多个字符串;print(),只允许输出一个字符串,返回值总为1;var_dump($a),输出一个变量的数据类型和值;settype($a, 'int'),改变一个变量的数据类型。

十、类型比较

与 JavaScript 一致,弱类型比较包含松散比较和严格比较:

松散比较:使用两个等号比较,只比较值,不比较类型;严格比较:使用三个等号比较,除了比较值,还比较数据类型。

十一、常量

全局常量(define(name, value, case_insensitvie)):一般大写,第三个值可选是否对常量的大小写敏感,默认为false敏感;Class常量(const constant = value):constant 为常量名,一般为大写。

Class Person {

const NAME = "张三";

public function myName() {

echo "我是".self::NAME;

}

}

echo Person::NAME; // 输出张三

$p1 = new Person();

$p1 -> myName(); // 输出 我是张三

?>

十二、魔术常量

像 JavaScript 的 PI 常量一样,PHP 也既定了一些预定义常量。你可以理解为全局常量。

LINE

输出文件中,当前的行号:

echo '这是第' . __LINE__ . '行';

?>

FILE

输出当前文件所在位置的,完整文件名,如果在被包含文件中使用,则返回被包含的文件名:

echo '该文件位于'. __FILE__ . '文件中';

?>

DIR

输出当前文件所在的,目录,如果在被包含文件中使用,则返回被包含文件所在的,目录名称:

echo '该文件位于'. __DIR__ . '目录中';

?>

FUNCTION

输出函数被定义时的,名称:

function test() {

echo '函数名为'. __FUNCTION__ ;

}

test();

?>

CLASS

输出该类被定义时的,名称:

class test {

function _print() {

echo '类名为:' . __CLASS__ . "
";

echo '函数名为:' . __FUNCTION__ ; // 如果有这个,则输出该类声明的作用域下对应的,函数名称

}

}

$t = new test(); // test

$t->_print(); // _print

?>

TRAIT

用于声明一个,可以被并入到其他父类的,子类:

class Base {

public function sayHello() {

echo 'Hello ';

}

}

trait sayWorld {

public function sayHello() {

parent::sayHello(); // 调用父类的方法

echo 'World';

}

}

class MyHelloWorld extends Base {

use sayWorld;

}

$o = new MyHelloWorld();

$o -> sayHello(); // 输出 Hello World

?>

注意:从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

METHOD

输出一个类中的,方法名称:

function _print() {}

class test {

function _print() {

echo '类名为:' . __CLASS__ . "
";

echo '函数名为' . __METHOD__ ;

}

}

$t = new test();

$t->_print(); // 输出 test::_print

?>

NAMESPACE

输出当前命名空间的,名称:

namespace MyProject;

echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject"

?>

十三、超级全局变量

跟上面的常量不同,也与 JavaScript 的 Window 变量类似,PHP 既定了一些全局变量。

$GLOBALS

是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

$x = 75;

$y = 25;

function addition()

{

$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];

}

addition();

echo $z; // 输出 100

?>

$_SERVER

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

echo $_SERVER['PHP_SELF']; // /try/demo_source/demo_global_server.php

echo "
";

echo $_SERVER['SERVER_NAME']; // www.csdn.net

echo "
";

echo $_SERVER['HTTP_HOST']; // www.csdn.net

echo "
";

echo $_SERVER['HTTP_USER_AGENT']; // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

echo "
";

echo $_SERVER['SCRIPT_NAME']; // /try/demo_source/demo_global_server.php

?>

$_REQUEST

用于收集HTML表单提交的数据。

Name:

$name = $_REQUEST['fname'];

echo $name;

?>

$_POST

被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“post”。也可以用来收集 AJAX 的 post 数据。

Name:

$name = $_POST['fname'];

echo $name;

?>

$_GET

同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“get”。$_GET 也可以收集URL中发送的数据。

Test $GET

echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];

?>

$_FILES 待更新…

$_ENV 待更新…

$_COOKIE

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

setcookie("user", "csdn", time()+3600);

?>

.....

需要注意的是,setcookie 函数必须要置于 HTML 标签之前。

取回 cookie 和删除 cookie:

// 输出 cookie 值

echo $_COOKIE["user"];

// 查看所有 cookie

print_r($_COOKIE);

?>

// 设置 cookie 过期时间为过去 1 小时,即可删除

setcookie("user", "", time()-3600);

$_SESSION

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

session_start();

if(isset($_SESSION['views']))

{

$_SESSION['views']=$_SESSION['views']+1;

}

else

{

$_SESSION['views']=1;

}

echo "浏览量:". $_SESSION['views'];

?>

关于销毁 session 的方法:

session_start();

if(isset($_SESSION['views']))

{

unset($_SESSION['views']); // unset() 函数用于释放指定的 session 变量

}

session_destroy(); // 该函数彻底销毁 session

?>

十四、数组

声明方式:

$car = array("Volvo", "Audi", "Benz");

$cars = ["Volvo", "Bmw", "Posche", "Ferarri"];

?>

获取数组长度,跟 JavaScript 不一样,不是数组的内置属性,需要手动获取:

$carLength = count($car);

echo $carLength; // 输出 3

?>

遍历数组,在确定数组不为空的情况下,可以使用foreach,否则使用for:

for($x=0;$x<$countLength;$x++) {

echo $car[$x];

}

foreach($cars as $k => $v) {

echo $cars[$k];

// $k 是下标,$v 是每一项

}

?>

关联数组,就是为数组的每一个值指定键名:

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

echo "Peter is " . $age['Peter'] . " years old.";

?>

数组的排序,有多种排序方法:

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

十五、JSON

json_encode,将 PHP 变量转为 JSON 格式;json_decode,对 JSON 格式的数据进行解码,转为 PHP 变量;json_last_error,返回最后发生的错误。

十六、命名空间

命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。语法格式如下;

// 定义代码在 'MyProject' 命名空间中

namespace MyProject;

// ... 代码 ...

如果有多个命名空间存在同一文件下,当然这是极不建议的行为,就使用大括号分隔开:

namespace MyProject {

const CONNECT_OK = 1;

class Connection { /* ... */ }

function connect() { /* ... */ }

}

namespace AnotherProject {

const CONNECT_OK = 1;

class Connection { /* ... */ }

function connect() { /* ... */ }

}

?>

命名空间一般用来解决以下两类问题:

用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

十七、面向对象(Class)

太多了,不想写,看 文档 吧。平时如果用框架经常会用得到,很少有人写原生 PHP 了,所以最好还是看一下。

十八、表单

我们要非常清楚的认识到,一旦前端页面提交数据,与后端代码进行交互,这是唯一与后端代码进行互动的点。所以在安全性上我们要多加防范。

在获取 GET 请求数据时,由于 GET 是明文传输,所以要通过一些手段进行优化:

由于 PHP 代码的 $_SERVER[‘PHP_SELF’] 这个字段,非常容易被黑客利用,所以,在获取 GET 请求数据的时候,我们可以通过 htmlspecialcharts() ,对代码进行保护:

?php

$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';

if($q) {

......

}

?>

利用 trim() 函数去除用户输入数据中不必要的字符,例如空格或者tap换行符等;利用 stripslasher() 函数去除数据中的反斜杠;使用 empty() 函数检查数据是否为空;使用 preg_match() 进行一些正则表达式。

十九、总结

至此,原生 PHP,个人认为的,前端需要了解的知识,就这么多了。至于遇见一些没看过的 API ,就通过百度去查询吧。 很多东西还是跟 JavaScript 很相似的,大家需要多多思考,举一反三。 感谢你的阅读。

◈ 相关文章

南昌麻将游戏
⌹ 365bet正网

▷ 南昌麻将游戏

⏱️ 08-12 👁️‍🗨️ 787
十大经典轻音乐榜中榜
⌹ 365bet正网

▷ 十大经典轻音乐榜中榜

⏱️ 07-10 👁️‍🗨️ 1019
描写火的成语
⌹ 365bet正网

▷ 描写火的成语

⏱️ 08-07 👁️‍🗨️ 3352