PHP与Spring Boot在实现功能上的比较

原文地址:PHP与Spring Boot在实现功能上的比较 - Pleasure的博客

下面是正文内容:

前言

最近在学Spring Boot后端框架,在功能实现上发现了与PHP存在着一定的可比性。

这篇就单独拎出来进行比较一下。

正文

就例举一些功能上的重叠以及大致的代码实现思路

变量类型的转换

显示类型的转换,使用强制转换的语法

php中

$stringVar = "10"; // 字符串变量
$intVar = (int) $stringVar;
echo $intVar;

SpringBoot中

String stringVar = "10";
int intVar = Integer.parseInt(stringVar);
System.out.println(intVar);

键值对数据结构

php中的关联数组和SpringBoot中的Map类型存在一定的相似性

php中

$map = array("key1" => "value1","key2" => 123,"key3" => true
);
echo $map["key1"]; // 输出:value1
echo $map["key2"]; // 输出:123
echo $map["key3"]; // 输出:true

SpringBoot中

Map<String, Object> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", 123);
map.put("key3", true);
System.out.println(map.get("key1")); // 输出:value1
System.out.println(map.get("key2")); // 输出:123
System.out.println(map.get("key3")); // 输出:true

不同路径的访问与响应

返回HTTP响应

在功能上php和SpringBoot都支持返回HTTP响应,下面举几个具体的例子。

php中

设置状态码

<?php
http_response_code(200);

设置重定向

<?php
header("Location: /hello", true, 302);

设置响应头

<?php
header("Content-Type: text/plain");

设置响应内容

<?php
echo "Hello, world!";

SpringBoot中

设置状态码

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;@RestController
public class MyController {@GetMapping("/hello")public ResponseEntity<String> hello() {return new ResponseEntity<>("Hello, world!", HttpStatus.OK);}
}

设置重定向

import org.springframework.web.bind.annotation.*;@RestController
public class MyController {@GetMapping("/redirect")public void redirect(HttpServletResponse response) throws IOException {response.sendRedirect("/hello");}
}

设置响应头

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;@RestController
public class MyController {@GetMapping("/hello")public ResponseEntity<String> hello() {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.TEXT_PLAIN);return new ResponseEntity<>("Hello, world!", headers, HttpStatus.OK);}
}

设置响应内容(略)

函数的使用

php中

函数声明

function add($a, $b) {return $a + $b;
}

参数传递

function greet($name) {echo "Hello, " . $name . "!";
}
greet("John");

返回值

function multiply($a, $b) {return $a * $b;
}
$result = multiply(2, 3);

函数调用

$sum = add(3, 5);

函数作用域

function myFunction() {// 在函数中定义的函数只能在该函数中使用
}

SpringBoot中

函数声明

public int add(int a, int b) {return a + b;
}

参数传递

public void greet(String name) {System.out.println("Hello, " + name + "!");
}
greet("John");

返回值

public int multiply(int a, int b) {return a * b;
}
int result = multiply(2, 3);

函数调用

int sum = add(3, 5);

函数作用域

