通过包括访问不同的类

时间:2013-11-14 13:53:57

标签: php class include

我在访问课程时遇到了问题。

的index.php

 include('includes/header.php');
 include('includes/step1.php');
 include('includes/footer.php');

的header.php

session_start();

include('php/classes/Errorhandler.php');

include('php/classes/User.php');

$errorhandler = new Errorhandler();

$user = new User();

// Test
print_r($errorhandler->errors);

...html

Errorhandler.php

class Errorhandler {
   public $errors = array();
   ...
}

user.php的

class User {
   public function __construct() {

   if($this->grab_computerid()) {
      if(!$this->grab_mandant()) {
         $errorhandler->errors[] = "102: There was an error.";
      }

      if(!$this->grab_os()) {
         $errorhandler->errors[] = "103: There was an error.";
      }
   } else {
      $errorhandler->errors[] = "101: There was an error.";
   }
}

private function grab_computerid() {
    $sqlconnection = new SqlConnection();

    $conn = $sqlconnection->db_connect();

    if ($conn) {
        $query = "SELECT Computer_Idn FROM " . DB_PC_TABLE . " WHERE DeviceName = ?";

        $params = array($this->get_hostname());

        if ($sqlconnection->query($query, $params)) {
            $computer_id = $sqlconnection->fetchRow();

            $this->set_computer_id($computer_id['Computer_Idn']);

            return true;
            echo "Test";
        } else {
            $errorhandler->errors[] = "Statement error occurred.";
        }
    } else {
        $errorhandler->errors[] = "Can't connect to database.";
        // test
        print_r($errorhandler->errors);
    }
    $sqlconnection->db_disconnect();
}
}

index.php包含构建网站的相关部分。在header.php中,我创建了两个对象(1. errorhandler,2。user)。 User类检查sqlconnection的return(boolean)。我知道,我使用了错误的密码并得到了错误。因此if($ conn)正确打印print_r($ errorhandler->错误)。但是当我想在step1.php中显示错误时,数组错误是空的。

step1.php

// show negative messages
if ($errorhandler->errors) {
   foreach ($errorhandler->errors as $error) {
   echo '<div class="alert alert-danger message"><strong>Error: </strong>' . $error . '</div>';    
      }
   }

我在header.php中测试了它,而且errors数组也是空的。因此,errors数组仅在User.php类中填充,但我想在step1.php中显示错误。包含有问题吗?


编辑: 希望更清楚:

的header.php

// load the class Errorhandler
require_once('php/classes/Errorhandler.php');

// load the class User
require_once('php/classes/User.php');

// create errorhandler object
$errorhandler = new Errorhandler();

// create user object
$user = new User();

print_r($errorhandler->errors);

我在类User:

中设置了一个错误
$errorhandler->errors[] = "Can't connect to database.";

header.php中的数组$ errorhandler-&gt;错误为空。

3 个答案:

答案 0 :(得分:1)

你必须调用一个函数。你无法直接获得价值。

一速&GT; $errorhandler = new Errorhandler();

2阶&GT; Errorhandler.php

class Errorhandler {
function error() //create a function like this
{
$error= /*any error*/;
return $error;
}
}

3rd-&GT;

if ($err=$errorhandler->error()) {
foreach ($err as $error) {
echo '<div class="alert alert-danger message"><strong>Error:</strong>'.$error.'</div>';
  }

}

还尝试使用require_once()而不是include();

答案 1 :(得分:0)

尝试使用require_once代替include。当出现问题时,require_once将抛出错误并终止脚本。这些错误应出现在与其中包含include的文件相同的文件夹中的error_log文件中。 include只会发出警告并让脚本继续运行。我个人在任何地方使用require_once。另外,请仔细检查include路径。

答案 2 :(得分:0)

您应该将$ errorhandler传递给User类。 像这样:

$user = new User($errorhandler);

在用户类中:

class User {
    protected $err;
    public function __construct($errorhandler) {
        $this->err = $errorhandler;
        //rest of your code
    }

    //rest of your code
}

或简单地添加:global $ errorhandler;在User构造函数中。