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;
    }