0

私は 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();

?>

ありがとう :)

4

1 に答える 1

0

$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ブロックでそれらをキャッチすることはできません。

于 2013-08-05T01:52:15.510 に答える