可以在类中调用实例的方法而不在类的范围内重新创建实例吗?

时间:2013-08-05 01:50:03

标签: php oop scope

我对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();

?>

谢谢:)

1 个答案:

答案 0 :(得分:0)

您必须将全局$errorhandler变量导入本地范围:

class AnotherClass
{
    function __construct()
    {
        global $errorhandler;

        try {
            $not_possible = 1/0;
        } catch (Exception $e) {
            $errorhandler->log($e); # Doesn't work
        }
    }
}

P.S。 1/0不是例外,它是运行时错误。你无法抓住那些try / catch阻止的人。