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