欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php基礎(chǔ)知識(shí):控制結(jié)構(gòu)

 更新時(shí)間:2006年12月13日 00:00:00   作者:  
php的控制結(jié)構(gòu),大部分和其他主流語(yǔ)言,如C,Java等相同。

這里列出一些不同的以及經(jīng)常被考到的細(xì)節(jié):

1>流程控制的替代語(yǔ)法(pascal的風(fēng)格)
主要用在if,while,for,foreach 和 switch語(yǔ)句中。替代語(yǔ)法的基本形式是把左花括號(hào)({)換成冒號(hào)(:),把右花括號(hào)(})分別換成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。 
例(1):
if ($a == 5):
 /*dosomething1*/
 /*dosomething1*/
endif;
就等同于:
if ($a == 5){
 /*dosomething1*/
 /*dosomething1*/
}
例(2):
if ($a == 5):
   echo "a equals 5";
   echo "...";
elseif ($a == 6):
   echo "a equals 6";
   echo "!!!";
else:
   echo "a is neither 5 nor 6";
endif;

2>for語(yǔ)句(經(jīng)常考,并且徹底的明白也是必要的).
格式:(支持`:`……`endfor;`代替{}的形式)
for (expr1; expr2; expr3)
   statement
運(yùn)行過(guò)程:
第一個(gè)表達(dá)式(expr1)在循環(huán)開(kāi)始前無(wú)條件求值一次。 
expr2 在每次循環(huán)開(kāi)始前求值。如果值為 TRUE,則繼續(xù)循環(huán),執(zhí)行嵌套的循環(huán)語(yǔ)句。如果值為 FALSE,則終止循環(huán)。 
expr3 在每次循環(huán)之后被求值(執(zhí)行)。 
等同的while語(yǔ)句為:
expr1;
while(expr2):
   expr3;
endwhile;

3>break的不同。
break的作用是:結(jié)束當(dāng)前 for,foreach,while,do-while 或者 switch 結(jié)構(gòu)的執(zhí)行。
同時(shí)break后面可以跟一個(gè)數(shù)字來(lái)決定跳出幾層循環(huán)。break 1;為跳出1層循環(huán)。
我不知道c里面有沒(méi)有,因?yàn)槲覜](méi)有c語(yǔ)言的系統(tǒng)的書。

4>foreach
格式:
a.foreach (array_expression as $value)
   statement
b.foreach (array_expression as $key => $value)
   statement
說(shuō)明:
a格式遍歷給定的 array_expression 數(shù)組。每次循環(huán)中,當(dāng)前單元的值被賦給 $value 并且數(shù)組內(nèi)部的指針向前移一步(因此下一次循環(huán)中將會(huì)得到下一個(gè)單元)。 
b格式做同樣的事,只除了當(dāng)前單元的鍵名也會(huì)在每次循環(huán)中被賦給變量 $key。

注意:
a.當(dāng) foreach 開(kāi)始執(zhí)行時(shí),數(shù)組內(nèi)部的指針會(huì)自動(dòng)指向第一個(gè)單元。這意味著不需要在 foreach 循環(huán)之前調(diào)用 reset()。/*reset(array &array):把a(bǔ)rray的內(nèi)部指針移動(dòng)到數(shù)組array的第一個(gè)單元并返回值*/ 
b.除非數(shù)組是被引用,foreach 所操作的是指定數(shù)組的一個(gè)拷貝,而不是該數(shù)組本身。因此數(shù)組指針不會(huì)被 each() 結(jié)構(gòu)改變,對(duì)返回的數(shù)組單元的修改也不會(huì)影響原數(shù)組。不過(guò)原數(shù)組的內(nèi)部指針的確在處理數(shù)組的過(guò)程中向前移動(dòng)了。假定 foreach 循環(huán)運(yùn)行到結(jié)束,原數(shù)組的內(nèi)部指針將指向數(shù)組的結(jié)尾。 
自 PHP 5 起,可以很容易地通過(guò)在 $value 之前加上 & 來(lái)修改數(shù)組的單元。此方法將以引用賦值而不是拷貝一個(gè)值。
例:
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
   $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
c.foreach 不支持用“@”來(lái)抑制錯(cuò)誤信息的能力。

使用foreach例子:
$arr = array("one", "two", "three");
reset($arr);
while (list(, $value) = each($arr)) {
   echo "Value: $value<br>\n";
}
foreach ($arr as $value) {
   echo "Value: $value<br />\n";
}

