私はPHPに比較的慣れていないので、try / catchブロックからのエラーをログに記録するスクリプトを作成しようとしています。そうしようとすると、スコープの問題が発生しました。
まず、クラスインスタンスをグローバル変数にしようとしましたが、うまくいきませんでした。
'AnotherClass'が呼び出されるたびに新しいインスタンスを作成できることを私は知っています。ただし、これにより、「errorhandler」の「$ errors」配列がクリアされます。
私はこの問題に数時間立ち往生しており、どんな助けでも大歓迎です!
<?php
class errorhandler
{
private $errors = [];
function log($e = '')
{
print "Opps! An error occured: " . $e;
array_push($this->errors, $e);
}
}
# global $errorhandler; # Doesn't work...
$errorhandler = new errorhandler();
class AnotherClass
{
function __construct()
{
try {
$not_possible = 1/0;
} catch (Exception $e) {
$errorhandler->log($e); # Doesn't work
}
}
}
new AnotherClass();
?>
ありがとう:)
グローバル$errorhandler
変数をローカルスコープにインポートする必要があります。
class AnotherClass
{
function __construct()
{
global $errorhandler;
try {
$not_possible = 1/0;
} catch (Exception $e) {
$errorhandler->log($e); # Doesn't work
}
}
}
PS 1/0
も例外ではなく、ランタイムエラーです。try
/catch
ブロックでそれらをキャッチすることはできません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加