Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 可以调用实例';方法,而不在类内重新创建实例';范围_Php_Oop_Scope - Fatal编程技术网

Php 可以调用实例';方法,而不在类内重新创建实例';范围

Php 可以调用实例';方法,而不在类内重新创建实例';范围,php,oop,scope,Php,Oop,Scope,我对PHP比较陌生,我正在尝试创建一个脚本来记录try/catch块中的错误。我在尝试这样做时遇到了范围问题 首先,我试图使类实例成为一个全局变量,但没有成功 我知道每次调用“另一个类”时都可以创建一个新实例;但是,这将清除“errorhandler”中的“$errors”数组 我已经被困在这个问题上几个小时了,任何帮助都将不胜感激 <?php class errorhandler { private $errors = []; function log($e = '')

我对PHP比较陌生,我正在尝试创建一个脚本来记录try/catch块中的错误。我在尝试这样做时遇到了范围问题

首先,我试图使类实例成为一个全局变量,但没有成功

我知道每次调用“另一个类”时都可以创建一个新实例;但是,这将清除“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
        }
    }
}

p.S.
1/0
不是例外,这是一个运行时错误。您无法捕获带有
try
/
catch
块的对象。

但不要这样做。通过构造函数或其他方法将错误处理程序注入类中。此外,在这个特定实例中,您应该使用Ok!不会想到的,但这个想法是有道理的