5>continue的不同(我很少用continue)
作用:在循環(huán)結(jié)構(gòu)用用來(lái)跳過(guò)本次循環(huán)中剩余的代碼并在條件求值為真時(shí)開(kāi)始執(zhí)行下一次循環(huán)。
同break一樣,也接受一個(gè)數(shù)字來(lái)決定跳出幾層到循環(huán)代碼尾部。
注明:continue;和continue 1;一樣,都是跳到本層本次循環(huán)的末尾。continue 2則跳出本層循環(huán)到外層的末尾。

6>switch中continue的作用:類似于break(和其他語(yǔ)言不同)。

7>declare 
結(jié)構(gòu)用來(lái)設(shè)定一段代碼的執(zhí)行指令。declare 的語(yǔ)法和其它流程控制結(jié)構(gòu)相似: 
declare (directive)
   statement
directive 部分允許設(shè)定 declare 代碼段的行為。目前只認(rèn)識(shí)一個(gè)指令:ticks(更多信息見(jiàn)下面 ticks 指令)。 
declare 代碼段中的 statement 部分將被執(zhí)行  怎樣執(zhí)行以及執(zhí)行中有什么副作用出現(xiàn)取決于 directive 中設(shè)定的指令。 
declare 結(jié)構(gòu)也可用于全局范圍,影響到其后的所有代碼。

主要的例子就是用于Tricks(目前也只有tricks):
例如:
function profile($dump = FALSE)
{
   static $profile;
  // Return the times stored in profile, then erase it
   if ($dump) {
       $temp = $profile;
       unset($profile);
       return ($temp);
   }
   $profile[] = microtime();
}
// 注冊(cè)函數(shù)profile為ticks函數(shù)
register_tick_function("profile");
// 初始化。
profile();
// 運(yùn)行一塊代碼,當(dāng)執(zhí)行2句(ticks=2)簡(jiǎn)單語(yǔ)句時(shí),就調(diào)用一次函數(shù)profile();
declare(ticks=2) {
   for ($x = 1; $x < 50; ++$x) {
       echo similar_text(md5($x), md5($x*$x)), "<br />;";
   }
}
// 展示存放在概況存儲(chǔ)區(qū)(profile)的數(shù)據(jù)
print_r(profile (TRUE));

注意:
register_tick_function() should not be used with threaded webserver modules. Ticks are not working in ZTS mode and may crash your webserver. 
不能用在多道處理模塊(??不明白??什么是多道處理模塊?)的服務(wù)器上,不然會(huì)crash。我crash好多次了。郁悶。

8>require和include
不同點(diǎn):
include() 產(chǎn)生一個(gè)警告而 require() 則導(dǎo)致一個(gè)致命錯(cuò)誤。換句話說(shuō),如果想在遇到丟失文件時(shí)停止處理頁(yè)面就用 require()。include() 就不是這樣,腳本會(huì)繼續(xù)運(yùn)行。同時(shí)也要確認(rèn)設(shè)置了合適的 include_path。注意在 PHP 4.3.5 之前,包含文件中的語(yǔ)法錯(cuò)誤不會(huì)導(dǎo)致程序停止,但從此版本之后會(huì)。

相同點(diǎn)以及用法:
a.變量范圍:
當(dāng)一個(gè)文件被包含時(shí),其中所包含的代碼繼承了 "包含語(yǔ)句" 所在行的變量范圍。從該處開(kāi)始,調(diào)用文件在該行處可用的任何變量在被調(diào)用的文件中也都可用。不過(guò)所有在包含文件中定義的函數(shù)和類都具有全局作用域。 
如果 "包含語(yǔ)句" 出現(xiàn)于調(diào)用文件中的一個(gè)函數(shù)里,則被調(diào)用的文件中所包含的所有代碼將表現(xiàn)得如同它們是在該函數(shù)內(nèi)部定義的一樣。所以它將遵循該函數(shù)的變量范圍。

b.解析模式
當(dāng)一個(gè)文件被包含時(shí),語(yǔ)法解析器在目標(biāo)文件的開(kāi)頭脫離 PHP 模式并進(jìn)入 HTML 模式,到文件結(jié)尾處恢復(fù)。由于此原因,目標(biāo)文件中應(yīng)被當(dāng)作 PHP 代碼執(zhí)行的任何代碼都必須被包括在有效的 PHP 起始和結(jié)束標(biāo)記之中。 

c.在條件語(yǔ)句中的格式問(wèn)題
因?yàn)?nbsp;include() 和 require() 是特殊的語(yǔ)言結(jié)構(gòu),在條件語(yǔ)句中使用必須將其放在語(yǔ)句組中(花括號(hào)中)。
因?yàn)?nbsp;include() 是一個(gè)特殊的語(yǔ)言結(jié)構(gòu),其參數(shù)不需要括號(hào)。在比較其返回值時(shí)要注意。

