php學習筆記

常用函數

var_dump() 函數返回數組的數據類型和值

unset() 釋放

bool define(string $constant_name, mixed $value[, $case_sensitive = true]) 定義常量

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

bool defined(string constants_name)判斷一個常量是否已經定義,它只有參數constant_name,指的是要獲取常量的名稱,若存在則返回布爾類型true,否則返回布爾類型false; (注:bool表示函數返回值類型為布爾類型)

魔術方法

__set,__get,__isset,__unset,__call,__clone

字符串

trim去除一個字符串兩端空格。trim($str);

rtrim是去除一個字符串右部空格,其中的r是right的縮寫。

ltrim是去除一個字符串左部空格,其中的l是left的縮寫。

strlen()函數獲取字符串長度。strlen($str);

mb_strlen()函數獲取字符串中中文長度。mb_strlen($str,"UTF8")

substr(字符串變量,開始截取的位置,截取個數)substr($str, 2, 4);

mb_substr(字符串變量,開始截取的位置,截取個數, 網頁編碼)中文 ? mb_substr($str, 4, 2, 'utf8');

strpos(要處理的字符串, 要定位的字符串, 定位的起始位置[可選]) strpos($str, 'imooc');

str_replace(要查找的字符串, 要替換的字符串, 被搜索的字符串, 替換進行計數[可選])str_replace('js', 'php', $str);

sprintf(格式, 要轉化的字符串)返回:格式化好的字符串 sprintf('%01.2f', $str)

1、這個 % 符號是開始的意思,寫在最前面表示指定格式開始了。 也就是 "起始字符", 直到出現 "轉換字符" 為止,就算格式終止。

2、跟在 % 符號后面的是 0, 是 "填空字元" ,表示如果位置空著就用0來填滿。

3、在 0 后面的是1,這個 1 是規定整個所有的字符串占位要有1位以上(小數點也算一個占位)。

如果把 1 改成 6,則 $result的值將為 099.90

因為,在小數點后面必須是兩位,99.90一共5個占位,現在需要6個占位,所以用0來填滿。

4、在 %01 后面的 .2 (點2) 就很好理解了,它的意思是,小數點后的數字必須占2位。 如果這時候,$str 的值為9.234,則 $result的值將為9.23.

為什么4 不見了呢? 因為在小數點后面,按照上面的規定,必須且僅能占2位。 可是 $str 的值中,小數點后面占了3位,所以,尾數4被去掉了,只剩下 23。

5、最后,以 f "轉換字符" 結尾。

implode(分隔符[可選], 數組)返回值:把數組元素組合為一個字符串 explode(',', $str);

explode(分隔符[可選], 字符串)返回值:函數返回由字符串組成的數組 explode('-',$str);

addslashes()函數說明:用于對特殊字符加上轉義字符,返回一個字符串。返回值:一個經過轉義后的字符串

// 1. addslashes此函數在DBMS沒有自己的轉義函數時候使用

// 2. htmlspecialchars把HTML中的幾個特殊字符轉義成HTML Entity形式

// 3. htmlentities把HTML中可以轉義的內容轉義成HTML Entity

// 4. mysql_real_escape_string調用MySQL的庫函數對特殊字符進行轉義

// 5. strip_tags濾掉NUL,HTML和PHP的標簽

preg_match用于執行一個正則匹配,常用來判斷一類字符模式是否存在。preg_match($r, $str);return bool? preg_match($p, $str, $match);

file_get_contents,可以將整個文件全部讀取到一個字符串中。file_get_contents('./test.txt');

fopen,fgets,fread等方法,fgets可以從文件指針中讀取一行,freads可以讀取指定長度的字符串。

一般情況下在對文件進行操作的時候需要先判斷文件是否存在,PHP中常用來判斷文件存在的函數有兩個is_file與file_exists.

如果只是判斷文件存在,使用file_exists就行,file_exists不僅可以判斷文件是否存在,同時也可以判斷目錄是否存在,從函數名可以看出,is_file是確切的判斷給定的路徑是否是一個文件。

is_readable與is_writeable在文件是否存在的基礎上,判斷文件是否可讀與可寫。



系統常量

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

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

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

