我想知道,为什么在这段代码中使用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');