作為一種通用開源腳本語言赎瑰,PHP可以在不同的平臺上運(yùn)行(Windows召庞、LinuxUnix锡垄、MacOS X 等)沦零,它可以和目前幾乎所有的服務(wù)器相兼容(Apache、IIS 等)货岭,同時也提供了廣泛的數(shù)據(jù)庫支持路操。在學(xué)習(xí)PHP之前, 我們要知道PHP能做哪些事情疾渴,簡單列舉如下
- PHP 可以生成動態(tài)頁面內(nèi)容
- PHP 可以創(chuàng)建、打開屯仗、讀取搞坝、寫入、關(guān)閉服務(wù)器上的文件
- PHP 可以收集表單數(shù)據(jù)
- PHP 可以發(fā)送和接收 cookies
- PHP 可以添加魁袜、刪除桩撮、修改您的數(shù)據(jù)庫中的數(shù)據(jù)
- PHP 可以限制用戶訪問您的網(wǎng)站上的一些頁面
- PHP 可以加密數(shù)據(jù)
基本語法
變量
PHP中變量命名遵循以下規(guī)則:
- 變量以 $ 符號開始,后面跟著變量的名稱;
- 變量名必須以字母或者下劃線字符開始峰弹;
- 變量名只能包含字母數(shù)字字符以及下劃線(A-z店量、0-9 和 _ );
- 變量名不能包含空格并區(qū)分大小寫鞠呈;
PHP的變量作用域有四種:local融师、global、static蚁吝、parameter旱爆;
在所有函數(shù)外部定義的變量即全局變量可以被腳本中的任何部分訪問,想要訪問全局變量需要使用 global 關(guān)鍵字灭将。
<?php
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 輸出 15
?>
PHP 將所有全局變量存儲在一個名為 $GLOBALS[] 的數(shù)組中疼鸟。 index 保存變量的名稱。這個數(shù)組可以在函數(shù)內(nèi)部訪問庙曙,也可以直接用來更新全局變量空镜。
上面的實(shí)例可以寫成這樣:
數(shù)組中的元素可以按字母或數(shù)字順序進(jìn)行降序或升序排列。
- sort() - 對數(shù)組進(jìn)行升序排列
- rsort() - 對數(shù)組進(jìn)行降序排列
- asort() - 根據(jù)關(guān)聯(lián)數(shù)組的值捌朴,對數(shù)組進(jìn)行升序排列
- ksort() - 根據(jù)關(guān)聯(lián)數(shù)組的鍵吴攒,對數(shù)組進(jìn)行升序排列
- arsort() - 根據(jù)關(guān)聯(lián)數(shù)組的值,對數(shù)組進(jìn)行降序排列
- rsort() - 根據(jù)關(guān)聯(lián)數(shù)組的鍵砂蔽,對數(shù)組進(jìn)行降序排列
超級全局變量
PHP中預(yù)定義了幾個超級全局變量(superglobals) 洼怔,這意味著它們在一個腳本的全部作用域中都可用。 你不需要特別說明左驾,就可以在函數(shù)及類中使用镣隶。
PHP 超級全局變量列表:$GLOBALS, $_SERVER, $_REQUEST, $_POST, $_GET, $_FILES, $_ENV, $_COOKIE, $_SESSION;
$GLOBALS
$GLOBALS 是PHP的一個超級全局變量組,在一個PHP腳本的全部作用域中都可以訪問诡右。
$GLOBALS 是一個包含了全部變量的全局組合數(shù)組安岂。變量的名字就是數(shù)組的鍵。
以下實(shí)例介紹了如何使用超級全局變量 $GLOBALS:
$x = 75;
$y = 25;
function addition()
{
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
$_SERVER
$_SERVER 是一個包含了諸如頭信息(header)帆吻、路徑(path)域那、以及腳本位置(script locations)等等信息的數(shù)組。這個數(shù)組中的項(xiàng)目由 Web 服務(wù)器創(chuàng)建猜煮。不能保證每個服務(wù)器都提供全部項(xiàng)目次员;服務(wù)器可能會忽略一些败许,或者提供一些沒有在這里列舉出來的項(xiàng)目。
以下實(shí)例中展示了如何使用$_SERVER中的元素:
元素/代碼 | 描述 |
---|---|
$_SERVER['PHP_SELF'] | 當(dāng)前執(zhí)行腳本的文件名淑蔚,與 document root 有關(guān)市殷。例如,在地址為 http://example.com/test.php/foo.bar 的腳本中使用 |
$_SERVER['PHP_SELF'] | 將得到 /test.php/foo.bar束倍。FILE 常量包含當(dāng)前(例如包含)文件的完整路徑和文件名被丧。 從 PHP 4.3.0 版本開始,如果 PHP 以命令行模式運(yùn)行绪妹,這個變量將包含腳本名甥桂。之前的版本該變量不可用。 |
$_SERVER['GATEWAY_INTERFACE'] | 服務(wù)器使用的 CGI 規(guī)范的版本邮旷;例如黄选,"CGI/1.1"。 |
$_SERVER['SERVER_ADDR'] | 當(dāng)前運(yùn)行腳本所在的服務(wù)器的 IP 地址婶肩。 |
$_SERVER['SERVER_NAME'] | 當(dāng)前運(yùn)行腳本所在的服務(wù)器的主機(jī)名办陷。如果腳本運(yùn)行于虛擬主機(jī)中,該名稱是由那個虛擬主機(jī)所設(shè)置的值決定律歼。(如: www.runoob.com) |
$_SERVER['SERVER_SOFTWARE'] | 服務(wù)器標(biāo)識字符串民镜,在響應(yīng)請求時的頭信息中給出。 (如:Apache/2.2.24) |
$_SERVER['SERVER_PROTOCOL'] | 請求頁面時通信協(xié)議的名稱和版本险毁。例如制圈,"HTTP/1.0"。 |
$_SERVER['REQUEST_METHOD'] | 訪問頁面使用的請求方法畔况;例如鲸鹦,"GET", "HEAD","POST"跷跪,"PUT"馋嗜。 |
$_SERVER['REQUEST_TIME'] | 請求開始時的時間戳。從 PHP 5.1.0 起可用吵瞻。 (如:1377687496) |
$_SERVER['QUERY_STRING'] | query string(查詢字符串)葛菇,如果有的話,通過它進(jìn)行頁面訪問橡羞。 |
$_SERVER['HTTP_ACCEPT'] | 當(dāng)前請求頭中 Accept: 項(xiàng)的內(nèi)容熟呛,如果存在的話。 |
$_SERVER['HTTP_ACCEPT_CHARSET'] | 當(dāng)前請求頭中 Accept-Charset: 項(xiàng)的內(nèi)容尉姨,如果存在的話。例如:"iso-8859-1,*,utf-8"吗冤。 |
$_SERVER['HTTP_HOST'] | 當(dāng)前請求頭中 Host: 項(xiàng)的內(nèi)容又厉,如果存在的話九府。 |
$_SERVER['HTTP_REFERER'] | 引導(dǎo)用戶代理到當(dāng)前頁的前一頁的地址(如果存在)。由 user agent 設(shè)置決定覆致。并不是所有的用戶代理都會設(shè)置該項(xiàng)侄旬,有的還提供了修改 HTTP_REFERER 的功能。簡言之煌妈,該值并不可信儡羔。) |
$_SERVER['HTTPS'] | 如果腳本是通過 HTTPS 協(xié)議被訪問,則被設(shè)為一個非空的值璧诵。 |
$_SERVER['REMOTE_ADDR'] | 瀏覽當(dāng)前頁面的用戶的 IP 地址汰蜘。 |
$_SERVER['REMOTE_HOST'] | 瀏覽當(dāng)前頁面的用戶的主機(jī)名。DNS 反向解析不依賴于用戶的 REMOTE_ADDR之宿。 |
$_SERVER['REMOTE_PORT'] | 用戶機(jī)器上連接到 Web 服務(wù)器所使用的端口號族操。 |
$_SERVER['SCRIPT_FILENAME'] | 當(dāng)前執(zhí)行腳本的絕對路徑。 |
$_SERVER['SERVER_ADMIN'] | 該值指明了 Apache 服務(wù)器配置文件中的 SERVER_ADMIN 參數(shù)比被。如果腳本運(yùn)行在一個虛擬主機(jī)上色难,則該值是那個虛擬主機(jī)的值。(如:someone@runoob.com) |
$_SERVER['SERVER_PORT'] | Web 服務(wù)器使用的端口等缀。默認(rèn)值為 "80"枷莉。如果使用 SSL 安全連接,則這個值為用戶設(shè)置的 HTTP 端口尺迂。 |
$_SERVER['SERVER_SIGNATURE'] | 包含了服務(wù)器版本和虛擬主機(jī)名的字符串笤妙。 |
$_SERVER['PATH_TRANSLATED'] | 當(dāng)前腳本所在文件系統(tǒng)(非文檔根目錄)的基本路徑。這是在服務(wù)器進(jìn)行虛擬到真實(shí)路徑的映像后的結(jié)果枪狂。 |
$_SERVER['SCRIPT_NAME'] | 包含當(dāng)前腳本的路徑危喉。這在頁面需要指向自己時非常有用。FILE 常量包含當(dāng)前腳本(例如包含文件)的完整路徑和文件名州疾。 |
$_SERVER['SCRIPT_URI'] | URI 用來指定要訪問的頁面辜限。例如 "/index.html"。 |
$_REQUEST
PHP $_REQUEST 用于收集HTML表單提交的數(shù)據(jù)严蓖。
以下實(shí)例顯示了一個輸入字段(input)及提交按鈕(submit)的表單(form)薄嫡。 當(dāng)用戶通過點(diǎn)擊 "Submit" 按鈕提交表單數(shù)據(jù)時, 表單數(shù)據(jù)將發(fā)送至<form>標(biāo)簽中 action 屬性中指定的腳本文件。 在這個實(shí)例中颗胡,我們指定文件來處理表單數(shù)據(jù)毫深。如果你希望其他的PHP文件來處理該數(shù)據(jù),你可以修改該指定的腳本文件名毒姨。 然后哑蔫,我們可以使用超級全局變量 $_REQUEST 來收集表單中的 input 字段數(shù)據(jù):
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['fname'];
echo $name;
?>
魔術(shù)變量
PHP 向它運(yùn)行的任何腳本提供了大量的預(yù)定義常量。
不過很多常量都是由不同的擴(kuò)展庫定義的,只有在加載了這些擴(kuò)展庫時才會出現(xiàn)闸迷,或者動態(tài)加載后嵌纲,或者在編譯時已經(jīng)包括進(jìn)去了。
有八個魔術(shù)常量它們的值隨著它們在代碼中的位置改變而改變腥沽。
- LINE 文件中的當(dāng)前行號逮走。
- FILE 文件的完整路徑和文件名。如果用在被包含文件中今阳,則返回被包含的文件名师溅。
- DIR 文件所在的目錄。如果用在被包括文件中盾舌,則返回被包括的文件所在的目錄墓臭。
- FUNCTION 函數(shù)名稱(PHP 4.3.0 新加)。
- CLASS 類的名稱(PHP 4.3.0 新加)矿筝。自 PHP 5 起本常量返回該類被定義時的名字(區(qū)分大小寫)起便。
-
TRAIT Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起窖维,PHP 實(shí)現(xiàn)了代碼復(fù)用的一個方法榆综,稱為 traits。
Trait 名包括其被聲明的作用區(qū)域(例如 Foo\Bar)铸史。
從基類繼承的成員被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆蓋鼻疮。其行為 MyHelloWorld 類中定義的方法一致。優(yōu)先順序是當(dāng)前類中的方法會覆蓋 trait 方法琳轿,而 trait 方法又覆蓋了基類中的方法判沟。 - METHOD 類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區(qū)分大小寫)崭篡。
- NAMESPACE 當(dāng)前命名空間的名稱(區(qū)分大小寫)挪哄。
命名空間
PHP 命名空間(namespace)是在PHP 5.3中加入的,如果你學(xué)過C#和Java琉闪,那命名空間就不算什么新事物迹炼。 不過在PHP當(dāng)中還是有著相當(dāng)重要的意義。
PHP 命名空間可以解決以下兩類問題:
- 用戶編寫的代碼與PHP內(nèi)部的類/函數(shù)/常量或第三方類/函數(shù)/常量之間的名字沖突颠毙。
- 為很長的標(biāo)識符名稱(通常是為了緩解第一類問題而定義的)創(chuàng)建一個別名(或簡短)的名稱斯入,提高源代碼的可讀性。
命名空間運(yùn)用
PHP 命名空間中的類名可以通過三種方式引用:
- 非限定名稱蛀蜜,或不包含前綴的類名稱刻两,例如 $a=new foo(); 或 foo::staticmethod();。如果當(dāng)前命名空間是 currentnamespace滴某,foo 將被解析為 currentnamespace\foo磅摹。如果使用 foo 的代碼是全局的滋迈,不包含在任何命名空間中的代碼,則 foo 會被解析為foo偏瓤。 警告:如果命名空間中的函數(shù)或常量未定義杀怠,則該非限定的函數(shù)名稱或常量名稱會被解析為全局函數(shù)名稱或常量名稱。
- 限定名稱,或包含前綴的名稱厅克,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果當(dāng)前的命名空間是 currentnamespace橙依,則 foo 會被解析為 currentnamespace\subnamespace\foo证舟。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼窗骑,foo 會被解析為subnamespace\foo女责。
- 完全限定名稱,或包含了全局前綴操作符的名稱创译,例如抵知, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在這種情況下软族,foo 總是被解析為代碼中的文字名(literal name)currentnamespace\foo刷喜。
下面是一個使用這三種方式的實(shí)例:
file1.php 文件代碼
namespace Foo\Bar\subnamespace;
const FOO = 1;
function foo() {}
class foo
{
static function staticmethod() {}
}
file2.php 文件代碼
namespace Foo\Bar;
include 'file1.php';
const FOO = 2;
function foo() {}
class foo
{
static function staticmethod() {}
}
/* 非限定名稱 */
foo(); // 解析為 Foo\Bar\foo resolves to function Foo\Bar\foo
foo::staticmethod(); // 解析為類 Foo\Bar\foo的靜態(tài)方法staticmethod。resolves to class Foo\Bar\foo, method staticmethod
echo FOO; // resolves to constant Foo\Bar\FOO
/* 限定名稱 */
subnamespace\foo(); // 解析為函數(shù) Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // 解析為類 Foo\Bar\subnamespace\foo,
// 以及類的方法 staticmethod
echo subnamespace\FOO; // 解析為常量 Foo\Bar\subnamespace\FOO
/* 完全限定名稱 */
\Foo\Bar\foo(); // 解析為函數(shù) Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析為類 Foo\Bar\foo, 以及類的方法 staticmethod
echo \Foo\Bar\FOO; // 解析為常量 Foo\Bar\FOO
注意訪問任意全局類立砸、函數(shù)或常量掖疮,都可以使用完全限定名稱,例如 \strlen() 或 \Exception 或 \INI_ALL颗祝。
在命名空間內(nèi)部訪問全局類浊闪、函數(shù)和常量:
namespace Foo;
function strlen() {}
const INI_ALL = 3;
class Exception {}
$a = \strlen('hi'); // 調(diào)用全局函數(shù)strlen
$b = \INI_ALL; // 訪問全局常量 INI_ALL
$c = new \Exception('error'); // 實(shí)例化全局類 Exception
namespace關(guān)鍵字和NAMESPACE常量
PHP支持兩種抽象的訪問當(dāng)前命名空間內(nèi)部元素的方法,NAMESPACE 魔術(shù)常量和namespace關(guān)鍵字螺戳。
常量NAMESPACE的值是包含當(dāng)前命名空間名稱的字符串搁宾。在全局的,不包括在任何命名空間中的代碼倔幼,它包含一個空的字符串盖腿。
常量 NAMESPACE 在動態(tài)創(chuàng)建名稱時很有用,例如:
使用NAMESPACE動態(tài)創(chuàng)建名稱
namespace MyProject;
function get($classname)
{
$a = __NAMESPACE__ . '\\' . $classname;
return new $a;
}
關(guān)鍵字 namespace 可用來顯式訪問當(dāng)前命名空間或子命名空間中的元素凤藏。它等價(jià)于類中的 self 操作符奸忽。
namespace操作符,命名空間中的代碼
namespace MyProject;
use blah\blah as mine; // see "Using namespaces: importing/aliasing"
blah\mine(); // calls function blah\blah\mine()
namespace\blah\mine(); // calls function MyProject\blah\mine()
namespace\func(); // calls function MyProject\func()
namespace\sub\func(); // calls function MyProject\sub\func()
namespace\cname::method(); // calls static method "method" of class MyProject\cname
$a = new namespace\sub\cname(); // instantiates object of class MyProject\sub\cname
$b = namespace\CONSTANT; // assigns value of constant MyProject\CONSTANT to $b
別名/導(dǎo)入
PHP 命名空間支持 有兩種使用別名或?qū)敕绞剑簽轭惷Q使用別名揖庄,或?yàn)槊臻g名稱使用別名栗菜。注意PHP不支持導(dǎo)入函數(shù)或常量。
在PHP中蹄梢,別名是通過操作符 use 來實(shí)現(xiàn)的. 下面是一個使用所有可能的三種導(dǎo)入方式的例子:
- 使用use操作符導(dǎo)入/使用別名;
- 一行中包含多個use語句, 導(dǎo)入操作是在編譯執(zhí)行的疙筹,但動態(tài)的類名稱富俄、函數(shù)名稱或常量名稱則不是。
- 導(dǎo)入和動態(tài)名稱, 導(dǎo)入操作只影響非限定名稱和限定名稱而咆。完全限定名稱由于是確定的霍比,故不受導(dǎo)入的影響。
- 導(dǎo)入和完全限定名稱;
后備全局函數(shù)/常量
在一個命名空間中暴备,當(dāng) PHP 遇到一個非限定的類悠瞬、函數(shù)或常量名稱時,它使用不同的優(yōu)先策略來解析該名稱涯捻。類名稱總是解析到當(dāng)前命名空間中的名稱浅妆。因此在訪問系統(tǒng)內(nèi)部或不包含在命名空間中的類名稱時,必須使用完全限定名稱障癌,例如:
- 在命名空間中訪問全局類, 對于函數(shù)和常量來說凌外,如果當(dāng)前命名空間中不存在該函數(shù)或常量,PHP 會退而使用全局空間中的函數(shù)或常量涛浙。
- 命名空間中后備的全局函數(shù)/常量;
命名空間順序
自從有了命名空間之后康辑,最容易出錯的該是使用類的時候,這個類的尋找路徑是什么樣的了轿亮。
名稱解析遵循下列規(guī)則:
對完全限定名稱的函數(shù)疮薇,類和常量的調(diào)用在編譯時解析。例如 new \A\B 解析為類 A\B哀托。
所有的非限定名稱和限定名稱(非完全限定名稱)根據(jù)當(dāng)前的導(dǎo)入規(guī)則在編譯時進(jìn)行轉(zhuǎn)換惦辛。例如,如果命名空間 A\B\C 被導(dǎo)入為 C仓手,那么對 C\D\e() 的調(diào)用就會被轉(zhuǎn)換為 A\B\C\D\e()胖齐。
在命名空間內(nèi)部,所有的沒有根據(jù)導(dǎo)入規(guī)則轉(zhuǎn)換的限定名稱均會在其前面加上當(dāng)前的命名空間名稱嗽冒。例如呀伙,在命名空間 A\B 內(nèi)部調(diào)用C\D\e(),則 C\D\e() 會被轉(zhuǎn)換為 A\B\C\D\e() 添坊。
非限定類名根據(jù)當(dāng)前的導(dǎo)入規(guī)則在編譯時轉(zhuǎn)換(用全名代替短的導(dǎo)入名稱)剿另。例如,如果命名空間 A\B\C 導(dǎo)入為C贬蛙,則 new C() 被轉(zhuǎn)換為 *new A\B\C() *雨女。
在命名空間內(nèi)部(例如A\B),對非限定名稱的函數(shù)調(diào)用是在運(yùn)行時解析的阳准。例如對函數(shù) foo() 的調(diào)用是這樣解析的:在當(dāng)前命名空間中查找名為 A\B\foo() 的函數(shù)
嘗試查找并調(diào)用 全局(global) 空間中的函數(shù) foo()氛堕。在命名空間(例如A\B)內(nèi)部對非限定名稱或限定名稱類(非完全限定名稱)的調(diào)用是在運(yùn)行時解析的。下面是調(diào)用 new C() 及 new D\E() 的解析過程: new C()的解析:
- 在當(dāng)前命名空間中查找A\B\C類野蝇。
- 嘗試自動裝載類A\B\C讼稚。
new D\E()的解析:
- 在類名稱前面加上當(dāng)前命名空間名稱變成:A\B\D\E括儒,然后查找該類。
- 嘗試自動裝載類 A\B\D\E锐想。
為了引用全局命名空間中的全局類帮寻,必須使用完全限定名稱 new \C()。
namespace A;
use B\D, C\E as F;
// 函數(shù)調(diào)用
foo(); // 首先嘗試調(diào)用定義在命名空間"A"中的函數(shù)foo()
// 再嘗試調(diào)用全局函數(shù) "foo"
\foo(); // 調(diào)用全局空間函數(shù) "foo"
my\foo(); // 調(diào)用定義在命名空間"A\my"中函數(shù) "foo"
F(); // 首先嘗試調(diào)用定義在命名空間"A"中的函數(shù) "F"
// 再嘗試調(diào)用全局函數(shù) "F"
// 類引用
new B(); // 創(chuàng)建命名空間 "A" 中定義的類 "B" 的一個對象
// 如果未找到赠摇,則嘗試自動裝載類 "A\B"
new D(); // 使用導(dǎo)入規(guī)則固逗,創(chuàng)建命名空間 "B" 中定義的類 "D" 的一個對象
// 如果未找到,則嘗試自動裝載類 "B\D"
new F(); // 使用導(dǎo)入規(guī)則藕帜,創(chuàng)建命名空間 "C" 中定義的類 "E" 的一個對象
// 如果未找到抒蚜,則嘗試自動裝載類 "C\E"
new \B(); // 創(chuàng)建定義在全局空間中的類 "B" 的一個對象
// 如果未發(fā)現(xiàn),則嘗試自動裝載類 "B"
new \D(); // 創(chuàng)建定義在全局空間中的類 "D" 的一個對象
// 如果未發(fā)現(xiàn)耘戚,則嘗試自動裝載類 "D"
new \F(); // 創(chuàng)建定義在全局空間中的類 "F" 的一個對象
// 如果未發(fā)現(xiàn),則嘗試自動裝載類 "F"
// 調(diào)用另一個命名空間中的靜態(tài)方法或命名空間函數(shù)
B\foo(); // 調(diào)用命名空間 "A\B" 中函數(shù) "foo"
B::foo(); // 調(diào)用命名空間 "A" 中定義的類 "B" 的 "foo" 方法
// 如果未找到類 "A\B" 操漠,則嘗試自動裝載類 "A\B"
D::foo(); // 使用導(dǎo)入規(guī)則收津,調(diào)用命名空間 "B" 中定義的類 "D" 的 "foo" 方法
// 如果類 "B\D" 未找到,則嘗試自動裝載類 "B\D"
\B\foo(); // 調(diào)用命名空間 "B" 中的函數(shù) "foo"
\B::foo(); // 調(diào)用全局空間中的類 "B" 的 "foo" 方法
// 如果類 "B" 未找到浊伙,則嘗試自動裝載類 "B"
// 當(dāng)前命名空間中的靜態(tài)方法或函數(shù)
A\B::foo(); // 調(diào)用命名空間 "A\A" 中定義的類 "B" 的 "foo" 方法
// 如果類 "A\A\B" 未找到撞秋,則嘗試自動裝載類 "A\A\B"
\A\B::foo(); // 調(diào)用命名空間 "A\B" 中定義的類 "B" 的 "foo" 方法
// 如果類 "A\B" 未找到,則嘗試自動裝載類 "A\B"