d.處理返回值
可以在被包括的文件中使用 return() 語(yǔ)句來(lái)終止該文件中程序的執(zhí)行并返回調(diào)用它的腳本。同樣也可以從被包含的文件中返回值。可以像普通函數(shù)一樣獲得 include 調(diào)用的返回值。不過(guò)這在包含遠(yuǎn)程文件時(shí)卻不行,除非遠(yuǎn)程文件的輸出具有合法的 PHP 開(kāi)始和結(jié)束標(biāo)記(如同任何本地文件一樣)。可以在標(biāo)記內(nèi)定義所需的變量,該變量在文件被包含的位置之后就可用了。
例子:
return.php
==============
$var = 'PHP';
return $var;

noreturn.php
==============
$var = 'PHP';

testreturns.php
=============================
$foo = include 'return.php';
echo $foo; // prints 'PHP'
$bar = include 'noreturn.php';
echo $bar; // prints 1

e.函數(shù)和變量重定義的問(wèn)題.
為了防止這種現(xiàn)象出現(xiàn),可以使用include_once或者require_once

f.其它:
在 PHP 4.0.2 之前適用以下規(guī)則:require() 總是會(huì)嘗試讀取目標(biāo)文件,即使它所在的行根本就不會(huì)執(zhí)行。條件語(yǔ)句不會(huì)影響 require()。不過(guò)如果 require() 所在的行沒(méi)有執(zhí)行,則目標(biāo)文件中的代碼也不會(huì)執(zhí)行。同樣,循環(huán)結(jié)構(gòu)也不影響 require() 的行為。盡管目標(biāo)文件中包含的代碼仍然是循環(huán)的主體,但 require() 本身只會(huì)運(yùn)行一次

相關(guān)文章

  • php下保存遠(yuǎn)程圖片到本地的辦法

    php下保存遠(yuǎn)程圖片到本地的辦法

    有些時(shí)候我們看到網(wǎng)絡(luò)上有一些漂亮的圖片,而又不想手動(dòng)去保存下來(lái),尤其是大量的這樣的圖片,那這個(gè)時(shí)候我們需要寫一段程序來(lái)幫助我們完成這個(gè)工作。
    2010-08-08
  • php實(shí)現(xiàn)過(guò)濾字符串中的中文和數(shù)字實(shí)例

    php實(shí)現(xiàn)過(guò)濾字符串中的中文和數(shù)字實(shí)例

    這篇文章主要介紹了php實(shí)現(xiàn)過(guò)濾字符串中的中文和數(shù)字的方法,實(shí)例分析了php操作中文和數(shù)字匹配的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 詳解Swoole跟傳統(tǒng)的web開(kāi)發(fā)的區(qū)別

    詳解Swoole跟傳統(tǒng)的web開(kāi)發(fā)的區(qū)別

    Swoole高效跟傳統(tǒng)的web開(kāi)發(fā)有什么區(qū)別,除了傳統(tǒng)的LAMP/LNMP同步開(kāi)發(fā)模式,swoole的異步開(kāi)發(fā)模式是怎么樣的。本文帶著大家來(lái)詳細(xì)介紹一下。
    2021-05-05
  • php str_pad 函數(shù)用法簡(jiǎn)介

    php str_pad 函數(shù)用法簡(jiǎn)介

    php的str_pad()函數(shù)是把字符串填充為指定的長(zhǎng)度,和str_repeat有類似之處,至于str_repeat的用法在此不作解釋,有興趣的可以查找手冊(cè).
    2009-07-07
  • PHP加密解密函數(shù)詳解

    PHP加密解密函數(shù)詳解

    這篇文章主要介紹了PHP加密解密的函數(shù),此函數(shù)實(shí)現(xiàn)了對(duì)部分變量值的加密的功能,感興趣的小伙伴們可以參考一下
    2015-10-10
  • 詳談PHP編碼轉(zhuǎn)換問(wèn)題

    詳談PHP編碼轉(zhuǎn)換問(wèn)題

    本文給大家分享的是個(gè)人對(duì)于PHP編碼轉(zhuǎn)換問(wèn)題的理解以及處理方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-07-07
  • php數(shù)據(jù)類型判斷函數(shù)有哪些

    php數(shù)據(jù)類型判斷函數(shù)有哪些

    php數(shù)據(jù)類型判斷時(shí)需要注意的是is_numeric() 檢測(cè)變量是否為數(shù)字或數(shù)字字符串有別 is_integer()
    2013-09-09
  • 最新評(píng)論