日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

读书笔记-《细说PHP》

發布時間:2023/12/10 php 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读书笔记-《细说PHP》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《細說PHP》——電子工業出版社


第一章 lamp網站構建

Web應用的部分優勢:

基于瀏覽器,具有統一的平臺和UI體驗。

無需安裝,擁有瀏覽器即可體驗。

總是使用應用的當前最新版本,無需升級。

數據持久存儲在云端,基本無需擔心丟失。

Web2.0主要特點:

用戶參與網站內容制造。

Web2.0更注重交互性。

符合Web標準的網站設計。

Web2.0和Web1.0之間沒有絕對的界限。

Web2.0的核心不是技術,而在于指導思想。

HTTP協議:

默認端口是TCP80。

請求工作過程分為4步:1.建立連接;2.發出請求信息;3.接收響應信息;4.關閉連接。

HTTP消息類型:1.請求消息;2.響應消息。

HTTP消息內容:1.請求/響應行;2.請求/響應頭;3.請求/響應體。

常用Web服務器:

Apache、NGINX、IIS、Tomcat、Weblogic

常見網站服務平臺:

ASP.NET、JavaEE、LAMP

PHP能夠做什么:

服務端腳本、命令行腳本、編寫桌面應用程序

PHP的特性:

可運行在所有主流操作系統之上。

支持很大范圍的數據庫。

支持利用諸如LDAP、SNMP、IMAP、POP3等協議服務。


第6章 PHP的基本語法

可變變量:

$hi = "hello"; $$hi = "world"; echo "$hi $hello"; // 輸出hello world,$$hi = $hello變量引用賦值:

$foo = "BOB"; $bar = &$foo; $bar = "My name is Tom"; echo $bar; // 輸出My name is Tom echo $foo; // 輸出My name is Tom注意:PHP引用不像C語言的地址指針,$bar和$foo在內存上不同體,只是把各自的值相關聯起來,參考下面例子。

$foo = 25; $bar = &$foo; unset($bar); echo $foo; // 輸出25變量命名:

區分大小寫、以字母或下劃線開頭(不能以數字)、不能存在空格、中文是允許的、可以使用關鍵字做變量名(只是容易混淆)

變量類型:

PHP是弱類型檢查語言,變量或常量的數據類型由程序的上下文決定。

數據類型:4種標量(boolean、integer、float、string)、2種復合(array、object)、2種特殊類型(resource、NULL)

布爾型:

0、0.0、空白字符串、字符串“0”、沒有成員變量的數組、沒有單元的對象(PHP4)、特殊類型NULL、尚未設定的變量均為FALSE

整形:

八進制:0123(十進制的83)、十六進制:0x1A(十進制的26)

浮點型:

精確到小數點后15位

不要比較兩個浮點數是否相等,因為用浮點數表示8,其內部表示是7.99999999999……

字符串:

