PHP學(xué)習(xí)基礎(chǔ)第一節(jié)

一、php可以做什么

php是一種可以在服務(wù)器端運(yùn)行的編程語言,可以運(yùn)行在Web服務(wù)器端。

php是一門后臺編程語言,是目前比較主流的后臺編程語言。

認(rèn)識一下PHP及其功能。

1、運(yùn)行在服務(wù)器端:學(xué)會了PHP,就可以指揮服務(wù)器給你干活,甚至是搞破壞^_^(千萬不能真這么做咯),WEB網(wǎng)站的大部分?jǐn)?shù)據(jù)都是存儲在服務(wù)器端的,PHP就是用來處理這些存儲在服務(wù)器的數(shù)據(jù)的(功能強(qiáng)大吧)。

2、跨平臺:服務(wù)器可以是多種平臺的服務(wù)器,比如Linux、Windows、Unix,你都可以指揮(不用怕只能指揮一種服務(wù)器啦吧)。

3、腳本語言:它是通過編寫腳本,也就是一行行的計算機(jī)指令(也可以理解為特定的英文單詞),來指揮服務(wù)器來工作的,因此,在編寫PHP的過程其實就是與老外(服務(wù)器成老外啦)交流的過程,交流的語言就是PHP。

4、免費:免費使用(天下還真有免費的午餐)。

如果出現(xiàn)亂碼,解決亂碼需要加head頭:header("Content-type:text/html;charset=utf-8");

認(rèn)識PHP代碼標(biāo)識

想在頁面中編寫PHP?代碼非常容易,如下面代碼:

<?php

? ? ? echo "想學(xué)習(xí)php嗎?來慕課網(wǎng)吧";

?>

就像你可以編寫JavaScript腳本語言需要寫在<script></script>標(biāo)簽之間一樣,你可以在頁面中編寫PHP代碼寫在<?php ??>標(biāo)簽之間,但注意后面的?>是可以省略的。

輸出php的版本 ? ?echo ? ?PHP_VERSION

輸出運(yùn)行php的系統(tǒng)名稱? ? echo ? ?PHP_OS

查看php環(huán)境的函數(shù)? ? ? echo ? ?phpinfo()

阻止程序執(zhí)行die,一般用來做調(diào)試

//die;

//@die($a);

阻止程序執(zhí)行exit,一般用來做調(diào)試

//exit();

//@exit($a);

php主要輸出方式的區(qū)別:

1、echo

echo() 實際上不是一個函數(shù),是php語句,因此您無需對其使用括號。不過,如果您希望向 echo() 傳遞一個以上的參數(shù),

那么使用括號會發(fā)生解析錯誤。而且echo是返回void的,并不返回值,所以不能使用它來賦值。

<?php

$a = echo("words"); // 錯誤!不能用來賦值

echo ?"words"; // 55nav

echo ?("words"); // 55nav

echo ? ("apple","bear"); //發(fā)生錯誤,有括號不能傳遞多個參數(shù)

echo ? ?"alice","bill","cart", "daring";? // 不用括號的時候可以用逗號隔開多個值, 會輸出alicebillcartdaring? 不管是否換行,最終顯示都是為一行

$fistname="alice";

echo "$fistname com"; // 如果 $firstname = "alice", 則會輸出 alice com.

echo '$firstname com'; // 由于使用單引號,所以不會輸出$firstname的值,而是輸出 $firstname com

?>

2.print_r 函數(shù)

print_r函數(shù)打印關(guān)于變量的易于理解的信息。

如果變量是string , integer or float , 將會直接輸出其值,如果變量是一個數(shù)組,則會輸出一個格式化后的數(shù)組,便于閱讀,也就是有key和value對應(yīng)的那種格式。對于object對象類同。print_r有兩個參數(shù),第一個是變量,第二個可設(shè)為true,如果設(shè)為true,則會返回字符串,否則返回布爾值TRUE。

<?php

print_r($arr);//直接打印數(shù)組$arr

$a="alice";

$c=print_r($a);

echo ?$c;//$c的值是TRUE

$c=print_r($a,true);

echo ? ? ? $c; ? ? ? ? ? //$c的值是字符串a(chǎn)lice

?>

3.var_dump函數(shù)

功能: 輸出變量的內(nèi)容、類型或字符串的內(nèi)容、類型、長度。常用來調(diào)試。

var_dump($a);


二、php中的echo語句

echo是PHP中的輸出語句,可以把字符串輸出(字符串用雙引號括起來)。
注意echo關(guān)鍵字與字符串之間至少要有一個空格。

<?php echo "hello world!";?>

PHP-計算表達(dá)式

不同于HTML和CSS,在php中我們可以做計算,比如我們寫入echo 12*3計算機(jī)會計算出結(jié)果36。如下代碼:

<?php echo 12*3;?>

PHP-字符串

一個字符串是用雙引號括起來的一個詞或一個句字,你可以用PHP語言輸出把這個字符串輸出,像這樣:

<?php echo "hello world!";?>

也可以用單引號括起來.

可以把兩個字符用連接符連接起來,像這樣:

<?php echo "Hi,"."imooc!";?>

連接符可以連接多個字符串,上面的例子就是把一個字符串拆分為二個小字符串,然后用一個連接符連起來。在php中字符串連接符是用點(.)來表示的,這一點比較特殊,其它語言中是用加號(+)來表示的,比如:JavaScirpt、Asp、C。

PHP語句結(jié)束符

有的小伙伴們是不是已經(jīng)注意在每一條PHP代碼行結(jié)尾處都會有一個分號;。對的,這點注意,在PHP編程中需要在每條語句的末尾加入分號;。但要注意,分號;一定在半角狀態(tài)下輸入噢。

注釋

