如果在php中使用和不使用return有什么区别

  • 本文关键字:区别 return php 如果 php
  • 更新时间 :
  • 英文 :


我想知道,为什么在这段代码中使用return?返回变量后发生了什么?如果我回来和不回来有什么区别?

<?php

class Database{
private $conn;
public function Connect($host, $dbname, $user, $pass)
{

$this->conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
return $this->conn;
}
}

如果我返回和不返回有什么区别?

如果您捕获返回的值但不返回,不同之处在于您将获得null而不是PDO:

class Database
{
private $conn;
public function Connect($host, $dbname, $user, $pass)
{
$this->conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
}
}
$database = new Database();
$connection = $database->Connect('localhost', 'test', 'test', 'test');
var_dump($connection); // NULL

如果你没有捕捉到它,就没有什么区别(除了在未来捕捉到价值的潜力(。

此外,由于对象是通过引用(而不是值(传递的,因此捕获值有两个副作用:

  • 您可以直接不受控制地访问私人财产:

    $database = new Database();
    $connection = $database->Connect('localhost', 'test', 'test', 'test');
    $connection->rollBack(); // Why not?
    
  • 您可能可以使用该方法从同一个实例中获得两个不同的连接(该类不是设计用来处理的(:

    $database = new Database();
    $connection1 = $database->Connect('localhost', 'test', 'test', 'test');
    $connection2 = $database->Connect('localhost', 'test', 'test', 'test');
    var_dump($connection1, $connection2);
    
    object(PDO)#2 (0) {
    }
    object(PDO)#3 (0) {
    }
    

简而言之,这是一个毫无意义、令人困惑的设计。我不知道你对这个类有什么想法,但似乎不是这样。

Return在代码中用于在执行方法时为变量赋值。因此,使用您的示例:

// 1. Example without return in your code
// Here you can't use the database connection
$database = new Database();
$database->connect('host', 'dbname' 'user', 'password');
// you would need to implement this:
$connection = $database->getConnection(); 
// to use this:
$connection->prepare('DELETE name FROM people');
// 2. Example with return in your code
// Here you make use of the database connection
$database = new Database();
$connection = $database->connect('host', 'dbname' 'user', 'password');
$connection->prepare('DELETE name FROM people');

最新更新