1.但只有以下類型的代碼受命名空間的影響,它們是:類(包括抽象類和traits)、接口、函數和常量。
2.如果一個文件中包含命名空間,它必須在其它所有代碼之前聲明命名空間,除了一個以外:declare關鍵字。
3。與PHP其它的語言特征不同,同一個命名空間可以定義在多個文件中,即允許將同一個命名空間的內容分割存放在不同的文件中。
4.__NAMESPACE__和namespace
? ? ? ? PHP支持兩種抽象的訪問當前命名空間內部元素的方法,__NAMESPACE__魔術常量和namespace關鍵字。
? ? ? ? 常量__NAMESPACE__的值是包含當前命名空間名稱的字符串。在全局的,不包括在任何命名空間中的代碼,它包含一個空的字符串。
? ? ? ? 關鍵字namespace可用來顯式訪問當前命名空間或子命名空間中的元素。它等價于類中的self操作符。
5.所有支持命名空間的PHP版本支持三種別名或導入方式:為類名稱使用別名、為接口使用別名或為命名空間名稱使用別名。
? ? 別名是通過操作符use來實現的。為了簡化操作,PHP還支持在一行中使用多個use語句。
6.全局空間
? ? ? 如果沒有定義任何命名空間,所有的類與函數的定義都是在全局空間,與 PHP 引入命名空間概念前一樣。在名稱前加上前綴\表示該名稱是全局空間中的名稱,即使該名稱位于其它的命名空間中時也是如此。
7.生成器
? ? 使用yield生成需要的值。
? ? ?當一個生成器被調用的時候,它返回一個可以被遍歷的對象.當你遍歷這個對象的時候(例如通過一個foreach循環),PHP 將會在每次需要值的時候調用生成器函數,并在產生一個值之后保存生成器的狀態,這樣它就可以在需要產生下一個值的時候恢復調用狀態。一旦不再需要產生更多的值,生成器函數可以簡單退出,而調用生成器的代碼還可以繼續執行,就像一個數組已經被遍歷完了。
? ? ? ?一個生成器不可以返回值: 這樣做會產生一個編譯錯誤。然而return空是一個有效的語法并且它將會終止生成器繼續執行。
? ? ? 使用yield關鍵字,yield會返回一個值給循環調用此生成器的代碼并且只是暫停執行生成器函數。除了生成簡單的值,也可以在生成值的時候指定鍵名。Yield可以在沒有參數傳入的情況下被調用來生成一個NULL值并配對一個自動的鍵名。
8.引用
? ? 在 PHP 中引用意味著用不同的名字訪問同一個變量內容。
? ? ?如果對一個未定義的變量進行引用賦值、引用參數傳遞或引用返回,則會自動創建該變量。
? ? 如果在foreach語句中給一個具有引用的變量賦值,被引用的對象也被改變。
? ? 引用與 foreach 語句
? ? ? ? ? ? ?$ref=0;
? ? ? ? ? ? $row=&$ref;
? ? ? ? ? ? foreach?(array(1,2,3)?as$row)?{
? ? ? ? ? ? ? ? ? //?do?something
? ? ? ? ? ?}
? ? ? ? ? ? echo$ref;//?3?-?last?element?of?the?iterated?array
? ? ? ? ? 引用不是指針。
? ? ? ? ? 引用傳遞:可以將一個變量通過引用傳遞給函數,其他表達式不能通過引用傳遞給函數。以下內容可以通過引用傳遞:變量,例如foo($a);New 語句,例如foo(new foobar());從函數中返回的引用
? ? ? ? ? 引用返回:與引用傳遞不同。引用傳遞只在參數前加一次&就行,而引用返回得在函數定義和調用兩個地方加,指出返回的是一個引用。
? ? ? ? ? 取消引用:當 unset 一個引用,只是斷開了變量名和變量內容之間的綁定。這并不意味著變量內容被銷毀了。
? ? ? ? ? 引用定位:很多語法結構是基于引用的,global,$this,