在PHP中也有注釋語句:用雙斜杠(//)來表示。其它語言中,Html中使用,CSS中使用/*注釋語句*/

注釋語句可以在PHP程序的任意位置(但注釋語句一定要寫在之間)。


三、變量

1.什么是變量

變量是用于存儲值的,我們命令服務(wù)器去干活的時候,往往需要產(chǎn)生一些數(shù)據(jù),需要臨時性存放起來,方便取用。我們也可以理解為,變量就像一個購物袋,我們可以用來裝蘋果、榴蓮(當(dāng)然也可以用來裝玫瑰),需要注意的是,一般情況下一個變量只能裝一個(不要太貪心)值,除非是復(fù)合變量(后面變量類型時會介紹),當(dāng)我們放進(jìn)去一個蘋果后,再放進(jìn)榴蓮的時候,蘋果就被替換掉,再放入香蕉,那么榴蓮就被替換了。

2.如何定義變量

定義變量就是向服務(wù)器的內(nèi)存申請空間,用來存儲數(shù)據(jù)。這時候我們就需要用到變量名和變量值.

<?php

$var _name = "蘋果";

$n = 10;

?>

解釋一下,在“=”左邊的是變量名,右邊的是變量值。完成定義變量后,需要一個;告訴服務(wù)器這行指令已經(jīng)結(jié)束。其中變量名必須通過$符號標(biāo)識,“=”可不是我們平常所說的等號哦,在PHP中,=是賦值運(yùn)算符;在這里,var_name是變量名,“蘋果”是變量值,它是一個字符串;n是變量名,10是變量值,它是一個整型。

3.變量名的命名規(guī)則

變量名除了需要“$”進(jìn)行標(biāo)識外,還有一些規(guī)則需要遵守。變量名的命名規(guī)則主要有三條:

①變量名必須以字母或下劃線“-”開頭,數(shù)字不能開頭。如”$_name”,”$name” ,”$name2”等

②變量名只能由字母、數(shù)字、以及“_”組成,還能包含漢字。如”$_qq”,”$qq308” ,”$my_apple”,“比如"$name我等”,但是”$name*”是不對的。

③變量名不允許包含空格。當(dāng)變量名由多個單詞組成,建議使用下劃線“-”進(jìn)分隔比如 $my_apple),俗稱下劃線法,或者以大寫字母開頭比如 $myApple,俗稱駱駝式命名法(也稱駝峰命名法)。

特別需要注意的是,在PHP中變量名是區(qū)分大小寫的,如“$my_book”與“$my_Book”代表兩個不同的變量。

4.變量的數(shù)據(jù)類型

在變量中,由于變量占用的空間單元不一樣(占的地盤大小不一樣),也分成幾種數(shù)據(jù)類型。

我們可以通過使用“memory_get_usage”獲取當(dāng)前PHP消耗的內(nèi)存。

可以對比一下內(nèi)存消耗

<?php

echo $m1 = memory_get_usage(); //初始化消耗內(nèi)存

echo "<br/>";

$var_string = "123";

echo $m2 = memory_get_usage()-$m1; //字符串消耗內(nèi)存

echo "<br/>";?

$n=123;

echo $m3 = memory_get_usage()-$m1-$m2; //整型消耗內(nèi)存

echo "<br/>";?

$f=123.00;

echo $m4 = memory_get_usage()-$m1-$m2-$m3;//浮點型消耗內(nèi)存?

echo "<br/>";?

$var_array = array("123");

echo $m5 = memory_get_usage()-$m1-$m2-$m3-$m4; //數(shù)組消耗內(nèi)存

?>

gettype()返回變量的類型,共有8個可能的值string、integer、float、boolean、array、object、null、unknown

is_type()查看變量是否屬于某個類型,如果是,返回TRUE,否則,返回FALSE

$arr = array(1);

echo is_array($arr);

$num = 5;

echo is_int($num);

is_array -- 檢測變量是否是數(shù)組

is_bool --? 檢測變量是否是布爾型

is_callable --? 檢測參數(shù)是否為合法的可調(diào)用結(jié)構(gòu)

is_double -- is_float() 的別名

is_float -- 檢測變量是否是浮點型

is_int -- 檢測變量是否是整數(shù)

is_integer -- is_int() 的別名

is_long -- is_int() 的別名

is_null --? 檢測變量是否為 NULL

is_numeric --? 檢測變量是否為數(shù)字或數(shù)字字符串

is_object -- 檢測變量是否是一個對象

is_real -- is_float() 的別名

is_resource --? 檢測變量是否為資源類型

is_scalar --? 檢測變量是否是一個標(biāo)量

is_string -- 檢測變量是否是字符串


var_dump()獲取變量的值和類型的詳細(xì)信息

$str = ‘hello’;

var_dump($str);

$arr = array(‘A’, ‘B’, ‘C’);

var_dump($arr);

在php中,支持8種原始類型,其中包括四種標(biāo)量類型、兩種復(fù)合類型和兩種特殊類型。php是一門松散類型的語言,不必向php聲明變量的數(shù)據(jù)類型。php會自動把變量轉(zhuǎn)換為自動的數(shù)據(jù)類型。

<?php

$string="就是就是"; //定義一個字符串“就是就是”

var_dump($string);?

echo "<br/>";

$string="9494";//把它變成整型“9494”

var_dump($string); //通過“var_dump”函數(shù),輸出數(shù)據(jù)類型

?echo "<br/>";

?>

輸出結(jié)果:string(12) "就是就是" ? ? ? ? ? ? ? int(9494)

我們可以發(fā)現(xiàn), 這個變量自動就從原來的字符串轉(zhuǎn)換成了整型咯。

5.PHP標(biāo)量類型—布爾類型

布爾類型(boolean):只有兩個值,一個是TRUE,另一個是FALSE,可以理解為是或否。它不區(qū)分大小寫。主要用在條件結(jié)構(gòu)中。需要注意的是,當(dāng)我們用echo指令輸出布爾類型時,如果是true則輸出的是1,false則什么也不輸出。我們可以使用var_dump函數(shù),獲取它真正的數(shù)據(jù)類型。

6.PHP標(biāo)量類型—整型

整型(integer):類似于常見的整數(shù)。它可以用十進(jìn)制、八進(jìn)制、十六進(jìn)制指定。十進(jìn)制就是日常使用的數(shù)字;八進(jìn)制,數(shù)字前必須加上“0”(阿拉伯?dāng)?shù)字0);十六進(jìn)制,數(shù)字前必須加“0x”(阿拉伯?dāng)?shù)字0)。如:

