PHP命名空間中使用Exception報錯not found

當一個php文件聲明瞭命名空間,則此文件中使用類時,必須指定是在哪一個命名空間中,不然就會報錯,緣由是在當前空間中找不到這個類,PHP核心類也會有這個問題,示例:php

namespace TestExc;

try {
	throw new Exception('throw exception');
} catch(Exception $ex) {
    echo $ex->getMessage();
}

運行以上代碼,報錯:函數

PHP Fatal error:  Class 'TestExc\Exception' not found in /private/var/folders/sr/1sh63qr542x9h61w4t7wrk200000gn/T/CodeRunner/Untitled.php on line 6

從報錯中也能夠看到,雖然Exception是PHP核心類,但程序只會在當前空間中尋找Exception類,有兩種解決方法spa

  1. 聲明使用全局空間的Exception
use \Exception;
  1. 使用Exception時聲明爲使用全局空間的
namespace TestExc;
try {
	throw new \Exception('throw exception');
} catch(\Exception $ex) {
	echo $ex->getMessage();
}

相關知識:code

  • 若是沒有定義任何命名空間,全部的類與函數的定義都是在全局空間,與 PHP引入命名空間概念前同樣。在名稱前加上前綴 \ 表示該名稱是全局空間中的名稱,即便該名稱位於其它的命名空間中時也是如此。
  • 對於函數和常量來講,若是當前命名空間中不存在該函數或常量,PHP 會退而使用全局空間中的函數或常量。
相關文章
相關標籤/搜索