[英]PHP Avoid using global inside a function
我如何避免使用global
訪問php函數中的變量。 我知道我可以將它們存儲為常量,但是我的變量包含sql且很多。 像這樣...
$selectSql = 'select name from table where name = :thisName' and year = :thisYear;
$selectSqlBind = array(":thisName" => $thisName,":thisYear" => $thisYear);
這是我目前的做法
function myFunction (){
global $selectSql;
global $selectSqlBind;
$addUser = $conn->prepare($selectSql);
$addUser->execute($selectSqlBind);
//Other Stuff goes on
}
我也可以
function myFunction ($selectSql,$selectSqlBind){
$addUser = $conn->prepare($selectSql);
$addUser->execute($selectSqlBind);
//Other Stuff goes on
}
但是我該怎么辦
function myFunction (){
$addUser = $conn->prepare($selectSql);
$addUser->execute($selectSqlBind);
//Other Stuff goes on
}
這就是您要使用的類。 例如,您可以輕松地擴展MySQLi類,保留所有功能,但添加自己的功能。 然后,您只需通過$this
而不是$conn
來引用MySQLi語句:
<?php
class DB extends mysqli {
const PASSWORD_SALT = "abc123";
public function AddUser($username, $password) {
$addUser = $this->prepare("INSERT INTO `users` (`username`, `password`) VALUES (:username, :password)");
$addUser->execute(array(":username" => $username, ":password" => md5(self::PASSWORD_SALT . $password)));
}
}
?>
如果您希望將兩個邏輯分開,那么這也是很有可能的。
您可以通過類變量$conn
(從類本身)引用$this->conn
來引用數據庫。 如果要在類外使用此變量,則必須將private $conn
轉換為public $conn
,然后可以使用$db = new DB(); $db->conn->prepare(/*etc*/);
來引用它$db = new DB(); $db->conn->prepare(/*etc*/);
$db = new DB(); $db->conn->prepare(/*etc*/);
:
<?php
class DB {
const PASSWORD_SALT = "abc123";
private $conn;
public function __construct() {
$this->conn = new mysqli("localhost", "foo", "bar", "foobar");
}
public function AddUser($username, $password) {
$addUser = $this->conn->prepare("INSERT INTO `users` (`username`, `password`) VALUES (:username, :password)");
$addUser->execute(array(":username" => $username, ":password" => md5(self::PASSWORD_SALT . $password)));
}
}
?>
為此,您應該使用函數參數,因此請傳遞查詢和綁定參數。
但是,數據庫連接本身應通過其他方法獲得。 要么仔細研究一些PHP框架以及它們如何解決此問題,要么繼續閱讀Singleton ,Registry Pattern或Dependency Injection Container等設計模式 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.