<?php

$data_int = 1234;? // 十進(jìn)制數(shù)

$data_int = -567;? ? // 一個負(fù)數(shù)

$data_int = 0123;? ? // 八進(jìn)制數(shù)(等于十進(jìn)制的 83)

$data_int = 0x1a;? ? // 十六進(jìn)制數(shù)(等于十進(jìn)制的 26)

?>

7.PHP標(biāo)量類型—浮點型

浮點型(浮點數(shù)、雙精度數(shù)或?qū)崝?shù)),也就是通常說的小數(shù),可以用小數(shù)點或者科學(xué)計數(shù)法表示??茖W(xué)計數(shù)法可以使用小寫的e,也可以使用大寫的E。

<?php

echo $num_float1 = 1.234;? ? //小數(shù)點,輸出結(jié)果1.234

echo $num_float2 = 1.2e3;? ? //科學(xué)計數(shù)法,小寫e,輸出結(jié)果1200

echo $num_float3 = 7.0E-3;? ? //科學(xué)計數(shù)法,大寫E,輸出結(jié)果0.007

?>

8.PHP標(biāo)量類型—字符串

字符串是由一系列字符組成,在PHP中,字符和字節(jié)一樣,也就是說,一共有256種不同字符的可能性。

字符串型可以用三種方法定義:單引號形式雙引號形式Heredoc結(jié)構(gòu)形式。

<?php

$str_string1='我是字符串1';

$str_string2="我是字符串2";

echo $str_string1;

echo "<br/>";

echo $str_string2;

?>

當(dāng)你的字符串中包含引號的時候,我們怎么辦?

<?php

$str_string1 = '甲問:"你在哪里學(xué)的PHP?"'; ? ? ? //單引號中嵌入雙引號

$str_string2 = "乙毫不猶豫地回答:'當(dāng)然是慕課網(wǎng)咯!'"; ? ? ?//雙引號中嵌入單引號

$str_string3 = '甲問:\'能告訴我網(wǎng)址嗎?\'';? ? ? ? ? ? //單引號中嵌入單引號,使用轉(zhuǎn)義符“\”

$str_string4 = "乙答道:\"www.imooc.com\"";? ? ? ? //雙引號中嵌入雙引號,使用轉(zhuǎn)義符“\”

echo $str_string1;

echo $str_string2;

echo $str_string3;

echo $str_string4;

?>

當(dāng)引號遇到美元咋辦?這里的美元可不是真正的美元,而是用美元符號標(biāo)識的變量。

字符串轉(zhuǎn)義

\n ? ? ? ?換行

\r ? ? ? ? ?回車

\t ? ? ? ? ?水平制表符,tab鍵

\\ ? ? ? ? ? 反斜杠

\$ ? ? ? ? ?美元符

\” ? ? ? ? ? 雙引號

當(dāng)雙引號中包含變量時,變量會與雙引號中的內(nèi)容連接在一起;雙引號可以解析變量,如果想明確的指定名字的結(jié)束,可以用花括號{ }把變量名括起來。echo "He drank some {$beer}s";

當(dāng)單引號中包含變量時,變量會被當(dāng)做字符串輸出。

<?php

$love = "I love you!";?

$string1 = "慕課網(wǎng),$love";

$string2 = '慕課網(wǎng),$love';

echo $string1; ? ? ? ? ? ? ? ? ? ?//輸出:慕課網(wǎng),I ?love you!

echo "<br/>";

echo $string2; ? ? ? ? ? ? ? ? ? ?//輸出:慕課網(wǎng),$love

?>

當(dāng)我的字符串很長怎么辦?

我們可以使用Heredoc結(jié)構(gòu)形式的方法來解決該問題,首先使用定界符表示字符串(<<<),接著在“<<<“之后提供一個標(biāo)識符GOD,然后是字符串,最后以提供的這個標(biāo)識符結(jié)束字符串。

<?php

$string1=<<<GOD

我有一只小毛驢,我從來也不騎。

有一天我心血來潮,騎著去趕集。

我手里拿著小皮鞭,我心里正得意。

不知怎么嘩啦啦啦啦,我摔了一身泥.

GOD;

echo $string1;

?>

在賦值符號后,輸入定界符“<<<”,接著是標(biāo)識符,你可以用你的女神作為標(biāo)識符“GOD”,如第2行,也可以使用你喜歡的狗狗,“DOG”作為標(biāo)識符,但是,結(jié)尾處的標(biāo)識符也必須是一樣的。此外,在結(jié)尾的一行,如第7行,一定要另起一行,并且此行除了“GOD”,并以“;”號結(jié)束之外,不能有任何其他字符,前后都不能有,包括空格,否則會出現(xiàn)錯誤的哦。切記切記哦。

定界符也可以解析變量,如果想明確的指定名字的結(jié)束,可以用花括號{ }把變量名括起來。

9.PHP第一種特殊類型—資源

資源(resource):資源是由專門的函數(shù)來建立和使用的,例如打開文件、數(shù)據(jù)連接、圖形畫布。我們可以對資源進(jìn)行操作(創(chuàng)建、使用和釋放)。任何資源,在不需要的時候應(yīng)該被及時釋放。如果我們忘記了釋放資源,系統(tǒng)自動啟用垃圾回收機(jī)制,在頁面執(zhí)行完畢之后回收資源,以避免內(nèi)存被消耗殆盡。

<?php

$file=fopen("f.txt","r");? //打開文件

$con=mysql_connect("localhost","root","root");? //連接數(shù)據(jù)庫

$img=imagecreate(100,100);//圖形畫布

?>

//偷窺一個小文件,假設(shè)服務(wù)器上有個文件為“f.txt”,這時候,我們就需要用到資源這種特殊的數(shù)據(jù)類型。

<?php

//首先采用“fopen”函數(shù)打開文件,得到返回值的就是資源類型。

$file_handle = fopen("/data/webroot/resource/php/f.txt","r");

