此文記錄自己學(xué)習(xí)PHP和mySQL的過程。之前在網(wǎng)上簡單地學(xué)習(xí)了一下這兩門語言泥张,并且自己編寫了PHP呵恢,可以正常連接mySQL,也可以插入數(shù)據(jù)圾结。但是自己總覺得還是不太清晰瑰剃。所以借了本O'REILLY的PHP,MySQL,JavaScript, & CSS。希望能夠理清一下編程思路筝野,學(xué)得更加通透些晌姚,對自己以后編寫項目有所幫助粤剧。
首先,來了解一下挥唠,這幾門語言主要負責(zé)些什么抵恋。PHP是負責(zé)主要的在服務(wù)器上的工作,MySQL是負責(zé)所有的數(shù)據(jù)宝磨,CSS和JavaScript則是管理網(wǎng)頁的展現(xiàn)弧关。然而JavaScript也能與PHP進行通信,無論什么時候需要更新一些服務(wù)器上的或是頁面上的信息唤锉。
PHP
PHP是相對松散的語言世囊。也就是它的變量類型不需要在使用前被聲明。字符串內(nèi)的數(shù)字可以被自動轉(zhuǎn)換為數(shù)字類型窿祥。
PHP是用 ‘$' 來定義變量的株憾。比如:$ my_counter = 1;
使用空格(whitespace)讓代碼變得更加整潔清晰晒衩,當(dāng)自己回頭再去查看的時候也比較容易理解嗤瞎。同時也幫助其他的開發(fā)人員去維護你的代碼。如果需要聲明一個數(shù)字變量听系,無論是Int類型還是Float類型都可以直接聲明贝奇。
例如:$ count = 17;$ count = 17.5靠胜;
PHP的變量起名規(guī)則
1. 以字母開始或 ‘_’(underscore)掉瞳;
2. 只能包含a-z, A-Z髓帽, 0-9 和 ‘_’ (underscore)菠赚;
3. 不能包含空格,如果一定包含兩個單詞郑藏,一定用 ‘_’ (underscore)來分開衡查;
4. 對大小寫是sensitive的,$High_Score與$high_score是不同的變量必盖。
PHP的常量(constants)
1. 聲明一個常量不需要用($)拌牲,一般以字符或下劃線開頭
2. 只能用define方法來賦值給常量 define ( 'TIREPRICE' , 100 ) ;
3.?在腳本中無法改變該值。
4.?與變量不同歌粥,常量貫穿整個腳本是自動全局的塌忽。
5. 盡量不要前后都使用(_)來起變量名。
設(shè)置常量失驶,使用 define() 函數(shù) - 它使用三個參數(shù):
首個參數(shù)定義常量的名稱? ? 第二個參數(shù)定義常量值? ? 可選的第三個參數(shù)規(guī)定常量名是否對大小寫不敏感土居。默認是 false。
簡短風(fēng)格 short style : $tireqty?非常方便,但是需要將register_globals配置選項置為on擦耀,由于安全性原因棉圈,該選項默認為off。
中等風(fēng)格?Medium style: $_POST[ ' tireqty ' ]?推薦使用
冗長風(fēng)格?Long style $HTTP_POST_VARS[ ' tireqty' ]?已經(jīng)被棄用
我們通常建議使用中等風(fēng)格來聲明變量眷蜓。如果你建立一個簡短風(fēng)格分瘾,然后把中等風(fēng)格賦值給它沒有安全問題,反而更容易被使用吁系。$tireqty = $_POST [ 'tireqty' ] ;
PHP的字符串規(guī)則
單引號是不會把文字里中以$開頭的字符串作為變量的德召。如果要把它當(dāng)做變量來看待那就需要用雙引號。如果字符串內(nèi)要使用單引號的話汽纤,不能直接使用上岗,這個和JavaScript一樣。需要轉(zhuǎn)義字符用“\”來解決單引號問題蕴坪。此外液茎,\t,\n辞嗡,\r在雙引號里才有效。
PHP還提供了多行數(shù)列的操作符“<<<”滞造,優(yōu)點是輸出大段HTML方便续室,不需要轉(zhuǎn)義,而且可以引用變量谒养⊥φ“<<<”之后跟隨任意你自己喜歡的名字(自定義分界符),并以此未結(jié)束买窟。之間文字打回車不會被顯示丰泊。里面的變量將可以使用,如果不需要出現(xiàn)變量可以用 “.”來連接始绍。此時就不會被解讀為變量了瞳购,而是正常輸出。
在使用(<<<)時亏推,還需注意的一點是学赛,標(biāo)識符結(jié)束符串(如:END)需要獨占一行,前后都不許再有內(nèi)容包括空格吞杭,否則這個PHP文件就相當(dāng)于廢了盏浇。
echo和print命令的區(qū)別
這兩個命令是十分相似的。但是print是一個函數(shù)方法需要用到一個參數(shù)芽狗,然而echo是PHP語言的結(jié)構(gòu)绢掰。在普通的文字輸出上,echo要比print稍微快一點,因為它不是一個函數(shù)不需要設(shè)置一個返回值滴劲。同時攻晒,因為echo它不是一個函數(shù),所以不能被用于大量復(fù)雜的表達式哑芹,但是print卻可以炎辨。
PHP的函數(shù)方法
Function是用來區(qū)分出為了實現(xiàn)不同特殊功能的代碼。比如這個代碼打印三行字聪姿,但是如果我要打印十幾個的話碴萧,就需要不停復(fù)制黏貼這些代碼,無疑是讓代碼變得更為復(fù)雜和龐大末购。但是用了function就只需要使用一次函數(shù)就可以打印十幾次破喻。它是代碼變得更簡潔并且可讀性更高。聲明function的方式與JavaScript一樣盟榴。
比如:
function longdate($timestamp){?
????return date("l F jS Y"曹质,$timestamp);
}
PHP的變量作用域(Variable Scope)
在PHP語言中擎场,你可以決定變量的作用域羽德,比如,只在函數(shù)里面使用迅办,或者是全域范圍的宅静,任何范圍都能被使用。
Local Variables(本地變量)是指變量被建立只被允許在函數(shù)中調(diào)用站欺。它是零時性的儲存姨夹,一旦函數(shù)完成也就不存在了。
Global Variables(全局變量)有些時候我們也需要全局變量矾策,因為你希望你所有的代碼都能調(diào)用到它磷账。當(dāng)需要聲明全局變量時,我們需要使用關(guān)鍵字global贾虽。不建議使用全局變量逃糟,實在沒有其他方法時,可以使用蓬豁。因為一般程序是被打碎成多個小零件履磨,這樣數(shù)據(jù)發(fā)生問題也是一些小問題容易被維護。但是如果上千行的代碼程序被發(fā)現(xiàn)你的全局變量出現(xiàn)了問題。那么將需要花非常大的精力與時間去維護它。同時携悯,建議在為全局變量起名時很洋,最好使用大寫字母。
Static Variables(靜態(tài)變量)當(dāng)你使用一個變量希望它只能在函數(shù)中被調(diào)用收苏,但是你也希望它能再下一次使用這個函數(shù)時琅捏,值不會被恢復(fù)到原來的值逢渔。這時我們就需要用到靜態(tài)變量聊品。同時需要注意的是飞蹂,靜態(tài)變量不能給予一個計算公式或者函數(shù),必須賦一個實際的值翻屈。
比如:
static $int = 0; //Allowed
static $int = 1+2; //Disallowed (will produce a Parse error)
static $int = sqrt(144); //Disallowed
Superglobal Variables(超級全局變量)PHP 中的許多預(yù)定義變量都是“超全局的”陈哑,這意味著它們在一個腳本的全部作用域中都可用。
這些超全局變量是:
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
這些超級全局變量名都是使用_下劃線和大寫字母伸眶,所以在起名時應(yīng)該避免重復(fù)以造成程序混亂惊窖。
PHP表達式(Expression)
布爾表達式,值得注意的一點是厘贼,在PHP中界酒,TRUE的值為“1”,而FALSE的值為NULL嘴秸,或者是空值毁欣。因為在一些語言里FALSE被定義為0或者-1。
此外岳掐,PHP會按照字面上的值(literals)理解去判斷變量類型凭疮。
比如:
$myname = "Brian";
$myage = 37;
echo "a: " . 73? ? ? ? ? ? ?. "<br/>"; //Numeric literal
echo "b: " . "Hello"? ? ? . "<br/>"; //String literal
echo "c: " . FALSE? ? ? . "<br/>"; //Constant literal
echo "d: " . $myname? . "<br/>"; //Variable string literal
echo "e: " . $myage? ? ?. "<br/>"; //Variable numeric literal
結(jié)果是:
a: 73 b: Hello c:? ? ? ? d: Brian? e: 37
PHP運算符(operators)
PHP提供了大量有用的運算符,比如計算串述,字符串和邏輯的運算符哭尝。“.”運算符用來連接字符串剖煌。
PHP 邏輯運算符(logical)
“or”返回值是布爾值。如果 $x 和 $y 至少有一個為 true逝淹,則返回 true耕姊。
“xor”返回值是布爾值。條件中不是A就是B栅葡。如果A就返回True茉兰,如果是B也返回True。但如果是A和B就返回False欣簇,如果即不是A也不是B就返回False规脸。所以條件符合的有且僅有一個為 true,則返回 true熊咽。
PHP 結(jié)合性運算符(associativity)
這類型的運算符是從右到左計算莫鸭。
Operator? ????????????????????????????????????????Description? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Example
NEW? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Create a new object
!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Logical NOT
~? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Bitwise NOT
++? ?--? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Increment and decrement
+ -? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Unary plus and negation
(int)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Cast to an integer? ? ? ? ? ? ? ? ? ? ? ? $c = (int) ($a / $b);
(double)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Cast to a float
(string)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Cast to a string
(array)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Cast to an array
(object)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Cast to an object
@? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Inhibit error reporting? ? ? ? ??
@是為了抑制錯誤顯示,讓用戶看不到横殴,提升用戶體驗被因。注意:只是抑制錯誤,但是錯誤還是存在的。
=? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Assignment
PHP條件表達式(Conditionals)
條件表達式是動態(tài)頁面的核心梨与,它能夠簡單地根據(jù)不同的條件創(chuàng)造出不同的頁面結(jié)果堕花。有三種表達方法:if,switch和粥鞋?(三目運算符)缘挽。這個和JavaScript都是一樣的。
PHP循環(huán)(Looping)
能快速地周而復(fù)始地工作直到事情發(fā)生為止呻粹。循環(huán)方式有:while壕曼,do……while和for。
PHP的函數(shù)與對象
函數(shù)的好處:
1. 簡潔
2. 減少語法和其他編寫程序的錯誤
3. 減少程序文件的加載時間
4. 同時減少執(zhí)行時間尚猿,因為每一個函數(shù)都僅僅被解析一次窝稿,無論它將被調(diào)用多少次。
5. 函數(shù)接受參數(shù)凿掂,這樣能夠被普遍使用伴榔,也同時能被特殊的情況使用。
PHP有上百種已經(jīng)編寫好的函數(shù)庄萎,使它成為一個豐富的語言踪少。
Include和require
require()的性能與include()相類似,都是包括并運行指定文件糠涛。不同之處在于:對include()語句來說援奢,在執(zhí)行文件時每次都要進行讀取和評估;而對于require()來說忍捡,文件只處理一次集漾。這就意味著如果可能執(zhí)行多次的代碼,則使用require()效率比較高砸脊。另外一方面具篇,如果每次執(zhí)行代碼時是讀取不同的文件,或者有通過一組文件迭代的循環(huán)凌埂,就使用include()語句驱显。
require的使用方法如:require("myfile.php"),這個語句通常放在PHP腳本程序的最前面瞳抓。PHP程序在執(zhí)行前埃疫,就會先讀入require()語句所引入的文件,使它變成PHP腳本文件的一部分孩哑。include使用方法和require一樣如:include("myfile.php")栓霜,而這個語句一般是放在流程控制的處理區(qū)段中。PHP腳本文件在讀到include()語句時横蜒,才將它包含的文件讀取進來叙淌。這種方式秤掌,可以把程式執(zhí)行時的流程簡單化。
include在用到時加載? ?require在一開始就加載
include/require_once后綴表示已加載的不加載
PHP系統(tǒng)在加載PHP程序時有一個偽編譯過程鹰霍,可使程序運行速度加快闻鉴。但include的文檔仍為解釋執(zhí)行。include的文件中出錯了茂洒,主程序繼續(xù)往下執(zhí)行孟岛,require的文件出錯了,主程序也停了督勺,所以包含的文件出錯對系統(tǒng)影響不大的話(如界頁面文件)就用include渠羞,否則用require。
require()和include()語句是語言結(jié)構(gòu)智哀,不是真正的函數(shù)次询,可以像php中其他的語言結(jié)構(gòu)一樣,例如echo()可以使用echo("ab")形式瓷叫,也可以使用echo "abc"形式輸出字符串a(chǎn)bc屯吊。require()和include()語句也可以不加圓括號而直接加參數(shù)。
include_once()和require_once()語句也是在腳本執(zhí)行期間包括運行指定文件摹菠。此行為和include()語句及require()類似盒卸,使用方法也一樣。唯一區(qū)別是如果該文件中的代碼已經(jīng)被包括了次氨,則不會再次包括蔽介。這兩個語句應(yīng)該用于在腳本執(zhí)行期間,同一個文件有可能被包括超過一次的情況下煮寡,確保它只被包括一次虹蓄,以避免函數(shù)重定義以及變量重新賦值等問題。
function_exists("function name")是判斷這個函數(shù)是否有效幸撕。
對象Object
面對對象(object-oriented programming OOP)讓函數(shù)提升到新的水平薇组。當(dāng)一些方法要被重用,那么就可以考慮把這些方法和數(shù)據(jù)放入到對象中去杈帐。一起想想看一個社交網(wǎng)站,它有很多部分組成专钉。一個組成部分是要管理所有的用戶函數(shù)挑童。比如讓新用戶注冊,和讓存在的用戶更改他們的信息跃须。一般來說站叼,我們會建立一些函數(shù)去管理這些并且請求MySQL數(shù)據(jù)庫去記錄所有的用戶。而我們知道對象后菇民,完全可以建立一個名為User的對象尽楔,并且把所有的數(shù)據(jù)與方法放入到這個對象中里投储。那么無論什么時候當(dāng)需要去操作一個用戶的數(shù)據(jù)時,我們就可以簡單地建立一個和User類有關(guān)的對象阔馋。對象中的數(shù)據(jù)被稱為屬性玛荞,對象中的函數(shù)被稱為方法。如果你發(fā)現(xiàn)需要類外一個類呕寝,這個類與User類很相似勋眯,但有些不同,這時我們就需要繼承User類下梢。那么原來的User類就被成為父類(superclass)客蹋,而新的類就被成為子類(subclass/derived class)。
聲明一個類(Declaring a Class)
在使用一個對象之前孽江,必須用關(guān)鍵字class定義一個類讶坯。定義一個類包含類名(它是大小寫sensitive的),類的屬性岗屏,和類的方法辆琅。可以使用 '->' 來給變量/屬性進行賦值担汤。這是變量不需要用$進行聲明涎跨。
構(gòu)造函數(shù)(Constructors)
在類里面帶有參數(shù)并且與類名相同的方法被稱為構(gòu)造函數(shù)。現(xiàn)在很多使用__construct來命名構(gòu)造函數(shù)崭歧。當(dāng)不再需要這個對象的時候隅很,就需要調(diào)用destructor,來釋放這個對象所占的內(nèi)存率碾。但是destructor不需要設(shè)計叔营,因為系統(tǒng)會自動釋放特定的內(nèi)存。除非你用到了動態(tài)內(nèi)存所宰,那么你就是要自己設(shè)計一個destructor告訴系統(tǒng)釋放哪些內(nèi)存绒尊。
聲明一個方法(Methods)
聲明一個方法與聲明一個函數(shù)非常類似,但還是有少許不同仔粥。比如婴谱,方法的命名開頭跟隨兩個下劃線(__)。$this是指代現(xiàn)在這個對象躯泰,并返回這個對象的屬性值谭羔。
靜態(tài)方法(static methods)
在php編程中,static關(guān)鍵字聲明一個屬性或方法是和類相關(guān)的麦向,而不是和類的某個特定的實例相關(guān)瘟裸,因此,這類屬性或方法也稱為“類屬性”或“類方法”
如果訪問控制權(quán)限允許诵竭,可不必創(chuàng)建該類對象而直接使用類名加兩個冒號“::”調(diào)用话告。
<?php
User::pwd_string();
class User
{
? ? static function pwd_string()
????{
????????echo "Please enter your password";
????}
}
?>
聲明屬性(Declaring Properties)
聲明屬性不是必須在類里的兼搏,類里沒有屬性和方法但仍然是合法的。但是為了幫助自己和其他人更好地理解與維護代碼沙郭,還是建議把屬性的聲明放入到類里佛呻。
<?php
$object1 = new User();
$object1->name = "Alice";
echo $object1->name;
class User {}
?>
聲明一個常量(Declaring Constant)
定義一個常量需要在常量名前加const。常量名一般使用大寫字母棠绘,使他們變得更為突出件相。當(dāng)常量/變量使用關(guān)鍵字self和兩個冒號(::)時,就能夠被直接引用氧苍。
屬性和方法的作用域(Property and Method Scope)
PHP提供了3個關(guān)鍵字來控制屬性和方法的作用域夜矗。
1. public —— 這些屬性是用var和public關(guān)鍵字聲明的。pubilic與var是能夠被互換的让虐,雖然這是不被贊成的紊撕。當(dāng)外部的代碼要調(diào)用這個屬性,或者拓展類需要繼承它赡突,我們就應(yīng)該用public來聲明对扶。
2. protected —— 這些屬性和方法只能被對象中的方法和任何子類引用。當(dāng)不想被外部代碼來調(diào)用惭缰,但是拓展類希望繼承它浪南,我們就可以用protected來聲明。
3. private —— 這些成員僅能被同一個類引用漱受,子類也是不能引用的络凿。當(dāng)我們不想這些成員被外部任何代碼方法或者類來調(diào)用,就應(yīng)該使用private來進行聲明昂羡。
靜態(tài)屬性和方法(static properties and methods)
靜態(tài)方法可以被直接調(diào)用絮记,而屬性是不可以的。屬性的調(diào)用可以使用關(guān)鍵字self和雙冒號的方法來調(diào)用類內(nèi)部的靜態(tài)屬性虐先。
繼承(Inheritance)
任何類都能被繼承怨愤。減少代碼的重復(fù)性,只要改變一小部分蛹批,調(diào)整不同的地方撰洗。使用關(guān)鍵字extends進行拓展聲明。
PHP數(shù)組(Arrays)
is_array($array_name)返回布爾值腐芍,可以判斷這個數(shù)組是否是有效的差导。
sort($array_name, SORT_NUMERIC/STRING)通過數(shù)字和字符串從小到大排序。
rsort($array_name, SORT_NUMERIC/STRING)通過數(shù)字和字符串從大到小排序甸赃。
shuffle($array_name)打亂數(shù)組柿汛,隨機排序冗酿。
explode(' ',"string")這個是十分有用的方法埠对,他會把輸入的string络断,通過要求分隔成單個元素然后放入數(shù)組中。第一個參數(shù)是通過什么來分割项玛,第二個是放入的string貌笨。
extract()這個方法可以很容易地把數(shù)組變成鍵值對的形式。經(jīng)辰缶冢可以用于$_POST和$_GET锥惋。
extract(array,extract_rules,prefix)有三個參數(shù),
第一個array必需开伏。規(guī)定要使用的輸入膀跌。
第二個extract_rules可選。extract() 函數(shù)將檢查每個鍵名是否為合法的變量名固灵,同時也檢查和符號表中的變量名是否沖突捅伤。對非法、數(shù)字和沖突的鍵名的處理將根據(jù)此參數(shù)決定巫玻〈砸洌可以是以下值之一:
可能的值:
EXTR_OVERWRITE - 默認。如果有沖突仍秤,則覆蓋已有的變量熄诡。
EXTR_SKIP - 如果有沖突,不覆蓋已有的變量诗力。(忽略數(shù)組中同名的元素)
EXTR_PREFIX_SAME - 如果有沖突凰浮,在變量名前加上前綴 prefix。自 PHP 4.0.5 起姜骡,這也包括了對數(shù)字索引的處理导坟。
EXTR_PREFIX_ALL - 給所有變量名加上前綴 prefix(第三個參數(shù))。
EXTR_PREFIX_INVALID - 僅在非法或數(shù)字變量名前加上前綴 prefix圈澈。本標(biāo)記是 PHP 4.0.5 新加的惫周。
EXTR_IF_EXISTS - 僅在當(dāng)前符號表中已有同名變量時,覆蓋它們的值康栈。其它的都不處理递递。可以用在已經(jīng)定義了一組合法的變量啥么,然后要從一個數(shù)組例如 $_REQUEST 中提取值覆蓋這些變量的場合登舞。本標(biāo)記是 PHP 4.2.0 新加的。
EXTR_PREFIX_IF_EXISTS - 僅在當(dāng)前符號表中已有同名變量時悬荣,建立附加了前綴的變量名菠秒,其它的都不處理。本標(biāo)記是 PHP 4.2.0 新加的。
EXTR_REFS - 將變量作為引用提取践叠。這有力地表明了導(dǎo)入的變量仍然引用了 var_array 參數(shù)的值言缤。可以單獨使用這個標(biāo)志或者在 extract_type 中用 OR 與其它任何標(biāo)志結(jié)合使用禁灼。本標(biāo)記是 PHP 4.3.0 新加的管挟。
第三個參數(shù),prefix可選弄捕。請注意 prefix 僅在 extract_type 的值是 EXTR_PREFIX_SAME僻孝,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 時需要守谓。如果附加了前綴后的結(jié)果不是合法的變量名穿铆,將不會導(dǎo)入到符號表中。前綴和數(shù)組鍵名之間會自動加上一個下劃線斋荞。
代碼如下:
<?php
????$a = 'Original';?
????$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");?
????extract($my_array);?
????echo "\$a = $a; \$b = $b; \$c = $c";?
?>?
輸出:?
$a = Cat;?
$b = Dog;?
$c = Horse?
使用全部參數(shù):?
代碼如下:
<?php
????$a = 'Original';?
????$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");?
????extract($my_array, EXTR_PREFIX_SAME, 'dup');?
????echo "\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a;";?????
?>?
輸出:?
$a = Original;?
$b = Dog;?
$c = Horse;?
$dup_a = Cat;?
在action.php中只要使用extract()函數(shù)將$_POST全局數(shù)據(jù)解開:?
action.php?
代碼如下:
<?php
????extract($_POST);? //相當(dāng)于$username = $_POST['username'];? //$password = $_POST['password'];?
?>?
compact(var1,var2...)函數(shù)創(chuàng)建一個由參數(shù)所帶變量組成的數(shù)組悴务。如果參數(shù)中存在數(shù)組,該數(shù)組中變量的值也會被獲取譬猫。
本函數(shù)返回的數(shù)組是一個關(guān)聯(lián)數(shù)組讯檐,鍵名為函數(shù)的參數(shù),鍵值為參數(shù)中變量的值染服。
本函數(shù)執(zhí)行的行為與extract()正好相反别洪。
例子 1
使用不匹配變量的字符串,以及一個變量名數(shù)組:
<?php
????$firstname = "Bill";
????$lastname = "Gates";
????$age = "60";
????$name = array("firstname", "lastname");
????$result =compact($name, "location", "age");
????print_r($result);
?>
輸出結(jié)果:
Array ( [firstname] => Bill [lastname] => Gates [age] => 60 )
其他相關(guān)的方法:
current()?- 返回數(shù)組中的當(dāng)前元素的值
end()?- 將內(nèi)部指針指向數(shù)組中的最后一個元素柳刮,并輸出
next()?- 將內(nèi)部指針指向數(shù)組中的下一個元素挖垛,并輸出
prev()?- 將內(nèi)部指針指向數(shù)組中的上一個元素,并輸出
each()?- 返回當(dāng)前元素的鍵名和鍵值秉颗,并將內(nèi)部指針向前移動
printf(arg1,arg2,agr++)函數(shù)輸出格式化的字符串痢毒。arg1、arg2蚕甥、arg++?參數(shù)將被插入到主字符串中的百分號(%)符號處哪替。該函數(shù)是逐步執(zhí)行的。在第一個 % 符號處菇怀,插入?arg1凭舶,在第二個 % 符號處,插入?arg2爱沟,依此類推帅霜。
參數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?描述
format? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??必需。規(guī)定字符串以及如何格式化其中的變量呼伸。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 可能的格式值:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%% - 返回一個百分號 %
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%b - 二進制數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%c - ASCII 值對應(yīng)的字符
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%d - 包含正負號的十進制數(shù)(負數(shù)身冀、0、正數(shù))
????????????????????????????????????????????????????????????????????????????????????????????????????%e - 使用小寫的科學(xué)計數(shù)法(例如 1.2e+2)
????????????????????????????????????????????????????????????????????????????????????????????????????%E - 使用大寫的科學(xué)計數(shù)法(例如 1.2E+2)
????????????????????????????????????????????????????????????????????????????????????????????????????%u - 不包含正負號的十進制數(shù)(大于等于 0)
????????????????????????????????????????????????????????????????????????????????????????????????????%f - 浮點數(shù)(本地設(shè)置)
????????????????????????????????????????????????????????????????????????????????????????????????????%F - 浮點數(shù)(非本地設(shè)置)
????????????????????????????????????????????????????????????????????????????????????????????????????%g - 較短的 %e 和 %f
????????????????????????????????????????????????????????????????????????????????????????????????????%G - 較短的 %E 和 %f
????????????????????????????????????????????????????????????????????????????????????????????????????%o - 八進制數(shù)
????????????????????????????????????????????????????????????????????????????????????????????????????%s - 字符串
????????????????????????????????????????????????????????????????????????????????????????????????????%x - 十六進制數(shù)(小寫字母)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %X - 十六進制數(shù)(大寫字母)
????????????????????????????????????????????????????????????????????????????????????????????????????附加的格式值。必需放置在 % 和字母之間(例如 %.2f):
????????????????????????????????????????????????????????????????????????????????????????????????????+ (在數(shù)字前面加上 + 或 - 來定義數(shù)字的正負性搂根。默認地蝶怔,只有負數(shù)做標(biāo)記,正數(shù)不做標(biāo)記)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' (規(guī)定使用什么作為填充兄墅,默認是空格。它必須與寬度指定器一起使用澳叉。)
????????????????????????????????????????????????????????????????????????????????????????????????????- (左調(diào)整變量值)
????????????????????????????????????????????????????????????????????????????????????????????????????[0-9] (規(guī)定變量值的最小寬度)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?.[0-9] (規(guī)定小數(shù)位數(shù)或最大字符串長度)
????????????????????????????????????????????????????????????????????????????????????????????????????注釋:如果使用多個上述的格式值隙咸,它們必須按照上面的順序進行使用,不能打亂成洗。
arg1? ? ????????????????????????????????????????????????????????????????????????????????????????必需五督。規(guī)定插到?format?字符串中第一個 % 符號處的參數(shù)。
arg2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 必需瓶殃。規(guī)定插到?format?字符串中第二個 % 符號處的參數(shù)充包。
arg++? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?可選。規(guī)定插到?format?字符串中第三遥椿、四等等 % 符號處的參數(shù)基矮。
附錄:
syntax? ? ? ? ? ? ? ?/'sint?ks/? ? ? ? ? ? ? ?語法?
keep track of? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?記錄
manipulate? ? ? ?/m??n?pjule?t/? ? ? ? ? 操作
colon? ? ? ? ? ? ? ? /?k??l?n/? ? ? ? ? ? ? ? ? 冒號
deprecate? ? ? ? ?/?depr?ke?t/? ? ? ? ? ? ?不贊成