原文地址: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来实现登录的拦截以及线程范围内用户信息的数据共享。
尾声
作为实现后端功能两种语言,在功能和使用上肯定还有其他的相似之处,上面是我目前整理的内容。另外的有待大家自己发掘。