我正在尝试找到一种方法来运行名为$connect
的变量,但不知道如何运行。
文件名: /engine/init.php
class Engine {
function MySQL() {
$connect = new PDO("mysql:host=$db_host;dbname=$db_name;charset=$db_char", $db_user, $db_pass);
}
}
文件名: /inc/database.php
require 'engine/init.php;
$engine = new Engine;
$conn = $engine->MySQL;
// Activate $connect variable
如果不清楚,请索取更多信息。
谢谢, CrAzYz _
答案 0 :(得分:2)
您必须更新课程以访问外部成员。 你有几种选择。
1:将连接存储在public
属性
class Engine {
public $connection;
public function MySQL() {
$this->connection = new PDO("mysql:host=$db_host;dbname=$db_name;charset=$db_char",$db_user, $db_pass);
}
}
这样你可以通过
检索它$engine = new Engine();
$engine->MySQL();
$conn = $engine->connection;
2:使函数返回连接
class Engine {
public function MySQL() {
return new PDO("mysql:host=$db_host;dbname=$db_name;charset=$db_char",$db_user, $db_pass);
}
}
通过这种方式,您的示例将起作用(如果您将Mysql用作函数):
$engine = new Engine();
$conn = $engine->MySQL();
3:更复杂但通常更好的方法:
class Engine {
protected $connection;
public function __construct($db_host, $db_name, $db_user, $db_pass $db_char = "utf-8") {
$this->connection = new PDO("mysql:host=$db_host;dbname=$db_name;charset=$db_char",$db_user, $db_pass);
}
public function MySQL() {
if ( !$this->connection instanceof PDO ) {
throw new Exception("Connection is not set up");
}
return $this->connection;
}
}
这几乎可以按照您的意愿工作,除了您无法直接访问连接(受保护),但只能通过MySql函数。这样,如果您忘记初始化连接,则会抛出异常。
$engine = new Engine("localhost", "db_name", "user", "pass");
$conn = $engine->MySQL(); // you don't even need to save the connection to a local variable, because the function only references the connection and won't start a new one
脚注: 如果你不得不像这样的问题,你应该查阅并了解更多有关OOP的信息。对于php,这是一个开始:http://php.net/manual/en/language.oop5.php
答案 1 :(得分:0)
即将逃跑,所以这有点快。
class Engine
{
public $db;
public function connect($host, $database, $charset, $user, $pass)
{
$this->db = new PDO("mysql:host=$host;dbname=$database;charset=$charset", $user, $pass);
}
}
我们首先要创建您要创建的Engine
类,我们已经在类上创建了一个名为db
的属性,我们可以使用->db
进行访问。我们还有一个名为connect
的方法,我们将数据库变量传递给它,以便PDO可以连接到我们的数据库。
现在我们将数据库凭据传递给我们的connect
方法,在生产环境中我真的建议不要对这些进行硬编码,而是使用类似环境变量的方法。
$engine = new Engine();
$engine->connect('127.0.0.1', 'example_database', 'UTF-8', 'root', 'root');
然后我们可以使用我们新发起的PDO
连接,如下所示:
$statement = $engine->db->query('SELECT * FROM some_table');
$result = $statement->execute();
至少应该给你一个起点,还有其他方法可以解决这个问题,但我不想偏离原始代码太远。
此外,如果有人发现任何错误,请告诉我,当我回来时我会更新它,需要在一秒钟内跑掉。