if ($file_handle){? ?

?//接著采用while循環(huán)(后面語言結(jié)構(gòu)語句中的循環(huán)結(jié)構(gòu)會詳細(xì)介紹)一行行地讀取文件,然后輸出每行的文字? ??

while (!feof($file_handle)) { //判斷是否到最后一行? ? ? ?

?$line = fgets($file_handle); //讀取一行文本? ? ??

? echo $line; //輸出一行文本? ? ? ??

echo "<br/>"; //換行??

? }

}

fclose($file_handle);//關(guān)閉文件?>

file handle叫做文件句柄
在文件I/O中,要從一個文件讀取數(shù)據(jù),應(yīng)用程序首先要調(diào)用操作系統(tǒng)函數(shù)并傳送文件名,并選一個到該文件的路徑來打開文件。該函數(shù)取回一個順序號,即文件句柄(file handle),該文件句柄對于打開的文件是唯一的識別依據(jù)。要從文件中讀取一塊數(shù)據(jù),應(yīng)用程序需要調(diào)用函數(shù)ReadFile,并將文件句柄在內(nèi)存中的地址和要拷貝的字節(jié)數(shù)傳送給操作系統(tǒng)。當(dāng)完成任務(wù)后,再通過調(diào)用系統(tǒng)函數(shù)來關(guān)閉該文件。

fopen() 函數(shù)打開文件或者 URL。

如果打開失敗,本函數(shù)返回 FALSE。

語法:fopen(filename,mode,include_path,context)

filename必需。規(guī)定要打開的文件或 URL。

mode必需。規(guī)定要求到該文件/流的訪問類型??赡艿闹狄娤卤?。

include_path可選。如果也需要在 include_path 中檢索文件的話,可以將該參數(shù)設(shè)為 1 或 TRUE。

context可選。規(guī)定文件句柄的環(huán)境。Context 是可以修改流的行為的一套選項。

mode 參數(shù)的可能的值:

"r"只讀方式打開,將文件指針指向文件頭。

"r+"讀寫方式打開,將文件指針指向文件頭。

"w"寫入方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建之。

"w+"讀寫方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建之。

"a"寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之。

"a+"讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之。

"x"創(chuàng)建并以寫入方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調(diào)用失敗并返回 FALSE,并生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創(chuàng)建之。

這和給底層的 open(2) 系統(tǒng)調(diào)用指定 O_EXCL|O_CREAT 標(biāo)記是等價的。

此選項被 PHP 4.3.2 以及以后的版本所支持,僅能用于本地文件。

"x+"創(chuàng)建并以讀寫方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調(diào)用失敗并返回 FALSE,并生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創(chuàng)建之。

這和給底層的 open(2) 系統(tǒng)調(diào)用指定 O_EXCL|O_CREAT 標(biāo)記是等價的。

此選項被 PHP 4.3.2 以及以后的版本所支持,僅能用于本地文件。

注釋:不同的操作系統(tǒng)家族具有不同的行結(jié)束習(xí)慣。當(dāng)寫入一個文本文件并想插入一個新行時,需要使用符合操作系統(tǒng)的行結(jié)束符號?;?Unix 的系統(tǒng)使用 \n 作為行結(jié)束字符,基于 Windows 的系統(tǒng)使用 \r\n 作為行結(jié)束字符,基于 Macintosh 的系統(tǒng)使用 \r 作為行結(jié)束字符。 如果寫入文件時使用了錯誤的行結(jié)束符號,則其它應(yīng)用程序打開這些文件時可能會表現(xiàn)得很怪異。

Windows 下提供了一個文本轉(zhuǎn)換標(biāo)記("t")可以透明地將 \n 轉(zhuǎn)換為 \r\n。與此對應(yīng)還可以使用 "b" 來強(qiáng)制使用二進(jìn)制模式,這樣就不會轉(zhuǎn)換數(shù)據(jù)。要使用這些標(biāo)記,要么用 "b" 或者用 "t" 作為 mode 參數(shù)的最后一個字符。

默認(rèn)的轉(zhuǎn)換模式依賴于 SAPI 和所使用的 PHP 版本,因此為了便于移植鼓勵總是指定恰當(dāng)?shù)臉?biāo)記。如果是操作純文本文件并在腳本中使用了

\n 作為行結(jié)束符,但還要期望這些文件可以被其它應(yīng)用程序例如 Notepad 讀取,則在 mode 中使用 "t"。在所有其它情況下使用

"b"。

在操作二進(jìn)制文件時如果沒有指定 "b" 標(biāo)記,可能會碰到一些奇怪的問題,包括壞掉的圖片文件以及關(guān)于 \r\n 字符的奇怪問題。

注釋:為移植性考慮,強(qiáng)烈建議在用 fopen() 打開文件時總是使用 "b" 標(biāo)記。

注釋:再一次,為移植性考慮,強(qiáng)烈建議你重寫那些依賴于 "t" 模式的代碼使其使用正確的行結(jié)束符并改成 "b" 模式。

feof(fp) 函數(shù)檢測是否已到達(dá)文件末尾 (eof)。

有兩個返回值:如果遇到文件結(jié)束,函數(shù)feof(fp)的值為非零值,否則為0。

fgets() 函數(shù)從文件指針中讀取一行。

語法:fgets(file,length)

file必需。規(guī)定要讀取的文件。

length可選。規(guī)定要讀取的字節(jié)數(shù)。默認(rèn)是 1024 字節(jié)。

file指向的文件中讀取一行并返回長度最多為length- 1 字節(jié)的字符串。碰到換行符(包括在返回值中)、EOF 或者已經(jīng)讀取了length- 1 字節(jié)后停止(要看先碰到那一種情況)。如果沒有指定length,則默認(rèn)為 1K,或者說 1024 字節(jié)。若失敗,則返回 false。

注釋:length參數(shù)從 PHP 4.2.0 起成為可選項,如果忽略,則行的長度被假定為 1024 字節(jié)。從 PHP 4.3 開始,忽略掉length將繼續(xù)從流中讀取數(shù)據(jù)直到行結(jié)束。如果文件中的大多數(shù)行都大于 8 KB,則在腳本中指定最大行的長度在利用資源上更為有效。

注釋:從 PHP 4.3 開始本函數(shù)可以安全用于二進(jìn)制文件。早期的版本則不行。

