PHP:是否可以在异常抛出内部调用公共类函数?
我试图让这个小演示运行,但我一直得到一个简单的字符串PHP:是否可以在异常抛出内部调用公共类函数?,php,class,exception,Php,Class,Exception,我试图让这个小演示运行,但我一直得到一个简单的字符串 "getConfiguration:Name (self::getName())is not supported" (使用self::getName()时) 或错误消息: PHP Notice: Undefined property: Demo::$getName (使用$this->getName()时) 这是我的代码: class Demo { protected $name = "demo";
"getConfiguration:Name (self::getName())is not supported"
(使用self::getName()时)
或错误消息:
PHP Notice: Undefined property: Demo::$getName
(使用$this->getName()时)
这是我的代码:
class Demo {
protected $name = "demo";
public function __construct() {
try {
if(true) {
throw new Exception("Name (self::getName())" .
"is not supported");
}
} catch(Exception $e){
echo $e->getMessage(); exit;
}
}
public function getName() {
return $this->demo;
}
}
这是不可能的还是我做错了什么
编辑:
在此之前,我使用的是
$this->name
,但如果可能的话,我宁愿使用一个函数,而不是一个非常糟糕的主意。您正在静态调用一个非静态的函数。在construcotr中引用$this也可能有问题,尤其是在它失败的情况下
您还应该将异常更改为不将调用包含在字符串中
throw new Exception("Name (".self::getName().") is not supported");
将方法更改为静态访问。您还必须将变量$demo设置为静态:
protected static $name;
public static function getName() {
return self::$name;
}
仅仅为了得到回音而抛出异常没有多大意义。您应该只回显错误并退出,或者引发异常:
public function __construct() {
throw new Exception("Name (".self::getName().") is not supported");
}
或
您不能在异常中执行此操作,但您可以通过为任何错误注册\u关闭\u函数来实现这一点。您将获得一个普通字符串,因为您使用try/catch捕获异常,然后使用
echo
将其降级为字符串。通过触发异常并立即取消它,您希望实现什么?他是对的。要么抛出异常并让它由任何错误处理程序处理,要么只是回显并退出。它将抛出如下错误:“在不在对象上下文中使用$this”也将其更改为静态。请参见Alvaro G.Vicario对问题的评论。你的逻辑没有那么有道理。非常感谢,现在我发现我的想法有缺陷了
public function __construct() {
echo "Name (".self::getName().") is not supported";
exit;
}