public class MyService {public void myMethod() {// 在类中定义的函数可以在整个类中使用}
}

数据库操作

php和SpringBoot中都存在连接数据库的操作

php中

数据库连接配置

$servername = "localhost";
$username = "root";
$password = "123456";

执行SQL查询

$stmt = $conn->prepare("SELECT * FROM my_table");
$stmt->execute();
$rows = $stmt->fetchAll();

事务管理(略)

SpringBoot中

数据库连接配置

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456

执行SQL查询

List<Map<String, Object>> rows = jdbcTemplate.queryForList("SELECT * FROM my_table");

事务管理

@Transactional
public void performTransaction() {// 执行数据库操作
}

储存用户登录状态

php中

在php中通常通过会话管理或者cookie设置来储存用户的登录状态。在不同请求间共享用户信息。

SpringBoot中

在SpringBoot中通常通过拦截器加上ThreadLocal来实现登录的拦截以及线程范围内用户信息的数据共享。

尾声

作为实现后端功能两种语言,在功能和使用上肯定还有其他的相似之处,上面是我目前整理的内容。另外的有待大家自己发掘。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/754979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Web】浅聊Hessian反序列化之打Spring AOP——JNDI

目录 前言 简单分析 EXP 前言 前文&#xff1a;【Web】浅聊Java反序列化之Rome——关于其他利用链-CSDN博客 前文里最后给到一条HotSwappableTargetSource利用链&#xff0c;就是我们今天PartiallyComparableAdvisorHolder链子的前半段(触发恶意类的toString方法)&#xf…

Redis中的String编码转换底层原理及6.0新特性

String编码转换底层原理 String对象为什么把大于39字节或者44字节的字符串编码为raw&#xff0c;小于的时候编码为embstr? 在Redis3.2以前的版本中,SDS作为字符串类型中存储字符串内容的结构&#xff0c;源码如下&#xff1a; 3.2版本SDS结构 struct sdshdr {// 记录buf数…

华岳M9制造企业管理软件业务流程 2/4

华岳M9制造企业管理软件业务流程 2/4 步骤3 初始一、应收账款初始余额二、应付账款初始余额三、出纳账项初始余额四、会计账项初始余额五、盘点入库六、存货细目七、存货属性设置八、存货存量控制九、存货价格管理十、月末处理 步骤4 技术一、存货目录二、存货细目三、仓库绑定…

nginx代理服务器配置

nginx代理服务器配置 需要配置环境需求 1、一台1.1.1.1服务器&#xff0c;一台2.2.2.2服务器 前端包路径在1.1.1.1 /etc/dist 下 后端服务在2.2.2.2 上 暴露端口为9999 2、需求 现在需要访问 1.1.1.1:80访问到2.2.2.2 上面的9999后端服务 3、配置nginx ①&#xff1a;在…

【深度学习实践】面部表情识别,深度学习分类模型,mmpretrain用于分类的实用教程,多任务网络头

文章目录 数据集数据集的进一步处理转换training.csv转换validation.csv 剔除无法使用的图片数据选择mmpretrain框架来训练配置四个文件改写base model改写base datasetsschedulesdefault_runtime 总配置开始训练训练分析考虑在网络上增加facial_landmarks回归head考虑是否可以…

B树B+树,字典树详解,哈夫曼树博弈树

目录 B树&#xff1a;B-Tree B树 字典树&#xff1a;Trie Tree 哈夫曼树 博弈树 B树&#xff1a;B-Tree 多路平衡搜索树 1.M阶B树&#xff0c;就是M叉&#xff08;M个指针&#xff09;。 2.每个节点内记录个数<M-1。 3.根节点记录个数>1。 4.其余节点内记录个数&…

人工智能技术的不当利用与风险

目录 前言1 视频篡改技术的滥用1.1 虚假信息传播与社会动荡1.2 对公众信任的破坏与舆论混乱 2 隐私泄露与监视风险2.1 个人信息安全与数据滥用风险2.2 社会稳定与个人自由权利的平衡 3 虚假评论与信息传播3.1 舆论操纵与社会意识形态的影响3.2 对信息可信度与公众信任的威胁 结…

Mysql迁移至达梦所遇问题汇总

问题与解决&#xff1a; 1: 建表语句中不允许出现类似如下语句&#xff1a; create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPKEY member_id (member_id) USING BTREE 2: SQL 错误 [22000]: 仅当指定列列表&#xff0c;且SET IDENTIT…

红与黑(bfs, acwing)

题目描述&#xff1a; 有一间长方形的房子&#xff0c;地上铺了红色、黑色两种颜色的正方形瓷砖。 你站在其中一块黑色的瓷砖上&#xff0c;只能向相邻&#xff08;上下左右四个方向&#xff09;的黑色瓷砖移动。 请写一个程序&#xff0c;计算你总共能够到达多少块黑色的瓷…

03 龙芯平台openstack部署搭建-keystone部署

#!/bin/bash #创建keystone数据库并授权&#xff0c;可通过mysql -ukeystone -ploongson验证授权登录 mysql -uroot -e “set password for rootlocalhost password(‘loongson’);” mysql -uroot -ploongson -e ‘CREATE DATABASE keystone;’ #本地登录 mysql -uroot -ploo…

【Linux】进程---概念---进程---优先级

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;Linux_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.操作系统(Operator System) 1.1 概念 1.2 设计OS的目的 1.3 定位 1.4 如何理解 "管理" 1.5 总结 1.6 系统调用和…

蓝桥杯刷题总结(Python组)

1、蛇形矩阵 解题思路&#xff1a;每次赋值后都对方向进行改变&#xff0c;一般上下左右就是&#xff08;-1&#xff0c;0&#xff09;&#xff0c;&#xff08;0&#xff0c;1&#xff09;&#xff0c;&#xff08;1&#xff0c;0&#xff09;&#xff0c;&#xff08;0&…

智慧城市物联网建设:提升城市管理效率与居民生活品质

目录 一、智慧城市物联网建设的意义 1、提升城市管理效率 2、改善居民生活品质 3、促进城市可持续发展 二、智慧城市物联网建设面临的挑战 1、技术标准与互操作性问题 2、数据安全与隐私保护问题 3、投资与回报平衡问题 三、智慧城市物联网建设的实施策略 1、制定统一…

Linux下安装多个nodejs并映射Jenkins

背景 需要Jenkins中切换多个Node&#xff0c;比如nodejs16和nodesjs18,所以在宿主机按照好这两个版本&#xff0c;然后再映射到Jenkins容器中 步骤 1.下载地址 https://nodejs.org/dist/ 放到 cd /opt/soft/2.解压 tar -xzvf node-v16.20.0-linux-x64.tar.gz tar -xzvf n…

STM32F4+薄膜压力传感器(FSR)AO模拟输出程序ADC模数转换器详解

前言&#xff1a;博主在使用STM32F4加薄膜压力传感器用来测量压力时&#xff0c;发现给的例程只有STM32F1系列的&#xff0c;而STM32F4系列库函数程序不太一致&#xff0c;博主实战解决了该问题&#xff0c;用STM32F4标准库开发。有关ADC模数转换器的详细知识点详情点击我的博文…

ChatGPT是什么,怎么使用,需要注意些什么?

一、ChatGPT 是什么&#xff1f; ChatGPT&#xff0c;全称聊天生成预训练转换器&#xff08;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是 OpenAI 开发的人工智能(AI)聊天机器人程序&#xff0c;于2022年11月推出。该程序使用基于GPT-3.5、GPT-4架构的…

关于物联网的技术与概念

什么是嵌入式系统&#xff1f; 嵌入式系统是以应用为中心&#xff0c;以计算机技术为基础&#xff0c;能够根据用户需求&#xff08;功能、可靠性、成本、体积、功耗、环境等&#xff09;灵活裁剪软硬件模块的专用计算机系统。它们通常用于特定的任务&#xff0c;具有高度的集…

基于java+springboot+vue实现的旅游信息管理系统(文末源码+Lw+ppt)23-464

摘 要 本系统为用户而设计制作旅游信息管理系统&#xff0c;旨在实现旅游信息智能化、现代化管理。本旅游信息管理自动化系统的开发和研制的最终目的是将旅游信息的运作模式从手工记录数据转变为网络信息查询管理&#xff0c;从而为现代管理人员的使用提供更多的便利和条件…

【C语言】空心正方形图案

思路&#xff1a; 1&#xff0c;两行两列打印* &#xff1a;第一行和最后一行&#xff0c;第一列和最后一列。 2&#xff0c;其他地方打印空格。 代码如下&#xff1a; #include<stdio.h> int main() { int n 0; int i 0; int j 0; while (scanf("…

centos创建并运行一个redis容器 并支持数据持久化

步骤 : 创建redis容器命令 docker run --name mr -p 6379:6379 -d redis redis-server --appendonly yes 进入容器 : docker exec -it mr bash 链接redis : redis-cli 查看数据 : keys * 存入一个数据 : set num 666 获取数据 : get num 退出客户端 : exit 再退…