注釋:如果碰到 PHP 在讀取文件時不能識別 Macintosh 文件的行結(jié)束符,可以激活 auto_detect_line_endings 運(yùn)行時配置選項。

fgetss() 函數(shù)從打開的文件中讀取一行并過濾掉 HTML 和 PHP 標(biāo)記。與fgets()相同,不同的是 fgetss 嘗試從讀取的文本中去掉任何 HTML 和 PHP 標(biāo)記。

語法:fgetss(file,length,tags)

file必需。規(guī)定要讀取的文件。

length可選。規(guī)定要讀取的字節(jié)數(shù)。默認(rèn)是 1024 字節(jié)。該參數(shù)在 PHP 5 之前是必需的。

tags可選。規(guī)定不會被刪除的標(biāo)簽。

可以用可選的第三個參數(shù)tags指定哪些標(biāo)記不被去掉。若失敗,則返回 false。

<?php

$file = fopen("test.htm","r");

echo fgetss($file,1024,"<p>,<b>");

fclose($file);

?>

fclose() 函數(shù)關(guān)閉一個打開文件。

語法:fclose(file)

file必需。規(guī)定要關(guān)閉的文件。

file參數(shù)是一個文件指針。fclose() 函數(shù)關(guān)閉該指針指向的文件。如果成功則返回 true,否則返回 false。文件指針必須有效,并且是通過 fopen() 或 fsockopen() 成功打開的。

10、PHP第二種特殊類型—空類型

NULL(NULL):NULL是空類型,對大小寫不敏感,NULL類型只有一個取值,表示一個變量沒有值,當(dāng)被賦值為NULL,或者尚未被賦值,或者被unset(),這三種情況下變量被認(rèn)為為NULL。

<?php

error_reporting(0); ? ? ? ? ? ? ? ? ? ?//禁止顯示PHP警告提示

$var; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//為變量未賦值

var_dump($var); ? ? ? ? ? ? ? ? ? ? //NULL

$var1=null; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//將null賦值給變量$var1

var_dump($var1);? ? ? ? ? ? ? ? ? ? ? //NULL

$var2=NULL; ? ? ? ? ? ? ? ? ? ? ? ? ? //將NULL賦值給變量$var2

var_dump( $var2);? ? ? ? ? ? ? ? ? ? //NULL

$var3 = "節(jié)日快樂!";

unset($var3); ? ? ? ? ? ? ? ? ? ? ? ? ? ? //將變量$var3注銷定義

var_dump($var3);? ? ? ? ? ? ? ? ? ? //NULL

?>

11.超全局變量

php提供了很多預(yù)定義的變量,用于提供大量與環(huán)境有關(guān)的信息。

(1)$_SERVER服務(wù)器變量,該全局變量包含著服務(wù)器和客戶端配置及當(dāng)前請求環(huán)境的有關(guān)信息。

print_r ?($_SERVER)

$_SERVER['SERVER_NAME']:當(dāng)前運(yùn)行腳本所在的服務(wù)器的主機(jī)名

$_SERVER['REMOTE_ADDR'] :客戶端IP地址

$_SERVER['REQUEST_URI']:URL的路徑部分

$_SERVER['HTTP_USER_AGENT'] :操作系統(tǒng)和瀏覽器的有關(guān)信息

(2)$_GET ?該變量包含使用GET方法傳遞的有關(guān)信息

(3)$_POST該變量包含使用POST方法傳遞的參數(shù)的有關(guān)信息。

(4)$_REQUEST該變量記錄著通過各種輸入方法傳遞給腳本的變量,如GET、POST,但不要用這個超級全局變量,因為它不安全而且速度比較慢。

(5)$_COOKIE ? ?cookie變量數(shù)組

(6)$_SESSION ? 會話變量數(shù)組

(7)$_FILES ?與上傳文件有關(guān)的變量數(shù)組

(8)$_ENV ? ?環(huán)境變量數(shù)組

(9)$GLOBALS ?所有全局變量數(shù)組

12.empty()函數(shù)

empty()函數(shù)是用來測試變量是否已經(jīng)配置,判斷值為否為空。若變量已存在、非空字符串或者非零,則返回 false 值;反之返回 true值。所以,當(dāng)字符串的值為0時,也返回true,就是執(zhí)行empty內(nèi)部的語句。這就是陷阱。0為空。

如: 假設(shè) $value = 0; 則empty($value)=false

13.isset()函數(shù)

isset()函數(shù) 一般用來檢測變量是否設(shè)置.若變量不存在則返回 FALSE。若變量存在且其值為NULL,也返回 FALSE。若變量存在且值不為NULL,則返回 TURE。

簡單來說就是,有值返回true,沒有值返回false,0不是空,0也是表示有值

使用 unset() 釋放變量之后,它將不再是 isset()。

PHP函數(shù)isset()只能用于變量,傳遞任何其它參數(shù)都將造成解析錯誤。


四、常量

什么是常量?常量可以理解為值不變的量(如圓周率)?;蛘呤浅A恐当欢x后,在腳本的其他任何地方都不可以被改變。php中的常量分為自定義常量和系統(tǒng)常量。

自定義常量是根據(jù)我們開發(fā)的需要,而定義的常量,它通過使用PHP中的函數(shù)define()定義。

define()函數(shù)的語法格式為:

bool define(string $constant_name, mixed $value[, $case_sensitive = true])

它有3個參數(shù):

第一個參數(shù)“constant_name”為必選參數(shù),常量名稱,即標(biāo)志符,常量的命名規(guī)則與變量的一致,但是要注意哦,它可不帶美元符號哦。第二個參數(shù)“value”為必選參數(shù),它是常量的值。第三個參數(shù)“case_sensitive”為可選參數(shù),指定是否大小寫敏感,設(shè)定為true表示不敏感,一般不指定第三個參數(shù)的情況下,默認(rèn)第三個參數(shù)的值為false。

(注: string表示參數(shù)類型為字符串類型,mixed表示參數(shù)類型可以接受為多種不同的類型,case_sensitive = true表示默認(rèn)為布爾類型TRUE)

(通常常量都全用大寫)

//舉個栗子,將圓周率定義為常量“PI”

<?php