(4)PHP_OS:執行當前PHP版本的操作系統名稱。它可以告訴我們服務器所用的操作系統名稱,我們可以根據該操作系統優化我們的代碼。


巴拉

Heredoc結構形式

首先使用定界符表示字符串(<<<),接著在“<<<“之后提供一個標識符GOD,然后是字符串,最后以提供的這個標識符結束字符串。如圖:

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


PHP賦值運算符

PHP的賦值運算符有兩種,分別是:

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

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

比較運算符

比較運算符主要是用于進行比較運算的,例如:等于、全等、不等、大于、小于。在PHP中常用的比較運算符如下表:

對象比較,當同一個類的兩個實例的所有屬性都相等時,可以使用比較運算符==進行判斷,當需要判斷兩個變量是否為同一個對象的引用時,可以使用全等運算符===進行判斷。

三元運算符

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

邏輯運算符

邏輯運算符主用是進行邏輯運算的,例如:邏輯與、邏輯或、邏輯異或、邏輯非等,在PHP中常用的邏輯運算符如下表:

PHP中的字符串連接運算符

字符串連接運算符是為了將兩個字符串進行連接,PHP中提供的字符串連接運算符有:

(1)連接運算符(“.”):它返回將右參數附加到左參數后面所得的字符串。

(2)連接賦值運算符(“.=”):它將右邊參數附加到左邊的參數后。

PHP中的錯誤控制運算符

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

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

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

foreach

在PHP中foreach循環語句,常用于遍歷數組,一般有兩種使用方式:不取下標、取下標。

(1)只取值,不取下標

foreach (數組 as 值){

//執行的任務

}

(2)同時取下標和值

foreach (數組 as 下標 => 值){

//執行的任務

}

數組

$arr[0]="";

$arr= array();

$arr=array("key"=>"value");

PHP函數之可變函數

所謂可變函數,即通過變量的值來調用函數,因為變量的值是可變的,所以可以通過改變一個變量的值來實現調用不同的函數。經常會用在回調函數、函數列表,或者根據動態參數來調用不同的函數。可變函數的調用方法為變量名加括號。

function name() {

echo 'jobs';

}

$func = 'name';

$func(); //調用可變函數

可變函數也可以用在對象的方法調用上。

class book {

function getName() {

return 'bookname';

}

}

$func = 'getName';

$book = new book();

$book->$func();

類屬性

一般通過->對象操作符來訪問對象的屬性或者方法,對于靜態屬性則使用::雙冒號進行訪問。當在類成員方法內部調用的時候,可以使用$this偽變量調用當前對象的屬性。

靜態

靜態方法中,$this偽變量不允許使用。可以使用self,parent,static在內部調用靜態方法與屬性。

對象序列化

可以通過serialize方法將對象序列化為字符串,用于存儲或者傳遞數據,然后在需要的時候通過unserialize將字符串反序列化成對象進行使用。

class Car {

public $name = 'car';

}

$a = new Car();

$str = serialize($a); //對象序列化成字符串

echo $str.'
';

$b = unserialize($str); //反序列化為對象

var_dump($b);

正則表達式