定義簡單字符串的時候,單引號的效率更高(不解析變量$str,不轉義除\'外的轉移字符)

雙引號中轉義\n,\t等字符,變量名會被變量值替代

定界符的使用:

echo <<<EOT這里是包含在定界符內的字符串 EOT;

資源類型:

通過專門的函數來建立和使用,使用資源類型變量保存有為打開文件、數據庫連接、圖形畫布區域等的特殊句柄,由程序員創建、使用和釋放。

NULL類型:

值唯一,只有NULL

不區分大小寫

變量尚未被賦值、unset函數銷毀的變量的值為NULL

偽類型:

mixed——多種不同的類型(例如gettype()可以接受所有的PHP類型,str_replace()可以接受字符串和數組)

number——可以是integer或者float

callback——例如call_user_function()或usort()接受用戶自定義的函數作為一個參數

數據類型的轉換:

自動類型轉換——遵循轉換按數據長度增加的方向進行,以保證精度不降低;布爾型、NULL、字符串在參與運算時會轉換成Number型(true-1,false-0,NULL-0)

強制類型轉換——(int)$foo、intval($foo)這兩種方法都沒有改變被轉換變量本身的類型,settype($foo, "string")則改變本身的類型

變量類型測試函數——is_bool()、is_int()、is_float()、is_string()、is_array()、is_object()、is_resource()、is_null()、is_scalar()(標量)、is_numeric()(數字)、is_callable()(有效函數名)

常量:

使用define()函數來定義常量或確定是否已定義某常量

define(”GREETING“, "hello", true)——第三個參數為true時不區分大小寫,默認為false;第二個參數是mixed類型,只接受標量

預定義變量:



魔術常量:



運算符:

字符變量只能遞增,不能遞減,并且只支持純字母(a-z和A-Z)

遞增遞減不影響布爾值,NULL遞減沒有效果,但遞增會變成1

位運算符只支持string、integer類型,分析時要化為二進制形式,再進行運算(&、|、^、~、<<、>>)

其他運算符:

?:——三目運算符

``——執行運算符,作為外殼命令來執行,并將其輸出信息返回

@——錯誤控制運算符,置于一個表達式之前,該表達式可能產生的任何錯誤都會被忽略掉

=>——數組下標指定符號,指定數組的鍵與值

->——對象成員訪問符號

instanceof——測定一個對象是否來自指定的對象類(對象instanceof類名)


第7章 PHP的流程控制結構

順序結構、分支結構、循環結構

break——結束當前for、foreach、while、do-while、switch的執行

continue——跳過當前循環,進入下一次循環

exit——直接退出當前腳本


第8章 PHP的函數應用

局部變量、全局變量、靜態變量

常規參數函數——實參和形參的個數相等,類型一致

偽類型參數函數——參數不需要指定類型,例如empty()、pow()

引用參數函數——參數是引用傳遞參數,即對傳入參數的修改會傳遞給原變量,例如sort()

默認參數函數——例如person($name='張三'){……},參數被默認附上初值。注意:默認參數必須放在非默認參數的右側,否則函數將不會按照預期工作。

可變個數參數函數——函數可以接受任意數量的參數

function more_args() {$args = func_get_args(); // 將所有傳遞給函數的參數當作一個數組返回…… }除了使用func_get_args外,還可以結合使用func_num_args()-返回參數總數和func_get_arg()函數來獲取指定位置的參數

回調函數——將函數作為參數傳遞到調用的函數中

1.變量函數

function one($a, $b) {return $a + $b; } $result = "one"; echo $result(2, 3);2.使用變量函數聲明和應用回調函數

function fun1($fun2) {$fun2(); }function fun2() {……}3.使用call_user_func_array()函數自定義回調函數

call_user_func_array($fun, array($a)); // $fun-函數名,$a-參數列表4.類靜態函數和對象的方法回調

class Demo{static function fun($a, $b) {……} } call_user_func_array( array("Demo", "fun"), array('aaa', 'bbb')); // 第一個參數array(’類名稱字符串‘, ’類中靜態方法名稱字符串‘)class Test{function fun($a, $b) {……} } call_user_func_array( array(new Test(), 'fun'), array('aaa', 'bbb')); // 第一個參數array(對象引用, ’對象中方法名稱字符串‘)

遞歸函數——自調用函數


第9章 PHP中的數組與數據結構

關聯數組、索引數組

$contact[0] = 1; // 索引數組 $contact['ID'] = 1; // 關聯數組特別的賦值方法:

$contact[] = 1; // 默認下標為0,自增 $contact[14] = '高某'; // 指定非連續下標14 $contact[] = 'A公司'; // 下標為15,緊跟最高的下標值數組的遍歷:

foreach(array_expression as $key => $value) {……}

each($arr)

返回數組當前元素的鍵/值對,并向后移動數組指針到下一個元素的位置。

返回的是關聯和索引混合的數組,鍵名為0、1、key、value。

如果指針越過了數組的末端,則返回false。

list($param1, $param2, $param3……) = $arr

僅能用于數字索引數組并假定數字索引從0開始。

將每個元素的值賦給list函數中的參數。

與while循環結合(執行完指針在數組末端,需要執行reset()方法才能重頭遍歷數組)

while( list($key, $value) = each($contact) ) {echo "<dd> $key : $value </dd>"; }數組指針函數:

current($arr)、key($arr)、next($arr)、prev($arr)、end($arr)、reset($arr)

預定義數組(超全局變量)

$_SERVER、$_ENV、$_GET、$_POST、$_REQUEST、$_FILES、$_COOKIE、$_SESSION、$GLOBALS

數組相關處理函數

array_values($arr)

array_keys($arr)

in_array($needle, $arr, true)——第三個參數為true時,只有數組中存在并且數據類型與給定值相同才返回true

array_search($val, $arr, true)——搜索給定的值,存在則返回相應鍵名

array_key_exists($key, $arr)——檢查鍵名或索引是否存在與數組中

array_flip($arr)——將數組鍵值對調換,如果值重復,則最后一個鍵名覆蓋值;如果原數組中的值數據類型不是字符串或整數,將報錯

array_reverse($arr, true)——將數組元素順序反轉

統計數組的個數和唯一性

sizeof($arr)、count($arr)——元素個數

array_count_values($arr)——統計數組中所有值出現的次數

array_unique($arr)——刪除數組中重復的值,并返回新的數組,其中將保留第一個元素

使用回調函數處理數組的函數

array_filter($arr, "fun")——將數組中每個元素的值傳遞到fun函數中,若返回true,則將結果組成一個新的數組返回

array_walk($arr, "fun", $data)——將數組中每個元素傳遞到fun函數中,第一個參數是value,第二個是key,第三個或更多是$data

array_map("fun", $arr1, $arr2)——將數組1和數組2的值依此傳入fun函數中,fun函數必須返回值;如果fun為null,則返回兩個數組的合集數組

數組的排序函數

sort()——從小到大,按照鍵值

rsort()——從大到小,按照鍵值

asort()——從小到大,按照鍵值,排序并保持索引關系

arsort()——從大到小,按照鍵值,排序并保持索引關系

ksort()——保留鍵值,從小到大,按照鍵名

krsort()——保留鍵值,從大到小,按照鍵名

array_multisort($arr1, $arr2, $arr3)——多維數組排序

拆分、合并、分解和接合數組

array_slice($arr, $offset, $length, true)——從數組中取出一段值并返回,第四個參數為true時,返回的數組將保留鍵名

array_splice($arr, $offset, $length, $arr2)——將選中的數組部分用第四個參數替換,如果沒有指定替換的值,則原選中元素將插入到指定位置

array_combine(array $keys, array $values)——將$keys數組的值作為鍵,$values數組的值作為值,組合成新的數組,但如果其中一個數組為空或兩個數組的元素個數不同,則返回false

array_merge($arr1,$arr2……)——將多個數組合并到一起,如果鍵名重復則取最后的一個值;如果是索引數組則會以連續方式重新索引

array_intersect($arr, $arr1, $arr2……)——求多個數組的交集,鍵名保留不變

array_diff($arr, $arr1, $arr2……)——求多個數組的差集,鍵名保留不變

數組與數據結構

array_push($arr, $data)——壓入棧

array_pop($arr)——彈出最后一個元素

array_shift($arr)——刪除數組第一個元素,所有元素向前移動

array_unshift($arr)——在數組開頭插入一個或多個元素

其他數組處理函數

array_rand($arr, num)——隨機抽取數組的一個或多個元素,并返回它們的鍵名

shuffle($arr)——將數組順序打亂

array_sum($arr)——計算數組值總和

range(0, 50, 10)——創建一個包含指定范圍的元素的數組,第三個參數為步長

unset()——消除一個數組元素,但索引不會重新建立


第10章 PHP面向對象的程序設計

php5的最大特點是引入了面向對象的全部機制,并且保留了向下兼容性。

定義成員屬性必須有關鍵字public、private、static、var等,如不需要特定意義的修飾,就用var

構造方法:

每個類中默認存在一個沒有參數列表并且內容為空的構造方法

在類中聲明構造方法必須使用function __construct()

不存在構造方法重載,需通過設定默認參數來實現

析構方法:

php4中沒有提供析構方法,是php5新添加的內容

需定義function __destruct()

對象的引用失去時調用的方法

封裝性:

function __set($propertyName, $propertyValue)

function __get($propertyName)

function __isset($propertyName)——在外部調用isset方法檢測對象中是否存在私有成員屬性時,就會自動調用此方法

function __unset($propertyName)——在外部調用unset方法刪除對象中私有成員屬性時,就會自動調用此方法

繼承性:

使用extends關鍵字

如子類需要訪問父類的成員屬性,則父類使用protected關鍵字修飾該成員屬性

子類可以定義與父類同名的成員方法達到重載

通過parent::funName()來調用父類可能被覆蓋的方法

子類覆蓋父類的方法時,子類中重寫的方法的訪問權限一定不能低于父類被覆蓋的方法的訪問權限

常見關鍵字和魔術方法:

final:

可用于修飾類或類的方法,但不能修飾成員屬性

被final標識的類不能被繼承,被final標識的方法在子類中不能被覆蓋

static:

static成員唯一存在,在多個對象之間共享

成員屬于類,與對象實例和其他的類無關

通過類名::靜態成員屬性名、類名::靜態成員方法名()來訪問,在外部也可以使用這種方法

在類聲明的成員方法中可以使用self來代替類名,但不能使用$this

靜態方法中只能訪問靜態成員,因為非靜態成員都必須通過對象的引用才能訪問,而靜態的方法在對象不存在的情況下也可以直接使用類名來訪問。

單態設計模式:

一個類只能有一個實例對象存在

使用靜態方法獲取實例對象

class DB {private static obj = null;private function __construct() {echo "數據庫連接成功!";}static function getInstance() {if(isset(self::$obj)) self::$obj = new self(); // $obj為null,則實例化對象return self::$obj; // 返回實例化對象}function query($sql) {echo $sql;} }$db = DB::getInstance(); $db->query("select * from user");

const:

定義類中的常量,與static類似,都是通過類名或self進行訪問

不能通過對象來訪問

表示為常量的屬性是只讀的,不能重新賦值

instanceof:

確定一個對象是類的實例、類的子類,還是實現了某個特定接口,并進行相應的操作

clone:

$p2 = clone $p1——直接復制實例化對象,兩個對象完全獨立,互不干擾

在類中定義__clone()方法,則可以在實例化對象被克隆的時候執行操作

__toString():

直接echo 一個對象的時候會自動調用該方法,如果沒有聲明該方法,則會報錯

__call($fun, $data):

在調用類中沒有聲明的方法時會自動調用的方法,第一個參數是調用的方法名,第二個是傳入的參數

__autoload($className):

在類外定義的

在嘗試使用一個當前文件沒有定義的類時,會執行此方法,通過此方法自動載入對應的類

對象串行化:

把對象轉化為二進制字符串

需要在網絡中傳輸時,需要持久保存時

serialize($obj)、unserialize($obj)

__sleep()——在串行化前調用的函數,需返回一個數組,包含需要串行化的屬性的數組,未在該數組內的屬性將在串行化時被忽略

__wakeup()——在反串行化時自動調用,為成員屬性重新賦值

抽象類:

使用abstract關鍵字修飾function或者class

只要類中有一個方法是抽象方法,則該類也是抽象類,要用abstract關鍵字修飾

抽象類中不能定義私有成員屬性

抽象類必須由繼承它的子類實現所有抽象方法,否則這個子類還是一個抽象類,不能實例化

接口類:

interface中不允許定義變量,只能定義常量和抽象方法,并且所有成員都是public訪問權限的

使用implements關鍵字來實現,實現的類必須將接口所有的方法實現

接口之間也可以繼承

PHP是單繼承的,一個類只能有一個父類,但一個類可以實現多個接口


第11章 字符串處理

關于字符集合

將字符串看作字符集合時,并不是真的數組,使用count($str)并不能得到字符串的長度。

$str[0]、$str{0}兩種方法都可以得到字符串的第一個字符,但自PHP4起,前者已不再使用,由后者代替。

字符串輸出函數

echo($str)——輸出字符串

print($str)——輸出一個或多個字符串,與echo基本相同,但它有返回值1、0(成功、失敗),另外執行效率沒有echo高

die($str)——輸出一條消息,并退出當前腳本,exit函數的別名,

printf($format, $arg1, $arg2……)——輸出格式化字符串,arg1、arg2等參數插入到主字符串format中的百分號處,該函數是逐步執行的,如果%符號多于arg參數,則必須使用占位符,由數字和\$組成,例如%2\$、%1\$等。

%%——百分比符號

%b——二進制數

%c——按照ASCII值的字符

%d——帶符號十進制數

%e——可續計數法

%u——無符號十進制數

%f——浮點數

%F——浮點數

%o——八進制數

%s——字符串

%x——十六進制(小寫字母)

%X——十六進制(大寫字母)

sprintf($format, $arg1, $arg2……)——將格式化字符串寫入一個變量中

字符串格式化函數

ltrim($str, array $charlist)、rtrim($str, array $charlist)、trim($str, array $charlist)

去除空格或預定義字符

系統默認去除下列字符:" "(空格)、"\0"(NULL)、"\t"(制表符)、"\n"(換行)、"\r"(回車)

可以指定去除的范圍,例如0..9即去除數字

str_pad($str, $length, $pad_str, $type)

填補字符串

有三種類型:STR_PAD_BOTH、STR_PAD_LEFT、STR_PAD_RIGHT(默認)

length是填補后字符串的長度

大小寫轉換

strtoupper()——轉換成大寫

strtolower()——轉換成小寫

ucfirst()——首字母大寫

ucwords()——單詞首字母大寫

與html標簽相關的字符串轉換

nl2br($str)——在字符串換行之前插入<br />

htmlspecialchars($str, quote_style, charset)

將特殊字符進行轉換,例如<轉換成"&lt;"

第二個參數是引號的轉換方式:ENT_COMPAT(只轉換雙引號,保留單引號)、ENT_QUOTES(同時轉換兩種引號)、ENT_NOQUOTES(不對引號進行轉換)

第三個參數是字符編碼

stripslashes($str)——將字符串中的反斜杠去掉(PHP默認配置:表單數據中引號和\前面會自動加上一個\)

addslashes($str)——添加反斜杠

strip_tags($str, tags)——刪除字符串中的html標簽,第二個參數是要保留的html標簽,例如<h1>,多個則直接相連,例如<b><u><i>

其他字符串格式化

strrev($str)——反轉字符串

number_format($number, $decimals, $dec_point, $thousand_sep)——格式化數字,默認以,分隔千位,第二個參數指定小數位數,第三個參數指定小數點分隔符,第四個參數指定千位分隔符

md5($str, $raw_output)——用md5算法加密字符串,第二個參數默認為false,輸出32位的十六進制字符串,如果設置為true,則返回一個16位的二進制字符串

字符串比較

strcmp($str1, $str2)——區別大小寫比較,等于返回0,str1大于str2返回1,小于返回-1

strcasecmp($str1, $str2)——忽略大小寫比較

strnatcmp($str1, $str2)——自然排序進行字符串比較,字典排序里面4大于33,而自然排序中33比4大

strnatcasecmp($str1, $str2)——同上,只是忽略了大小寫


第12章 正則表達式

正則表達式

定界符——正則表達式必須用/、!、#、{}、|來包含

原子

特殊符號必須在前面加反斜杠,例如/\./、/\*/

非打印字符,例如:\r、\n、\r\n、\t、\v、\f

通用字符:\d(十進制數字)、\s(任意一個空白字符)、\w(任意一個數字、字母或下劃線),另外,\D(任意一個非十進制數字),大寫相反

范圍:[0-9]、[a-z](ASCII)或自定義[apj]sp可以匹配asp、psp、jsp

元字符

*——匹配0次、1次或多次的原子

+——匹配1次或多次原子

?——匹配0次或1次其前的原子

.——除了換行符以外的任意一個字符

|——兩個或多個分支選擇

{n}——其前原子出現n次

{n, m}——其前原子至少出現n次,之多出現m次

^或\A——以什么開頭

$或\Z——以什么結尾

\b——單詞邊界,即有空格,例如/\bis\b/來匹配is單詞

\B——單詞邊界以外的部分,無空格,例如/\Bis\b/可匹配this

[]——方括號中任意一個原子

[^]——除方括號中的任意一個原子

()——多個原子組成的大原子

后向引用

/^\d{4}\W\d{2}\W\d{2}$/ ——可匹配2015-06/15或2015/06-15或2015-06-15

/^\d{4}(\W)\d{2}\\1\d{2}$/ ——匹配2015-06-15或2015/06/15

其中\\1就是前面\W的引用

/(Windows)(Linux)\\2OS/ ——引用Linux

/(?:Windows)(Linux)\\1OS/ ——同樣是引用Linux,但使用了非捕獲元字符?:、?=、?!來忽略對相關匹配的保存

模式修正符

加在最后一個界定符后,用于設定正則表達式模式

i——忽略大小寫

m——將字符串視為多行

s——.將匹配所有字符,包括換行符

x——模式中的空白忽略不計,除非它已經被轉義

e——只用在preg_replace()函數里面,替換字符串中對逆向引用做正常的替換

正則表達式函數

preg_match($pattern, $subject, $matches)

第三個參數用于存儲匹配結果,其中matches[0]保存的是與pattern匹配的整體內容,而后面則是正則表達式中用()括起來的模式單元

該函數只做一次匹配,返回0或1的匹配結果數

preg_match_all($pattern, $subject, $matches, $flags)

用法與上相同,但該函數會執行知道字符串的結尾,返回匹配結果的次數。

其中第四個參數有兩個值:PREG_PATTERN_ORDER、PREG_SET_ORDER,前者是按上方法一樣排序匹配結果,后者則將matches[0]保存成第一個匹配結果的內容,matches[1]保存第二個匹配結果的內容

preg_grep($pattern, $arr)

對$arr的每個元素進行匹配,并返回匹配的數組

strstr($str, $needle)

未找到搜索的字符串,則返回false

第一次匹配成功后,返回字符串的剩余部分

stristr($str, $needle)

與上相同,只是對大小寫不敏感

strpos($str, $needle)

沒有找到字符串,則返回false

返回字符串在另一個字符串中第一次出現的位置

strrpos($str, $needle)

返回字符串在另一個字符串中最后一次出現的位置

stripos(), strripos()

與上相同,只是對大小寫不敏感

preg_replace($pattern, $replacement, $subject, $limit)

將字符串替換并返回新的字符串

第四個參數$limit用于控制替換的次數

str_replace($search, $replace, $subject, $count)

與上基本相同

preg_split($pattern, $subject, $limit, $flags)

第三個參數控制最終返回的子串個數

第四個參數值有:PREG_SPLIT_NO_EMPTY(返回非空部分)、PREG_SPLIT_DELIM_CAPTURE(連同定界符模式中的括號表達式也會被返回)、PREG_SPLIT_OFFSET_CAPTURE(對每個出現的匹配結果同事返回其附屬的字符串偏移量,返回的數組結構改變,第一項為匹配字符串,第二項為偏移量)

explode($separator, $string, $limit)

分割字符串

implode($glue, $pieces)

join為該函數的別名,將數組中所有元素組合成一個字符串,第一個參數是連接符,第二個是字符串數組








總結

以上是生活随笔為你收集整理的读书笔记-《细说PHP》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。