$p = "PII";

define("PI",3.14);

define($p,3.14);

echo PI; ? ? ? ? ? ? ? ? ?//3.14

echo "<br/>";

echo PII; ? ? ? ? ? ? ? ?//3.14

?>

常量的作用

常量主要功效是可以避免重復(fù)定義,篡改變量值。在我們進(jìn)行團(tuán)隊開發(fā)時,或者代碼量很大的時候,對于一些第一次定義后不改變的量,如果我們使用變量,在不知情的情況下,使用同一變量名時,變量值就會被替換掉,從而會引發(fā)服務(wù)器執(zhí)行錯誤的任務(wù)。

此外,使用常量還能提高代碼的可維護(hù)性。如果由于某些原因,常量的值需要變更時候,我們只需要修改一個地方。例如在做計算中,起初我們?nèi)A周率為3.14,于是很多計算中我們都使用3.14進(jìn)行計算,當(dāng)要求計算精度提高,圓周率需要取3.142的時候,我們不得不修改所有使用3.14的代碼,倘若代碼量比較多時,不僅工作量大,還可能遺漏。

<?php

define("PI",3.14);

$r=3;

echo "面積為:".(PI*$r*$r)."<br/>";

echo "周長為:".(2*PI*$r)."<br/>";

?>

系統(tǒng)常量

系統(tǒng)常量是php已經(jīng)定義好的常量,我們可以直接拿來使用,常見的系統(tǒng)常量有:

(1)__FILE__ :php程序文件名。它可以幫助我們獲取當(dāng)前文件在服務(wù)器的物理位置。

(2)__LINE__ :PHP程序文件行數(shù)。它可以告訴我們,當(dāng)前代碼在第幾行。

(3)PHP_VERSION:當(dāng)前解析器的版本號。它可以告訴我們當(dāng)前PHP解析器的版本號,我們可以提前知道我們的PHP代碼是否可被該P(yáng)HP解析器解析。

(4)PHP_OS:執(zhí)行當(dāng)前PHP版本的操作系統(tǒng)名稱。它可以告訴我們服務(wù)器所用的操作系統(tǒng)名稱,我們可以根據(jù)該操作系統(tǒng)優(yōu)化我們的代碼。

<?php

echo _FILE_;

echo _LINE_;

echo PHP_VERSION;

echo PHP_OS;

?>

常量如何取值

獲取常量值的有兩種方法取值。第一種是使用常量名直接獲取值;例如計算圓周率的面積,如下(“*”是運(yùn)算符,相當(dāng)于乘號,后面部分的小節(jié)會介紹):

<?php

define("PI",3.14);

$r=1;

$area =PI*$r*$r; ? ? ? ? ? ? ? ? ? ? ?//計算圓的面積

?>

第二種是使用constant()函數(shù)。它和直接使用常量名輸出的效果是一樣的,但函數(shù)可以動態(tài)的輸出不同的常量,在使用上要靈活、方便,其語法格式如下:

mixed constant(string constant_name)

第一個參數(shù)constant_name為要獲取常量的名稱,也可為存儲常量名的變量。如果成功則返回常量的值,失敗則提示錯誤信息常量沒有被定義。(注:mixed表示函數(shù)返回值類型為多種不同的類型,string表示參數(shù)類型為字符串類型)

//舉個栗子:

<?php

$p="";

//定義圓周率的兩種取值

define("PI1",3.14);

define("PI2",3.142);

//定義值的精度

$height = "中";

//根據(jù)精度返回常量名,將常量變成了一個可變的常量

if($height == "中"){

$p = "PI1";

}else if($height == "低"){

$p = "PI2";

}

$r=1;

$area= constant($p)*$r*$r;

echo $area;

?>

如何判斷常量是否被定義

如果常量被重復(fù)定義以后,PHP解析器會發(fā)出“Constant XXX already defined”的警告,提醒我們該常量已經(jīng)被定義過。那么,在團(tuán)隊開發(fā),或代碼量很大的情況下,我們?nèi)绾稳ヅ卸ㄒ粋€常量是否被定義呢?

defined()函數(shù)可以幫助我們判斷一個常量是否已經(jīng)定義,其語法格式為:

bool defined(string constants_name)

它只有參數(shù)constant_name,指的是要獲取常量的名稱,若存在則返回布爾類型true,否則返回布爾類型false; (注:bool表示函數(shù)返回值類型為布爾類型)

<?php

define("PI1",3.14);

$p = "PI1";

$is1 = defined($p);

$is2 = defined("PI2");

var_dump($is1); ? ? ? ? ? //bool(true)

var_dump($is2); ? ? ? ? ? //bool(false)

?>

內(nèi)置常量

PHP_OS ? ? ? php所在操作系統(tǒng)的名稱

PHP_VERSION ?當(dāng)前的php的版本號

魔術(shù)常量(下面都是兩個下劃線額)

__LINE__ ? 文件中的當(dāng)前行號

echo ? ? __LINE__;

__FILE__ ? ?文件的完整路徑和文件名

echo ? ?__FILE__;

__FUNCTION__ ? 函數(shù)名稱

function ? ?test(){

echo ? ? __FUNCTION__;

}

test();

__CLASS__ ? 類的名稱

__METHOD__ ? 類的方法名

class ? ? ?Test{

function ? ?test1(){

echo ? ?__CLASS__;

echo ? "<br/>";

echo ? ?__METHOD__;

}

}

$newTest=new ? ?Test();//將類實例化

$newTest->test1();//調(diào)用


五、php中常用的運(yùn)算符

什么是運(yùn)算符?運(yùn)算符是告訴PHP做相關(guān)運(yùn)算的標(biāo)識符號。例如,你需要計算123乘以456等于多少,這時候就需要一個符號,告訴服務(wù)器,你需要做乘法運(yùn)算。

PHP中的運(yùn)算符有哪些?PHP運(yùn)算符一般分為算術(shù)運(yùn)算符、賦值運(yùn)算符、比較運(yùn)算符、三元運(yùn)算符、邏輯運(yùn)算符、字符串連接運(yùn)算符、錯誤控制運(yùn)算符。

