程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 【精粹系列】PHP精粹,php

【精粹系列】PHP精粹,php

編輯:關於PHP編程

【精粹系列】PHP精粹,php


關於PHP整理的需要記憶和熟練掌握的內容

 

1. /* 語言結構 */ -------------------------------------------------------------------------------- 1. /* 語言結構 */ 
  eval(): eval() 函數把字符串按照 PHP 代碼來計算,該字符串必須是合法的 PHP 代碼,且必須以分號結尾(詳見 http://www.w3school.com.cn/php/func_misc_eval.asp)

2. /* 大小寫問題 */ ------------------------------------------------------------------------------- 2. /* 大小寫問題 */
- 類名、方法名、屬性名、函數名:不區分大小寫
- 變量名、常量名、元素下標:區分大小寫

3./* 變量函數 */ ---------------------------------------------------------------------------------- 3./* 變量函數 */
get_defined_vars    //返回由所有已定義變量所組成的數組(包括環境變量、服務器變量和用戶定義的變量)

4./* 常量相關函數 */ ------------------------------------------------------------------------------- 4./* 常量相關函數 */
defined
get_defined_constants

5./* 字符串的使用 */ ------------------------------------------------------------------------------- 5./* 字符串的使用 */
可將字符串當作一個字符的集合來使用,可獨立訪問每個字符。僅適用於單字節字符(字母、數字、半角標點符號),像中文等不可用
$str = "abcd";
echo $str[3];   // d
echo $str{0};   // a

6./* 【函數】 */ ---------------------------------------------------------------------------------- 6./* 【函數】 */
1) 函數的聲明是在編譯時,故先定義再調用,定義與調用無先後關系!
2) 文件只是代碼的載體,程序均在內存中執行!
3) 如果函數的定義在需要載入的文件內,則需要先載入該文件,否則調用出錯!
4) 函數的定義可以出現在其他的代碼段中,此時函數不會在編譯階段被執行
    只有被執行到時才會被定義!只有獨立定義時才會被編譯在內存中!
    如果出現在其他函數體內,也需要外層函數被調用時才被定義並生效!
5) 函數名不區分大小寫
6) 不允許重名,包括系統函數
7) 【可變函數】
    函數名可以用其他變量代替
    $func_name = "sayHello";
    $func_name();       //此時調用sayHello()函數
    注意:只有在調用時才能使用變量,定義時不允許!
8) 變量可作為函數名調用函數,數組元素值也可以!
9) 形式參數parameter,實際參數argument
    可以對參數傳遞 null,表示該形參不想傳遞值
    形參與實參之間既可值傳遞,也可引用傳遞。
    引用傳遞參數,應該在定義函數時就在形式參數前加上 & 符號,而此時調用函數實參必須為變量
    如何選擇使用哪種傳遞方式?
        a. 是否需要保證原始數據的完整性
        b. 是否需要增加效率
        c. 對大數據引用傳遞可節省內存
10) 參數默認值
        a. 函數的參數默認值必須是已經確定的值,不能是變量!
            只要在調用之前定義該常量,則可以使用常量作為參數默認值
        b. 函數默認值可以有多個,建議將有默認值的參數放在參數列表的最後面
           這樣可以在調用函數時,不賦予後面有默認值的參數值,否則會出錯
        c. 默認參數可以是非標量類型,比如數組、null
        d. 任何默認參數必須放在任何非默認參數的右側
11) 參數數量
    a. 形參數量多於實參數量
        報告警告級別錯誤,並以NULL代替
    b. 實參多於形參
        不報告錯誤,依次為形參賦值
    c. 不確定參數數量
        1) 一個形參都不定義,永遠都是實參多於形參
        2) 【可變數量參數】
            func_get_args() 獲取當前函數被調用時所有實參的值,返回一個所有實參值組成的數組
            func_get_arg()  獲取某個實參的值,通過索引值標識,e.g: func_get_arg(0)
            func_num_args() 獲取所有實參的數量
12)【return】返回值
    a. 函數只有一個返回值,可以通過返回一個數組來得到類似的結果,但可以有多條return語句
    b. return語句會立即中止函數的運行,並將控制權交回調用該函數的代碼行
    c. 可以返回包括數組和對象的任意類型
    d. 函數的返回也分值傳遞和引用傳遞(返回的是一個變量才可)
        1) 默認是值傳遞方式
        2) 引用傳遞方式:
            - 定義函數時,函數名前加上& 表示該函數可以返回引用
            - 調用函數時,函數名前加上& 表示取得函數返回的引用
                此時,函數外修改返回值,會修改函數內的該返回變量的值
            - 如果函數需返回引用,則需要返回一個變量才可以
            - 從函數返回一個引用,必須在函數聲明和指派返回值給一個變量時都使用引用操作符&
                function &returns_reference(){return $someref;}
                $newref =& returns_reference();
        3) 返回引用的作用




7. /* 【數據庫操作】 */ --------------------------------------------------------------------------- 7. /* 【數據庫操作】 */
#連接認證
mysql_connect        連接並認證數據庫
#發送SQL語句,接收執行結果
mysql_query            發送SQL語句
        僅對select, show, explain, describe語句執行成功返回一個資源標識符,其他語句成功返回true。執行失敗均返回false。
