原文地址: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来实现登录的拦截以及线程范围内用户信息的数据共享。

尾声

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

03-23 22:49