算術(shù)運(yùn)算符主要是用于進(jìn)行算術(shù)運(yùn)算的。

在php中的常用的算術(shù)運(yùn)算符:+ ? ? ? - ? ? ?* ? ? ? ?/ ? ? ? %

賦值運(yùn)算符

PHP的賦值運(yùn)算符有兩種,分別是:

(1)“=”:把右邊表達(dá)式的值賦給左邊的運(yùn)算數(shù)。它將右邊表達(dá)式值復(fù)制一份,交給左邊的運(yùn)算數(shù)。換而言之,首先給左邊的運(yùn)算數(shù)申請了一塊內(nèi)存,然后把復(fù)制的值放到這個內(nèi)存中。

(2)“&”:引用賦值,意味著兩個變量都指向同一個數(shù)據(jù)。它將使兩個變量共享一塊內(nèi)存,如果這個內(nèi)存存儲的數(shù)據(jù)變了,那么兩個變量的值都會發(fā)生變化。

<?php

$a = "我在慕課網(wǎng)學(xué)習(xí)PHP!";

$b = $a;

$c = &$a;

$a = "我不知道我在干嘛!";

echo $b."<br/>"; ? ? ? ? ? ? ? ? ? ? ? ?//我在慕課網(wǎng)學(xué)習(xí)PHP!

echo $c."<br/>"; ? ? ? ? ? ? ? ? ? ? ? ?//我不知道我在干嘛!

?>

比較運(yùn)算符

比較運(yùn)算符主要是用于進(jìn)行比較運(yùn)算的,例如:等于、全等、不等、大于、小于。

在PHP中常用的比較運(yùn)算符:> ? ? ?< ? ? ? >= ? ? ?<= ? ? == ? ?!= ? ? ?=== ? ? !== ? ? <>(不等)

三元運(yùn)算符

(“?:”)三元運(yùn)算符也是一個比較運(yùn)算符,對于表達(dá)式(expr1)?(expr2):(expr3),如果expr1的值為true,則此表達(dá)式的值為expr2,否則為expr3。

邏輯運(yùn)算符

主用是進(jìn)行邏輯運(yùn)算的,例如:邏輯與、邏輯或、邏輯異或、邏輯非等,在PHP中常用的邏輯運(yùn)算符如下表:

And(邏輯與) ? ? $a and $b ? ? ? ? 如果$a與$b都為TRUE,返回TRUE

Or(邏輯或) ? ? ? ? $a or $b? ? ? ? 如果$a或$b任一為TRUE,返回TRUE

Xor(邏輯異或) ? ? ?$a xor $b? ? ? ? 如果$a與$b有且僅有一個為TRUE,返回TRUE

Not(邏輯非) ? ? ? ? !$a ? ? ? ? ? ? ? ? ?如果$a不為TRUE,返回TRUE

And(邏輯與) ? ? $a && $b ? ? ? ? ? 如果$a與$b都為TRUE,返回TRUE

Or(邏輯或)? ? ? $a || $b? ? ? ? ? ? ? 如果$a或$b任一為TRUE,返回TRUE

“與”和“或”有兩種不同形式運(yùn)算符的原因是它們運(yùn)算的優(yōu)先級

前三個邏輯運(yùn)算符的優(yōu)先級最低。

錯誤控制運(yùn)算符

PHP中提供了一個錯誤控制運(yùn)算符“@”,對于一些可能會在運(yùn)行過程中出錯的表達(dá)式時,我們不希望出錯的時候給客戶顯示錯誤信息,這樣對用戶不友好。于是,可以將@放置在一個PHP表達(dá)式之前,該表達(dá)式可能產(chǎn)生的任何錯誤信息都被忽略掉;

如果激活了track_error(這個玩意在php.ini中設(shè)置)特性,表達(dá)式所產(chǎn)生的任何錯誤信息都被存放在變量$php_errormsg中,此變量在每次出錯時都會被覆蓋,所以如果想用它的話必須盡早檢查。

需要注意的是:錯誤控制前綴“@”不會屏蔽解析錯誤的信息,不能把它放在函數(shù)或類的定義之前,也不能用于條件結(jié)構(gòu)例如if和foreach等。

<?php

$conn = @mysql_connect("localhost","username","password");

echo "出錯了,錯誤原因是:".$php_errormsg;

?>


六、語言結(jié)構(gòu)語句

1、順序結(jié)構(gòu)

順序結(jié)構(gòu)就像一條直線,按著順序一直往下執(zhí)行。我們編寫的代碼默認(rèn)都是按照順序結(jié)構(gòu)執(zhí)行的。

2.PHP條件結(jié)構(gòu)之if…else…

條件結(jié)構(gòu)就像一個岔路口,可以向左走,也可以向右走。

PHP中的“if…else…”語法,如下:

<?php

if(條件){

//分配服務(wù)器干的任務(wù)A

}else{

//分配服務(wù)器干的任務(wù)B

}

?>

3.PHP條件結(jié)構(gòu)之if…else if…

PHP中的“if…else if…”語法,如下:

<?php

if(條件一){

//分配服務(wù)器干的任務(wù)A

}else if(條件二){

//分配服務(wù)器干的任務(wù)B

}

?>

通過條件一判斷,若返回值為布爾值為TRUE,則執(zhí)行任務(wù)A,若返回值為FALSE,則判斷條件二,若返回值為布爾值TRUE,則執(zhí)行任務(wù)B,否則既不執(zhí)行任務(wù)A,也不執(zhí)行任務(wù)B。服務(wù)器會繼續(xù)往下執(zhí)行其他任務(wù)。

4.PHP條件結(jié)構(gòu)之if…else if…else…

PHP中的“if…else if…else…”語法,如下:

<?php

if(條件一){

//分配服務(wù)器干的任務(wù)A

}else if(條件二){

//分配服務(wù)器干的任務(wù)B

}else{

//分配服務(wù)器干的任務(wù)C

}

?>

通過條件一判斷,若返回值為布爾值TRUE,則執(zhí)行任務(wù)A,若返回值為FALSE,則判斷條件二,若返回值為布爾值TRUE,則執(zhí)行任務(wù)B,否則既不執(zhí)行任務(wù)A,也不執(zhí)行任務(wù)B,執(zhí)行任務(wù)C。

