0

クラスへのアクセスに問題があります。

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();
   ...
}

ユーザー.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 で、2 つのオブジェクト (1. errorhandler、2. user) を作成します。User クラスは、sqlconnection からの戻り値 (ブール値) をチェックします。間違ったパスワードを使用すると、偽のパスワードが返されることはわかっています。そのため、if ($conn) は print_r($errorhandler->errors) を正しく出力します。しかし、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配列は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.";

配列 $errorhandler->errors は、header.php では空です。

4

3 に答える 3

1

関数を呼び出す必要があります。値を直接取得することはできません。

1st->$errorhandler = new Errorhandler();

2nd->Errorhandler.php

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

3番目->

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

}

また、include() の代わりに require_once() を使用してみてください。

于 2013-11-14T14:05:37.907 に答える
0

require_onceの代わりに使ってみてくださいincluderequire_once何か問題が発生したときにエラーをスローし、スクリプトを強制終了します。これらのエラーは、ファイルと同じフォルダーにある error_log ファイルに表示されますincludeinclude警告のみを発行し、スクリプトを続行させます。私は個人的にrequire_onceどこでも使用しています。また、includeパスを再確認してください。

于 2013-11-14T14:05:58.577 に答える