#處理結果
mysql_fetch_assoc    從結果集中取得一行作為關聯數組
        每次只取回一條,類似each
    結果集中記錄指針
mysql_fetch_row        從結果集中取得一行作為枚舉數組
mysql_fetch_array    從結果集中取得一行作為關聯數組,或數字數組,或二者兼有
    array mysql_fetch_array ( resource $result [, int $ result_type  ] )
    可選參數result_type可選值為:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH(默認)
mysql_free_result    釋放結果內存
#關閉鏈接
mysql_close            關閉連接




8. /* 自動加載對象*/ ------------------------------------------------------------------------------ 8. /* 自動加載對象*/
- 在試圖使用尚未被定義的類時自動調用 __autoload 函數
- 自動加載使用到的類名文件(根據類名找相應名稱的文件,故需類名與類文件名一致)
- 每個需要加載類的文件都需要存在__autoload函數
- 將__autoload函數寫入單獨的文件,每個需要用到類的文件再require該函數文件
- __autoload 參數是類名
function __autoload($class_name) {
    require_once $_SERVER["DOCUMENT_ROOT"] . "/class/$class_name.php";
}
    // $_SERVER["DOCUMENT_ROOT"] 當前運行腳本所在的文檔根目錄
- 可以通過類名,來推導出類所在的文件名!
- 如果一個項目存在多個自動加載函數時,定義一個可以完成加載的普通函數,並在函數之前使用spl_autoload_register注冊該函數。
# spl_autoload_register
- 注冊__autoload()函數
bool spl_autoload_register ([ callback $autoload_function ] )
- 可以注冊多個自動加載函數,先注冊的先執行
- 一旦注冊自動加載函數,__autoload就失效。
- 注冊函數時,參數為函數名(注意加引號);注冊方法時,參數為數組
# 注冊類或對象的方法為自動加載方法時,參數需為數組:
spl_autoload_register(array(__CLASS__, '__autoload'));
__CLASS__表示當前類名,若是對象可用$this,詳細見手冊



9. /*魔術方法*/ ----------------------------------------------------------------------------------- 9. /*魔術方法*/
__construct        構造方法
__destruct        析構方法
__clone            克隆對象
__sleep            序列化對象
__wakeup        反序列化對象
__autoload        自動加載,使用類但未找到時

__toString        對象被當作字符串使用時
__invoke        當嘗試以調用函數的方式調用一個對象時

10. /*重載 overload*/ --------------------------------------------------------------------------- 10. /*重載 overload*/
指動態地"創建"類屬性和方法
用戶可以自由的為對象添加額外的屬性,該特性就是重載。
所有的重載方法都必須被聲明為public。
當調用當前環境下未定義或不可見的類屬性或方法時,重載方法會被調用。
重載相關魔術方法的參數都不能通過引用傳遞。
# 屬性重載
- 處理不可訪問的屬性
屬性重載只能在對象中進行。
# 屬性重載對於靜態屬性無效
在靜態方法中,這些魔術方法將不會被調用。所以這些方法都不能被聲明為static。
__set        在給不可訪問的屬性賦值時
    public void __set(string $name, mixed $value)
    作用:批量管理私有屬性,間接保護對象結構
__get        讀取不可訪問的屬性的值時
    public mixed __get(string $name)
__isset        當對不可訪問的屬性調用isset()或empty()時
    public bool __isset(string $name)
__unset        當對不可訪問的屬性調用unset()時
    public void __unset(string $name)
# 方法重載
- 處理不可訪問的方法
__call            當調用一個不可訪問的非靜態方法(如未定義,或者不可見)時自動被調用
        public mixed __call(string $name, array $arguments)
__callStatic    當在調用一個不可訪問的靜態方法(如未定義,或者不可見)時自動被調用
        public static mixed __callStatic(string $name, array $arguments)
# $name參數是要調用的方法名稱。$arguments參數是一個數組,包含著要傳遞給方法的參數。


11./* 【類與對象相關函數】 */ --------------------------------------------------------------------11./* 【類與對象相關函數】 */
class_alias([$original [,$alias]])  給類取別名
class_exists($class [,$autoload])   檢查類是否已定義
interface_exists($interface [,$autoload])   檢查接口是否已被定義
method_exists($obj, $method)檢查類的方法是否存在
property_exists($class, $property)  檢查對象或類是否具有該屬性
get_declared_classes(void)  返回由已定義類的名字所組成的數組
get_declared_interfaces(void)   返回一個數組包含所有已聲明的接口
get_class([$obj])       返回對象的類名
get_parent_class([$obj])    返回對象或類的父類名
get_class_methods($class)   返回由類的方法名組成的數組
get_object_vars($obj)   返回由對象屬性組成的關聯數組
get_class_vars($class)  返回由類的默認屬性組成的數組
is_a($obj, $class) 如果對象屬於該類或該類是此對象的父類則返回TRUE
is_subclass_of($obj, $class)    如果此對象是該類的子類,則返回TRUE
get_object_vars($obj)   返回由對象屬性組成的關聯數組

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved