函數的靜態變量php
1. 當該事件被觸發時,執行名爲 showHint() 的函數html
2.表單的下面是一個名爲 "txtHint" 的 <span>。它用做 showHint() 函數所返回數據的佔位符。document.getElementById("txtHint").innerHTML=xmlHttp.responseTextmysql
多進程模型:因爲PHP是多進程模型,不一樣請求間互不干涉,這樣保證了一個請求掛掉不會對全盤服務形成影響,固然,隨着時代發展,PHP也早已支持多線程模型。git
弱類型語言程序員
引擎(Zend)+組件(ext)的模式下降內部耦合。github
中間層(sapi)隔絕web server和PHP。web
語法簡單靈活,沒有太多規範。缺點致使風格混雜,但再差的程序員也不會寫出太離譜危害全局的程序。ajax
HP從下到上是一個4層體系:sql
若是PHP是一輛車,那麼車的框架就是PHP自己,Zend是車的引擎(發動機),Ext下面的各類組件就是車的輪子,Sapi能夠看作是公路, 車能夠跑在不一樣類型的公路上,而一次PHP程序的執行就是汽車跑在公路上。所以,咱們須要:性能優異的引擎+合適的車輪+正確的跑道。數據庫
Sapi經過經過一系列的接口,使得外部應用能夠和PHP交換數據並能夠根據不一樣應用特色實現特定的處理方法,咱們常見的一些sapi有:
PHP實現了一個典型的動態語言執行過程:拿到一段代碼後,通過詞法解析、語法解析等階段後,源程序會被翻譯成一個個指令(opcodes),而後 ZEND虛擬機順次執行這些指令完成操做。PHP自己是用C實現的,所以最終調用的也都是C的函數,實際上,咱們能夠把PHP看作是一個C開發的軟件。
PHP的執行的核心是翻譯出來的一條一條指令,也即opcode。
Opcode是PHP程序執行的最基本單位。一個opcode由兩個參數(op1,op2)、返回值和處理函數組成。PHP程序最終被翻譯爲一組opcode處理函數的順序執行。
HashTable是zend的核心數據結構,在PHP裏面幾乎並用來實現全部常見功能,咱們知道的PHP數組便是其典型應用,此外,在zend內部,如函數符號表、全局變量等也都是基於hash table來實現。
PHP的hash table具備以下特色:
Zval主要由三部分組成:
修改php中的session過時時間能夠修改php配置文件php.ini中的session.gc_maxlifetime便可。
當php每發出一次請求時,會有1/100的機率(默認值)觸發"session回收"。若是"session回收"發生,那就會檢查/tmp /sess_*的文件,若是最後的修改時間到如今超過了1440秒(gc_maxlifetime的值),就將其刪除,意味着這些session過時失 效。
session在瀏覽器端,只須要保存session ID(由server端生成的惟一ID)就能夠了。有兩種保存方式:在cookie中、在url裏面。若是cookie中保存session ID,就能夠看到瀏覽器的cookie中有一個PHPSESID變量。若是是URL傳遞的,就能夠看到形如:
index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381的URL。
變量都要初始化
不要複製粘貼,即便是要用到現成的代碼,也要一行一行的審閱後,再加入到新項目,由於經驗告訴咱們,這太容易出錯了,對於使用開源類這種大段代碼更須要
記錄一些必要的錯誤日誌,好比寫文件失敗、寫memcache失敗,socket鏈接失敗、讀寫數據庫失敗,日誌可以幫助出現問題時的快速定位,外部生產環境我我的是強烈建議關閉全部錯誤報告的;
雙引號中出現的變量建議加上大括號,至因而"${nider}at gmail.com"仍是"{$tom}at zendstudio.net"看我的習慣,我更喜歡後面一種;
AJAX傳數據的時候,不要將數據庫查出的數組直接json_encode後傳給客戶端,這樣作不只有必定的安全風險(字段名暴露),並且一些不須要的數據被傳出浪費帶寬,這條一樣適用於API接口
用$GLOBALS['var']代替global $var
autoload是個很靈活的東西
PHP的引用類型是很高效的,在進行復雜運算時建議使用
@符號抑制錯誤是很耗性能的,所以儘量的找到替代方案
SQL語句用雙引號,其中的值都用單引號,例如"INSERT INTO gril SET money='{$iMaxMoney}',age='18′"
用mysqli擴展代替mysql擴展
用mysqli_real_escape_string和mysqli_escape_string處理傳出sql語句中的變量
INERT DELEYED、INSERT IGNORE、SELECT DISTINCT…這種語句一般有意想不到的好效果
varchar類型並非不能超過255長度,而是超過了255,這個字段就不能創建索引了,因此,看你的實際須要了
PHP自動加載__autoload的工做機制 參考練習 simpleK
在這個例子中,no-autoload.php文件須要使用Person類,它使用了require_once將其包含,而後就能夠直接使用Person類來實例化一個對象。
但隨着項目規模的不斷擴大,使用這種方式會帶來一些隱含的問題:若是一個PHP文件須要使用不少其它類,那麼就須要不少的 require/include語句,這樣有可能會形成遺漏或者包含進沒必要要的類文件。若是大量的文件都須要使用其它的類,那麼要保證每一個文件都包含正確 的類文件確定是一個噩夢。
PHP5爲這個問題提供了一個解決方案,這就是類的自動裝載(autoload)機制。autoload機制可使得PHP程序有可能在使用類時才自動包含類文件,而不是一開始就將全部的類文件include進來,這種機制也稱爲lazy loading。
一般PHP5在使用一個類時,若是發現這個類沒有加載,就會自動運行__autoload()函數,在這個函數中咱們能夠加載須要使用的類。
"r" | 只讀方式打開,將文件指針指向文件頭。 |
"r+" | 讀寫方式打開,將文件指針指向文件頭。 |
"w" | 寫入方式打開,將文件指針指向文件頭並將文件大小截爲零。若是文件不存在則嘗試建立之。 |
"w+" | 讀寫方式打開,將文件指針指向文件頭並將文件大小截爲零。若是文件不存在則嘗試建立之。 |
"a" | 寫入方式打開,將文件指針指向文件末尾。若是文件不存在則嘗試建立之。 |
"a+" | 讀寫方式打開,將文件指針指向文件末尾。若是文件不存在則嘗試建立之。 |
"x" | 建立並以寫入方式打開,將文件指針指向文件頭。若是文件已存在,則 fopen() 調用失敗並返回 FALSE,並生成一條 E_WARNING 級別的錯誤信息。若是文件不存在則嘗試建立之。 |