PCRE庫函數中,正則匹配模式使用分隔符與元字符組成,分隔符可以是非數字、非反斜線、非空格的任意字符。經常使用的分隔符是正斜線(/)、hash符號(#) 以及取反符號(~),例如:

/foo bar/

#^[^0-9]$#

~php~

如果模式中包含分隔符,則分隔符需要使用反斜杠(\)進行轉義。

/http:\/\//

如果模式中包含較多的分割字符,建議更換其他的字符作為分隔符,也可以采用preg_quote進行轉義。

$p = 'http://';

$p = '/'.preg_quote($p, '/').'/';

echo $p;

分隔符后面可以使用模式修飾符,模式修飾符包括:i, m, s, x等,例如使用i修飾符可以忽略大小寫匹配:

$str = "Http://www.imooc.com/";

if (preg_match('/http/i', $str)) {

echo '匹配成功';

}

元字符與轉義

正則表達式中具有特殊含義的字符稱之為元字符,常用的元字符有:

\ 一般用于轉義字符

^ 斷言目標的開始位置(或在多行模式下是行首)

$ 斷言目標的結束位置(或在多行模式下是行尾)

. 匹配除換行符外的任何字符(默認)

[ 開始字符類定義

] 結束字符類定義

| 開始一個可選分支

( 子組的開始標記

) 子組的結束標記

? 作為量詞,表示 0 次或 1 次匹配。位于量詞后面用于改變量詞的貪婪特性。 (查閱量詞)

* 量詞,0 次或多次匹配

+ 量詞,1 次或多次匹配

{ 自定義量詞開始標記

} 自定義量詞結束標記

//下面的\s匹配任意的空白符,包括空格,制表符,換行符。[^\s]代表非空白符。[^\s]+表示一次或多次匹配非空白符。

$p = '/^我[^\s]+(蘋果|香蕉)$/';

$str = "我喜歡吃蘋果";

if (preg_match($p, $str)) {

echo '匹配成功';

}

元字符具有兩種使用場景,一種是可以在任何地方都能使用,另一種是只能在方括號內使用,在方括號內使用的有:

\ 轉義字符

^ 僅在作為第一個字符(方括號內)時,表明字符類取反

- 標記字符范圍

其中^在反括號外面,表示斷言目標的開始位置,但在方括號內部則代表字符類取反,方括號內的減號-可以標記字符范圍,例如0-9表示0到9之間的所有數字。

//下面的\w匹配字母或數字或下劃線。

$p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/';

$str = "我的郵箱是Spark.eric@imooc.com";

preg_match($p, $str, $match);

echo $match[0];

\d表示匹配數字

關于match數組的說明:

文檔上的解釋為:如果提供了參數 matches ,它將被填充為搜索結果。 $matches[0] 將包含完整模式匹配到的文本, $matches[1] 將包含第一個捕獲子組匹配到的文本,以此類推。

文檔上對于子組的說明為:子組通過圓括號分隔界定,并且它們可以嵌套。

正則表達式的搜索與替換在某些方面具有重要用途,比如調整目標字符串的格式,改變目標字符串中匹配字符串的順序等。

例如我們可以簡單的調整字符串的日期格式:

$string = 'April 15, 2014';

$pattern = '/(\w+) (\d+), (\d+)/i';

$replacement = '$3, ${1} $2';

echo preg_replace($pattern, $replacement, $string); //結果為:2014, April 15

其中${1}與$1的寫法是等效的,表示第一個匹配的字串,$2代表第二個匹配的。

通過復雜的模式,我們可以更加精確的替換目標字符串的內容。

$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',

'/^\s*{(\w+)}\s*=/');

$replace = array ('\3/\4/\1\2', '$\1 =');//\3等效于$3,\4等效于$4,依次類推

echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27'); //結果為:$startDate = 5/27/1999

//詳細解釋下結果:(19|20)表示取19或者20中任意一個數字,(\d{2})表示兩個數字,(\d{1,2})表示1個或2個數字,(\d{1,2})表示1個或2個數字。^\s*{(\w+)\s*=}表示以任意空格開頭的,并且包含在{}中的字符,并且以任意空格結尾的,最后有個=號的。

用正則替換來去掉多余的空格與字符:

$str = 'one? ? two';

$str = preg_replace('/\s+/', ' ', $str);

echo $str; // 結果改變為'one two'

GD

要對圖形進行操作,首先要新建一個畫布,通過imagecreatetruecolor函數可以創建一個真彩色的空白圖片:

$img = imagecreatetruecolor(100, 100);

GD庫中對于畫筆所用的顏色,需要通過imagecolorallocate函數進行分配,通過參數設定RGB的顏色值來確定畫筆的顏色:

$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

然后我們通過調用繪制線段函數imageline進行線條的繪制,通過指定起點跟終點來最終得到線條。

imageline($img, 0, 0, 100, 100, $red);

線條繪制好以后,通過header與imagepng進行圖像的輸出。

header("content-type: image/png");

imagepng($img);

最后可以調用imagedestroy釋放該圖片占用的內存。

imagedestroy($img);

通過上面的步驟,可以發現PHP繪制圖形非常的簡單,但很多時候我們不只是需要輸出圖片,可能我們還需要得到一個圖片文件,可以通過imagepng函數指定文件名將繪制后的圖像保存到文件中。