5、PHP條件結(jié)構(gòu)之switch…case…

PHP中的“switch...case...”語法,如下:

<?php

switch (條件)

{

case 條件值一:

//任務(wù)一

break;

case 條件值二:

//任務(wù)二

break;

default:

//默認(rèn)任務(wù)

}

?>

首先判斷條件,若條件的返回值為條件值一,則執(zhí)行任務(wù)一,若條件返回的值為條件值二,則執(zhí)行任務(wù)二,若條件的返回值既不是條件值一也不是條件值二,則執(zhí)行默認(rèn)任務(wù)。break的作用是結(jié)束switch(后面會有專門舉例說明),使用switch 語句可以避免冗長的 “if..else if..else”代碼塊。

break的作用是阻止代碼進(jìn)入下一個case 中繼續(xù)執(zhí)行。

6、PHP中循環(huán)結(jié)構(gòu)之while循環(huán)語句

在PHP中,while循環(huán)語句如下:

<?php

while(條件){

//執(zhí)行任務(wù)

}

?>

首先判斷某個條件是否符合(條件返回值是否為TRUE),若符合則執(zhí)行任務(wù),執(zhí)行完畢任務(wù),再判斷條件是否滿足要求,符合則重復(fù)執(zhí)行此任務(wù),否則結(jié)束任務(wù)。

7.PHP中循環(huán)結(jié)構(gòu)之do while循環(huán)語句

語法如下:

<?php

do{

//執(zhí)行任務(wù)

}while(條件)

?>

首先執(zhí)行任務(wù)(上一節(jié)的while語句是先判斷條件是否成立,再執(zhí)行任務(wù)),執(zhí)行任務(wù)完畢,判斷某個條件是否符合(條件返回值是否為TRUE),若符合則再次執(zhí)行任務(wù),執(zhí)行完畢任務(wù),繼續(xù)判定條件。

while與do…while循環(huán)語句的區(qū)別是,while先判斷條件是否成立,后執(zhí)行循環(huán),do...while先執(zhí)行一次任務(wù),再判斷是否繼續(xù)執(zhí)行循環(huán),也就是說do...while至少會執(zhí)行一次任務(wù)。當(dāng)條件為FALSE時,while中的任務(wù)會一次也不執(zhí)行,do...while中的任務(wù)會執(zhí)行1次。

8、PHP中循環(huán)結(jié)構(gòu)之for循環(huán)語句

for循環(huán)語句結(jié)構(gòu)如下:

<?php

for(初始化;循環(huán)條件;遞增項){

//執(zhí)行任務(wù)

}

?>

for 語句中,“初始化”在循環(huán)開始前無條件求值一次,“循環(huán)條件”在每次循環(huán)開始前求值。如果值為 TRUE,則繼續(xù)循環(huán),執(zhí)行循環(huán)體語句(執(zhí)行任務(wù))。如果值為 FALSE,則終止循環(huán)。“遞增項”在每次循環(huán)之后被求值(執(zhí)行)。其常用于循環(huán)執(zhí)行代碼塊指定的次數(shù)。

9、PHP中循環(huán)結(jié)構(gòu)之foreach循環(huán)語句

在PHP中foreach循環(huán)語句,常用于遍歷數(shù)組,一般有兩種使用方式:不取下標(biāo)、取下標(biāo)。

(1)只取值,不取下標(biāo)

<?php

foreach (數(shù)組 ? as ? ?值){

//執(zhí)行的任務(wù)

}

?>

(2)同時取下標(biāo)和值

<?php

foreach (數(shù)組 ? ?as ? ?下標(biāo) => 值){?

//執(zhí)行的任務(wù)

}

?>

有一組以學(xué)號為下標(biāo),姓名為值的數(shù)組,這時候需要遍歷數(shù)組的姓名。

<?php

$students = array('2010'=>'令狐沖','2011'=>'林平之','2012'=>'曲洋','2013'=>'任盈盈','2014'=>'向問天','2015'=>'任我行','2016'=>'沖虛','2017'=>'方正','2018'=>'岳不群','2019'=>'寧中則',);//10個學(xué)生的學(xué)號和姓名,用數(shù)組存儲

//使用循環(huán)結(jié)構(gòu)遍歷數(shù)組,獲取學(xué)號和姓名??

foreach($students as? $v)

{? ??

?echo $v; ? ? ? //輸出(打?。┬彰?/p>

echo "<br/>";

}

?>

列出所有學(xué)生學(xué)號和姓名!

<?php

$students = array('2010'=>'令狐沖','2011'=>'林平之','2012'=>'曲洋','2013'=>'任盈盈','2014'=>'向問天','2015'=>'任我行','2016'=>'沖虛','2017'=>'方正','2018'=>'岳不群','2019'=>'寧中則',);//10個學(xué)生的學(xué)號和姓名,用數(shù)組存儲

//使用循環(huán)結(jié)構(gòu)遍歷數(shù)組,獲取學(xué)號和姓名

foreach($students as ?$key=>$v)

{

echo $key.":".$v;//輸出(打?。W(xué)號:姓名

echo "<br/>";

}

?>

10.PHP中結(jié)構(gòu)嵌套之條件嵌套

條件結(jié)構(gòu)嵌套就像回家的路上會遇到多個十字路口。

11.PHP中結(jié)構(gòu)嵌套之循環(huán)嵌套

循環(huán)結(jié)構(gòu)嵌套,就是類似于跑多個足球場,例如假設(shè)有兩個足球場,一個大足球場,一個小足球場,在大足球場跑一圈后,再到小足球場跑幾圈,跑完幾圈后,再到大足球場中繼續(xù)跑。在遍歷二維數(shù)組中很常用。

12.PHP中結(jié)構(gòu)嵌套之循環(huán)結(jié)構(gòu)與條件結(jié)構(gòu)嵌套

有時候在執(zhí)行任務(wù)時,對于一些特殊的任務(wù)還需要進(jìn)行額外處理,這個時候就會將循環(huán)結(jié)構(gòu)與條件結(jié)構(gòu)嵌套使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容