12. PHP is a programming language
PHP是某個人用C寫CGI寫到快吐血,
憤而寫出的程式語言
既然是程式語言,所有C++、JAVA、
Python、…,他們能做到的事情,PHP基本上
都辦得到
你可以用它來寫Web server、BBS抓魚機器人、
Hadoop程式、NP作業…XD
13. PHP is a Interpreted language
No need to compile, PHP will compile then
execute.
不用compile的意思是他會在「每次」request
進來的時候compile,無論你有沒有改過那個
檔案。
– 很慢
所以我們通常會安裝一些快取OP code的外掛
34. include / require in PHP
在C++的時代,我們會把一份code拆成*.h檔和
*.cpp檔案,其中*.h每次compile都會一起
compile進去。
而*.cpp則是預先compile完畢,再用linker將他
們連結在一起。
Header file裡面只包含「定義」。
Source file裡面是程式碼本身。
35. include / require in PHP
而PHP呢,因為變數、class不需要先編譯才會
執行,因此我們就不需要拆成header file和
source file,直接全部include進來即可。
<?php
include “funcs.php”;
// OR
require “funcs.php”;
36. include / require in PHP
然而,有幾個issue要注意
1. PHP的include有分兩種,一種是include,
另一種是require,差別在於,若該檔案找
不到,include不會噴error,而require會。
一般情況下,你不會期待include一個檔案,
然後他找不到之後還繼續跑吧,所以我們
一般情況下會用require。
37. include / require in PHP
2. 目錄問題:
一般在include的時候,你很難確定到底你是
從哪裡開始include的,比方說:
// index.php
<?php
require “func/func.php”;
// in func/func.php
require “haha.php”; // include func/haha.php
但此時你的路徑是index.php那層
不是func資料夾內,因此haha.php會找不到
38. include / require in PHP
__DIR__ 是個神奇常數(Magic constants)
他會指向檔案本身的目錄,例如說我的檔案
放在/var/www/data/func/func.php
那麼__DIR__的值就是/var/www/data/func
ref:
http://php.net/manual/en/language.constants.predefined.php
39. include / require in PHP
因此我可以將剛剛的code改寫成
<?php
require __DIR__ . “/haha.php”;
如此一來,即使是PATH是在index.php執行的,
也不會找不到檔案。
40. include / require in PHP
3. 重複定義問題
如果PHP先宣告了某個function,之後再宣告
一次,就會出現重複定義錯誤
而使用require的話也是一樣,如果已經
require過一個檔案,之後再require一次,則
會有重複定義問題。
41. include / require in PHP
此時,我們會用require_once來解決
<?php
require_once “funcs.php”;
// 第二次不會作用,PHP會自己判斷是否require過了
require_once “funcs.php”;
所以我其實最常用require_once。