imagepng($img, 'img.png');

GD庫可以進行多種圖形的基本操作,常用的有繪制線條,背景填充,畫矩形,繪制文字等。

跟繪制線條類似,首先需要新建一個圖片與初始化顏色。

$img = imagecreatetruecolor(100, 100);

$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

然后使用imagestring函數來進行文字的繪制,這個函數的參數很多:imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ),可以通過$font來設置字體的大小,x,y設置文字顯示的位置,$s是要繪制的文字,$col是文字的顏色。

imagestring($img, 5, 0, 0, "Hello world", $red);

header("content-type: image/png");

imagepng($img);

imagedestroy($img);

前面我們已經了解到,通過imagepng可以直接輸出圖像到瀏覽器,但是很多時候,我們希望將處理好的圖像保存到文件,以便可以多次使用。通過指定路徑參數將圖像保存到文件中。

$filename = 'img.png';

imagepng($img, $filename);

使用imagepng可以將圖像保存成png格式,如果要保存成其他格式需要使用不同的函數,使用imagejpeg將圖片保存成jpeg格式,imagegif將圖片保存成gif格式,需要說明的是,imagejpeg會對圖片進行壓縮,因此還可以設置一個質量參數。

$filename = 'img.jpg';

?imagejpeg($img, $filename, 80);

imagecreatefromjpeg可以直接從圖片文件創建圖像。

異常

1、基本語法

try{

//可能出現錯誤或異常的代碼

//catch表示捕獲,Exception是php已定義好的異常類

} catch(Exception $e){

//對異常處理,方法:

//1、自己處理

//2、不處理,將其再次拋出

}

2、處理處理程序應當包括:

Try - 使用異常的函數應該位于 "try" ?代碼塊內。如果沒有觸發異常,則代碼將照常繼續執行。但是如果異常被觸發,會拋出一個異常。

Throw - 這里規定如何觸發異常。注意:每一個 "throw" 必須對應至少一個 "catch",當然可以對應多個"catch"

Catch - "catch" 代碼塊會捕獲異常,并創建一個包含異常信息的對象。

//創建可拋出一個異常的函數

function checkNum($number){

if($number>1){

throw new Exception("異常提示-數字必須小于等于1");

}

return true;

}

//在 "try" 代碼塊中觸發異常

try{

checkNum(2);

//如果異常被拋出,那么下面一行代碼將不會被輸出

echo '如果能看到這個提示,說明你的數字小于等于1';

}catch(Exception $e){

//捕獲異常

echo '捕獲異常: ' .$e->getMessage();

}

上面代碼將獲得類似這樣一個錯誤:

捕獲異常:: 異常提示-數字必須小于等于1

例子解釋:

上面的代碼拋出了一個異常,并捕獲了它:

創建 checkNum() 函數。它檢測數字是否大于 1。如果是,則拋出一個異常。

在 "try" 代碼塊中調用 checkNum() 函數。

checkNum() 函數中的異常被拋出

"catch" 代碼塊接收到該異常,并創建一個包含異常信息的對象 ($e)。

通過從這個 exception 對象調用 $e->getMessage(),輸出來自該異常的錯誤消息

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • PHP 學習目錄 ├─PHP視頻教程 1 LAMP網站構建 │ ├─PHP教程 1.1.1 新版視頻形式介紹│ ...
    曹淵說創業閱讀 16,175評論 29 417
  • 更新記錄 2017.01.18 添加超全局變量和數組部分;補充代碼書寫和注釋的內容2017.02.09 補充完善字...
    Samhanx閱讀 289評論 0 1
  • 當腳踏上單車 當你用力踩出第一步 當車輪開始轉動 你感受到了嗎 來自秋的呼吸 和自然的愛撫 每邁出一步 煩悶就丟掉...
    鹿鹿鹿人閱讀 260評論 0 0
  • 一、中國人最需要情緒管理 情緒不但可以管理,而且自主性更高,不要以為臭脾氣改不掉,要修身養性。先緩后快,不要談講求...
    淼帥校長學習力閱讀 4,648評論 0 7
  • test11
    劉二牛牛閱讀 186評論 0 2