首页 > 解决方案 > php如何将全局更改为依赖注入

问题描述

我在我的函数中使用全局变量,经过研究,我发现这在 PHP 中是一种不好的做法,而不是我应该使用依赖注入,但是在将全局更改为依赖注入时出现问题。我的代码有什么问题?感谢帮助。

update.php(全局)

<?php
include 'db_data.php';

class robot{

public function robotUpdate($conn3){
       public function robotUpdate($conn3){
        global $nasa;
        global $id;
        $r_update="UPDATE robot_heartbeat SET last_process_id =$id  WHERE nasa_id=$nasa";
        $robot_u=$conn3->query($r_update);
    }

主文件

<?php
include 'db_data.php';
include 'db_sat.php';

$sql = "SELECT * FROM satellite1.show_activity ";
$result=$conn1->query($sql); //get data from db 1

while($row = $result->fetch_assoc()) {
        $sql2 = "INSERT INTO analysis_data.show_activity SET 
                show_activity_id='".$row["id"]."',
                game_show_id='".$row["game_show_id"]."',
                account_id='".$row["account_id"]."',
                account_code='".$row["account_code"]."',
                login_id='".$row["login_id"]."',
              $result=$conn3->prepare($sql2); //copy data from db1 into db2 
              $result->execute(); 
}
    $robot_u = new robot();
    $nasa = '2';
    $id = $row["id"];
    $robot_u->robotUpdate($conn3); 

我试过: update.php(依赖注入)

<?php
include 'db_data.php';

class robot{
 public function robotUpdate($conn3,$nasa,$id){
       public function robotUpdate($conn3){
        $r_update="UPDATE robot_heartbeat SET last_process_id =$id  WHERE nasa_id=$nasa";
        $robot_u=$conn3->query($r_update);
    }

**main.php**(dependency injection)
    $robot_u = new robot();
    $robot_u->robotUpdate($conn3,$nasa,$id); //call function first
    $nasa = '2';  //inject value
    $id = $row["id"];

标签: phpmysql

解决方案


该值在函数调用期间注入:

$robot_u->robotUpdate($conn3,$nasa,$id);

所以交换它们:

$robot_u = new robot();
$nasa = '2';  //inject value
$id = $row["id"];
$robot_u->robotUpdate($conn3,$nasa,$id);

也就是说,我注意到您将 db 连接传递到类中,您可能需要考虑,如果您在类中反复使用相同的连接来添加构造函数

function __construct( $db_connection ) {
   $this->db_connection = $db_connection;
}

并创建一个新的类实例并在那里传递数据库连接

$robot_u = new robot( $conn3 );

每次在那个类中,当你需要你的数据库连接时,使用$this->db_connection而不是传递$conn3

三是互联网上围绕 PHP OOP 的大量免费资源,建议阅读其中的一些 :-)


推荐阅读