php未定义的类变量

时间:2012-02-13 09:19:40

标签: php class require-once

好的,我已经创建了一个单独的类来连接到我的数据库,该类位于一个单独的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上工作,我希望你理解我想说的是什么

1 个答案:

答案 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的评论和编辑历史记录)...