每天5分鐘,細讀PHP手冊-8

include

查找順序:

  • 被包含文件先按參數給出的路徑尋找;
  • 如果沒有給出目錄(只有文件名)時則按照 include_path 指定的目錄尋找;
  • 如果在 include_path 下沒找到該文件則 include 最後纔在調用腳本文件所在的目錄和當前工作目錄下尋找;
  • 如果最後仍未找到文件則 include 結構會發出一條警告;這一點和 require 不同,後者會發出一個致命錯誤;
  • 如果定義了路徑——不管是絕對路徑(在 Windows 下以盤符或者 \ 開頭,在 Unix/Linux 下以 / 開頭)還是當前目錄的相對路徑(以 . 或者 … 開頭)——include_path 都會被完全忽略。例如一個文件以 …/ 開頭,則解析器會在當前目錄的父目錄下尋找該文件;

include語法:

  • 當一個文件被包含時,語法解析器在目標文件的開頭脫離 PHP 模式並進入 HTML 模式,到文件結尾處恢復。由於此原因,目標文件中需要作爲 PHP 代碼執行的任何代碼都必須被包括在有效的 PHP 起始和結束標記之中;
  • 如果在包含文件中定義有函數,這些函數不管是在 return 之前還是之後定義的,都可以獨立在主文件中使用。如果文件被包含兩次,PHP 5 發出致命錯誤因爲函數已經被定義,但是 PHP 4 不會對在 return 之後定義的函數報錯。推薦使用 include_once 而不是檢查文件是否已包含並在包含文件中有條件返回;
  • PHP 文件"包含"到一個變量中的方法是用輸出控制函數結合 include 來捕獲其輸出;

用戶自定義函數

  • 任何有效的 PHP 代碼都有可能出現在函數內部,甚至包括其它函數和類定義;
  • 函數名和 PHP 中的其它標識符命名規則相同。有效的函數名以字母或下劃線打頭,後面跟字母,數字或下劃線。可以用正則表達式表示爲:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*;
  • 函數無需在調用之前被定義,除非是下面兩種情況:1、當一個函數是有條件被定義時,必須在調用函數之前定義;2、函數中定義的函數,必須在外圍函數調用之後,內部的函數纔可以被調用;
  • PHP 中的所有函數和類都具有全局作用域,可以定義在一個函數之內而在之外調用,反之亦然;
  • PHP 不支持函數重載,也不可能取消定義或者重定義已聲明的函數;
  • 函數名是大小寫無關的,不過在調用函數的時候,使用其在定義時相同的形式是個好習慣;

函數參數

  • 參數是從左向右求值的;
  • PHP 支持按值傳遞參數(默認),通過引用傳遞參數以及默認參數。也支持可變長度參數列表;
  • 類型聲明允許函數在調用時要求參數爲特定類型。 如果給出的值類型不對,那麼將會產生一個錯誤: 在PHP 5中,這將是一個可恢復的致命錯誤,而在PHP 7中將會拋出一個TypeError異常;

函數返回值

php7增加了返回值的類型聲明。

可變函數

PHP 支持可變函數的概念。這意味着如果一個變量名後有圓括號,PHP 將尋找與變量的值同名的函數,並且嘗試執行它。可變函數可以用來實現包括回調函數,函數表在內的一些用途。
可變函數不能用於例如 echo,print,unset(),isset(),empty(),include,require 以及類似的語言結構。需要使用自己的包裝函數來將這些結構用作可變函數。

匿名函數

  • 匿名函數(Anonymous functions),也叫閉包函數(closures),允許 臨時創建一個沒有指定名稱的函數。最經常用作回調函數(callback)參數的值;
  • 匿名函數目前是通過 Closure 類來實現的;
  • 閉包函數也可以作爲變量的值來使用。PHP 會自動把此種表達式轉換成內置類 Closure 的對象實例。把一個 closure 對象賦值給一個變量的方式與普通變量賦值的語法是一樣的,最後也要加上分號;
  • 閉包可以從父作用域中繼承變量。 任何此類變量都應該用 use 語言結構傳遞進去。 PHP 7.1 起,不能傳入此類變量: superglobals、 $this 或者和參數重名;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章