好的,我已经创建了一个单独的类来连接到我的数据库,该类位于一个单独的php文件中
connect.php
class connect{
function __construct(){
// connect to database
}
function query($q){
// executing query
}
}
$connect = new connect();
现在,我创建了类$ connect的对象,当它在index.php这样的文件中使用时,它可以工作
的index.php
require_once('connect.php');
$set = $connect->query("SELECT * FROM set");
现在,这里工作正常我没有为类重新创建一个对象并直接执行查询,而在另一个名为header.php的文件中我有一个这样的类
的header.php
class header{
function __construct(){
require_once('connect.php');
// Here the problem arises i have to re declare the object of the connection class
// Without that it throws an error undefined variable connect
$res = $connect->query("SELECT * FROM table");
}
}
为什么它在index.php上工作而不在header.php上工作,我希望你理解我想说的是什么
答案 0 :(得分:2)
您的问题可能在于使用require_once()
而不是require()
。当你第一次包含connect.php
时它运行良好,因为变量被初始化并加载了类,但是当你再次尝试时require_once()
禁止重复包含,因此没有初始化变量。
无论如何在构造函数中使用include()
是......很少被证明是合理的。而包含初始化局部变量的文件也是个坏主意。
正确的代码如下:
<?php
require_once( 'connect.php');
require_once( 'header.php');
$connect = new Connect();
$header = new Header( $connect);
header.php
:
<?php
class Header{
protected $connection = null;
function __construct(Connect $connection){
$this->connection = $connection;
$res = $this->connection->query("SELECT * FROM table");
}
}
编辑:通过include 删除了关于nasted类声明的误导性部分代码(请参阅gordon的评论和编辑历史记录)...