PHP:是否可以在异常抛出中调用公共类函数?

时间:2014-01-29 11:06:42

标签: 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";

        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进行了这项工作,但如果有可能,我宁愿使用一个函数,而不是一个非常糟糕的想法。

1 个答案:

答案 0 :(得分:1)

您正在静态调用一个非静态函数。引用$ this在构造函数中也可能存在问题,特别是如果它失败了。

您还应该将您的异常更改为不包含字符串内的调用。

throw new Exception("Name (".self::getName().") is not supported");

将您的方法更改为静态访问。您还必须使变量$ demo static:

   protected static $name;

   public static function getName() {
       return self::$name;
   }

抛出异常只是为了获得回声并没有多大意义。您应该只是回显错误并退出或抛出异常:

    public function __construct() {
        throw new Exception("Name (".self::getName().") is not supported");
    }

OR

    public function __construct() {
        echo "Name (".self::getName().") is not supported";
        exit;
    }