php函數(shù)基本語(yǔ)法之自訂函數(shù)
PHP提供了功能強(qiáng)大的函數(shù),但這遠(yuǎn)遠(yuǎn)滿足不了需要,程式設(shè)計(jì)師可以根據(jù)需要自己建立函數(shù)。本節(jié)就開(kāi)始學(xué)習(xí)建立函數(shù)的方法。
我們?cè)趯?shí)際開(kāi)發(fā)過(guò)程當(dāng)中需要有很多功能都需要重複使用到,而這些反覆需要使用到的功能,我們能定義成功能(函數(shù)),就盡可能定義成功能(函數(shù))。使用的時(shí)候,吼一下它的名字即可。
那我們來(lái)學(xué)一下自訂函數(shù)的語(yǔ)法規(guī)定,語(yǔ)法規(guī)定如下:
function 函數(shù)名([參數(shù)名1[=值1], 參數(shù)名2[=值2], 參數(shù)名n[=值n]]) { 函數(shù)中的功能體 [return 返回值] }
上面的語(yǔ)法規(guī)定中發(fā)現(xiàn)瞭如下特點(diǎn),產(chǎn)生如下語(yǔ)未能規(guī)定:
????1.函數(shù)以function開(kāi)始
????2.function後面接空格,空格後接函數(shù)名稱
????3.函數(shù)名稱與變數(shù)命名規(guī)則基本上一樣,但不同的是:函數(shù)名稱不區(qū)分大小寫
????4.所謂參數(shù)其實(shí)就是變數(shù)
????5.函數(shù)名後接括號(hào),括號(hào)內(nèi)接參數(shù),參數(shù)全都有[](中括號(hào)))所有這些都有起來(lái)了,代表參數(shù)可填可不填
????6.如果有參數(shù)的話,參數(shù)後可以接(=)等號(hào),等號(hào)接預(yù)設(shè)值。參數(shù)值也是用[](中括號(hào))括起來(lái)的,代表選填
????7.函數(shù)後的參數(shù)變量,主要功能是將函數(shù)體外的變量值,傳入函數(shù)體內(nèi)來(lái)使用,函數(shù)體的變數(shù)和函數(shù)體外的變數(shù)通常是兩個(gè)不? ? ? ? 同的變數(shù)。
????8.函數(shù)中的特定功能(功能體)用大括號(hào)括起來(lái),代表這是一個(gè)函數(shù)的功能區(qū)間
????9.函數(shù)可以有回傳值也可以沒(méi)有回傳值,用[](中括號(hào))括起來(lái)的,代表選填。
????10.return後接空格,空格後接回傳值,若有return,return後的程式碼皆不執(zhí)行。
????11.函數(shù)的執(zhí)行上沒(méi)有順序關(guān)係,定義處之前的位置可以呼叫
????12.函數(shù)不能定義兩次,即函數(shù)不能被重載
#記得:你也要多寫程式碼來(lái)進(jìn)行實(shí)驗(yàn)!
我們可以用實(shí)驗(yàn)來(lái)一點(diǎn)一點(diǎn)證明這些觀點(diǎn)。
1. 函數(shù)是狗,哪裡呼叫哪裡哪,它就跟著你走
<?php function php_cn(){ echo '我是一條狗'; } php_cn(); php_cn(); php_cn(); ?>
php_cn這個(gè)函數(shù),是不是顯示出來(lái)了三段:我是一隻狗?
2函數(shù)名稱只能是字母,數(shù)字,底線的組合,且之間不能包含空格,數(shù)字不能放在變數(shù)名稱首位。
<?php function 1demo(){ } ?>
以上程式碼會(huì)報(bào)錯(cuò)誤。函數(shù)命名與變數(shù)命名
3. 函數(shù)名稱與變數(shù)命名規(guī)則一樣,但不同的是:函數(shù)名稱不區(qū)分大小寫
<?php function Demo(){ echo '如果是寫代碼的男人,我們需要更加承擔(dān)來(lái)自家庭的責(zé)任<br />'; } demo(); Demo(); DEMO(); ?>
透過(guò)上面的程式碼會(huì)發(fā)現(xiàn),會(huì)顯示出來(lái)三行:如果是寫程式碼的男我人我們需要更承擔(dān)來(lái)自家庭的責(zé)任
。
也就是函數(shù)名稱在呼叫的時(shí)候不區(qū)分大小寫。函數(shù)可以重複叫它的名字,可以重複執(zhí)行。也體現(xiàn)了重用的特質(zhì)。
4. 函數(shù)體的參數(shù)若是定義了,未傳參數(shù),程式碼會(huì)報(bào)錯(cuò)
<?php //定義函數(shù)名為test,必須要傳入一個(gè)參數(shù) function test($hello){ } test(); ?>
你也自己寫一段出來(lái)試試,會(huì)不會(huì)報(bào)錯(cuò)?
5. 函數(shù)後的參數(shù)如果有預(yù)設(shè)值,參數(shù)可以不填,程式碼也不會(huì)報(bào)錯(cuò)
<?php function test( $arg = 10){ echo $arg; } test(); test(88); ?>
是不是沒(méi)有報(bào)錯(cuò)呀?並且顯示了 10和出來(lái)了。
說(shuō)明,參數(shù)如果傳了,參數(shù)會(huì)帶入函數(shù)中。如果函數(shù)沒(méi)有傳參數(shù),會(huì)用參數(shù)後的預(yù)設(shè)值。
6. 函數(shù)後的參數(shù)可以寫多個(gè)
<?php function test( $a , $b = 20 , $c = 30){ echo $a + $b + $c; } test( 1 , 2 , 3 ); ?>
自己寫寫上面的程式碼,我們是不是傳入了多個(gè)參數(shù)?
7.函數(shù)後面如果有預(yù)設(shè)值和無(wú)預(yù)設(shè)值的參數(shù),通常把無(wú)預(yù)設(shè)值的參數(shù)寫在最前面
之前的第3和第4個(gè)實(shí)驗(yàn)我們發(fā)現(xiàn):預(yù)設(shè)值是代表這個(gè)參數(shù)可以不用傳值進(jìn)去。而沒(méi)有預(yù)設(shè)值的話,程式碼會(huì)報(bào)錯(cuò),也就是無(wú)預(yù)設(shè)值的參數(shù)是必傳的。我們來(lái)看看下面的範(fàn)例:
<?php function test( $a = 20 , $b = 30 , $c ){ echo $a + $b + $c; } //重點(diǎn):重點(diǎn)看這一行執(zhí)行一下 test( , , 8 ); ?>
透過(guò)上例發(fā)現(xiàn)執(zhí)行上面的程式碼又報(bào)錯(cuò)了。也就是上面的文法是不行的。
上面的語(yǔ)法我們希望的是,參數(shù)$a和參數(shù)$b我們不會(huì)傳入任何值。參數(shù)$c是必須要傳進(jìn)去的,我們傳了8。可是PHP的文法規(guī)定中不準(zhǔn)許我們這麼寫。因此,我們換一種寫法,也能達(dá)到一樣的效果:
<?php function test( $c , $a = 20 , $b = 30){ echo $a + $b + $c; } //重點(diǎn):重點(diǎn)看這一行執(zhí)行一下 test( 8 ); ?>
透過(guò)上例實(shí)驗(yàn)大家是不是發(fā)現(xiàn),參數(shù)$c我傳了,程式碼還沒(méi)報(bào)錯(cuò)。而參數(shù)$a = 20 ,參數(shù) $b = 30 一樣帶入了代碼 $a + $b + $c 了。
8. 函數(shù)體的變數(shù)與函數(shù)體外的變數(shù)沒(méi)有關(guān)係
<?php //定義變量$hello的值為10 $hello = 10; //函數(shù)后的參數(shù)(形式上的參數(shù),參數(shù))處寫上變量名為$hello function demo( $hello ){ //形參帶入了函數(shù)體內(nèi),函數(shù)體內(nèi)變量$hello 改為了 250 $hello = 250; //輸入2個(gè)250相加的結(jié)果 echo $hello + $hello; } //將函數(shù)體外的變量$hello,傳入變量的參數(shù)處(實(shí)際傳入的參數(shù),實(shí)參),顯示出的結(jié)果為500 demo($hello); //此處$hello的值輸出,依然為10 echo $hello; ?>
透過(guò)上例發(fā)現(xiàn):形參、與實(shí)參沒(méi)有變點(diǎn)關(guān)係。而函數(shù)體內(nèi)的傳進(jìn)去的形參,再怎麼變化,都不會(huì)影響實(shí)參$hello的實(shí)際結(jié)果。
9. 函數(shù)體內(nèi)若有return,return 後的程式碼不執(zhí)行
<?php function demo(){ echo 111; return; echo 222; } demo(); ?>
發(fā)現(xiàn)沒(méi)? ——只輸出了111。
10. 函數(shù)執(zhí)行完後,return 可把函數(shù)體內(nèi)的值,帶帶函數(shù)體外
<?php //定義一條函數(shù)狗 function php_cn(){ $foo = 5; $bar = 6; $result = $foo + $bar; //將$result的結(jié)果進(jìn)行返回 return $result; } //調(diào)用php_cn()這個(gè)函數(shù),$foo和$bar相加的$result就會(huì)返回回來(lái)給到變量$piao $piao = php_cn(); //輸出$piao的結(jié)果,果真為11 echo $piao; ?>
11. 函數(shù)的執(zhí)行沒(méi)有順序關(guān)係,可以在定義處之前的位置呼叫
<?php demo(); function demo(){ $str = '爸爸媽媽年齡越來(lái)越大'; $str .= '大多數(shù)的孩子都是獨(dú)生子女,更加應(yīng)該負(fù)起責(zé)任'; echo $str; } demo(); ?>
透過(guò)上例發(fā)現(xiàn),函數(shù)在定義之前還是在定義之後都可以呼叫。也就是函數(shù)可以任意位置呼叫。
11. 函數(shù)不能重載
<?php function demo(){ } function demo(){ } //試試會(huì)報(bào)錯(cuò)嗎? ?>
透過(guò)上例發(fā)現(xiàn),報(bào)錯(cuò)了,也就是同名函數(shù)不能被定義兩次,否則報(bào)錯(cuò)
作業(yè):
????1.定義一個(gè)雙層循環(huán),隔行變色的表格
????2.要求這個(gè)表格,預(yù)設(shè)值為10和10,顏色中有一個(gè)為預(yù)設(shè)參數(shù),一個(gè)沒(méi)有預(yù)設(shè)參數(shù)
????3.將表格的字串return 回去
#????