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

歡迎訪問 生活随笔!

生活随笔

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

php

阅读php程序设计笔记

發布時間:2024/4/15 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阅读php程序设计笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天知道了哪些注釋風格是從哪些語言演變過來的了。

/**/是c語言的注釋風格。

//是c++的語言注釋風格

原來php還有種類似shell的注釋風格:#



原來php是作為一shell程序進行解析的。這種情況發生在:編譯php的時候,沒有指定任何服務器類型。那么就表示不作為服務器的一個模塊了。這個時候就是以命令行的方式調用了。

難怪:大公司為什么要求要熟悉shell編程。難道,他們是將php作為一個命令行程序執行嗎?


現在發現連php圣經中的作者估計也沒有完全理解 $a = $b;。在其書中,提到。許多程序員都在這里編寫了不高效的代碼。因為其實已經拷貝了一份。

從《php程序設計》中提到的意思分析,$b賦值給$a應該只是更新了符號表。并沒有得到更多的內存。不過,我也迷糊了:$b假如看做是一個指針。那么,這里也就是復制了一份指針給了$a。也就是最終產生了兩份指針,指向了同一個內存地址空間。

或許我的理解不準確,那么 $a= $b 與$a =& $b;的不同是什么?


從本書中,學到了一個新的概念:符號表(symobl table)。書中沒有專門說明。按我理解:符號表就是記錄符號與內存地址空間的對應關系。換一種理解,里面保存了變量名(這可看成一個符號)指向哪個內存地址。
查資料,得到網友解釋:符號表是編譯原理的概念、用于編譯器區分變量,常量,關鍵字(if,else等),數字,字符串等東西的一個鏈表


看了書籍解釋,才明白php資源自動回收系統是怎么做到自動回收不被引用的資源了:

每個資源都有一個資源引用數的統計情況(記住英文術語:refrence count)。假如引用數是0的時候。就會自動釋放內存。

要學習到的本書提到的專業術語:

copy-on-write 寫時復制。就是對兩個拷貝中任意一個進行修改值(寫操作)時,那么就會復制一塊內存區域。
copy-on-write另外一種說法是swallow-copy:吞咽式復制。在值被淹沒(覆蓋、修改)時,就會產生復制機制
引用計算:對一個資源引用情況進行統計。用一個數字表示,該資源有多少個引用。這樣確定是否要釋放內存空間。



從書中第一次看到該函數:get_included_files()。獲取當前腳本文件有哪些用到include或require的地方。






本書中也提到了函數的復制方面知識:
默認情況下代碼:
function get()
{
$m = 5
return $m;
}

$a = get();//這里就會將函數返回的值復制一份。結果產生兩份

引用代碼:

function & get()
{
$m = 5
return $m;
}
$a = & get();//由于使用了& ,那么不會復制一份。$a還是指向原來$m所在的內存地址。


書中討論了函數引用的性能方面知識,值得記要:

$a = & get();類似的引用不是必要的。為什么,因為,php中有一個寫時復制機制。我的理解是,即使你這樣引用了。但是,假如更改了$a的值(進行了寫入操作)后,php自動會創建一份新的拷貝。那么你使用&就沒有達到預期的效果了。
我在想,什么時候會有寫入$a的情況發生?假如$a得到的是一個對象的實例。在后面的代碼中使用$a->price =25;更改了對象的屬性值。那么也就會觸發寫時復制機制。


速度方面:返回引用比返回一個值的拷貝要慢。




本書中提到了可變函數。在thinkphp中就用到了:
傳入模塊和操作名。那么這個操作名就是要執行的方法。所以,就會出現這樣的的代碼:$naem = $action();傳入的參數是哪個。就執行對應的函數。



本書中提到,大括號"()"的經典作用:從周圍分離出變量名。
區分:
$a = "abc$defj";//如果沒有括號。可能會將$defj當成變量處理。所以最好使用如下方式:
$a = "abc($d)efj";


實現的原來與性能方面:

原來,雙引號中的變量替換是使用查找的方式進行的。這樣需要消耗cpu資源。難怪,php圣經中提到。盡量少將變量名放到雙引號中。這樣增加了不必要的查找替換時間。


2011.1.18閱讀位置:第四章 引用字符串看完。here文檔是未接觸的知識。等待看


今天接著看。筆記如下:
一、學習了echo、print、prinf之間的區別。
主要掌握echo與print之間區別。printf用得比較少。跟c語言的同名函數類似的用法。
1.本質不同。echo是一個語言結果。print是一個函數。有一點注意,echo()帶有括號也不會出現錯誤。這也并不能說明它是一個函數。

2.效果或者使用區別,echo能輸出多個值。print只能輸出一個值。echo '值一','值二';//多個值之間用逗號隔開。

3.printf也是輸出。只是他可以對輸出的值按一個模板進行格式化。就是這點好。



二、符號比較的新理解

原來一直以為“===”是表示嚴格相等,就是類型和值同是相等。今天才理解其機制。理解上的差異,雖然沒有在實際編程中遇到障礙。但判斷會出現無法預料的偏差。按照過去的理解,那么 字符串"5"與整型5使用"==="比較的時候。因為會判斷兩者數據類型是否相等。"5"===5得到的結果是false。

看了本書,明白它的機制是:如果比較的類型是從int和string中選擇。將所有值統一轉化成整型進行比較。那么,"5"===5得到的結果是false。這里"5"轉化成整型還是5


這里講到了我過去一直沒有注意到的一點:字符串"1kkm"轉化成整型結果是"1"。過去我以為:只要是字符串轉化成整型結果都會是0。除了該字符串全部是以數字形式比如"5623"轉化成整型的結果是5623。之前的以為是錯了。從本書中注釋中一句話:因為字符串不以為數字開頭(所以"php rocks"轉化的結果是0)。



為了加深理解,我編寫了如下代碼進行測試:



$a = "5263";

$b =intval($a);
var_dump($b);得到結果是5263。
將$a = "5ggg263";結果是5。結論:string轉化成整型是根據首個字符中的內容而定的。首個字符不是數字形式。那么就無法轉化。轉化成0。

注:這樣的轉化規則只是對表現出來的結果進行總結。具體實現原理,就是手冊上提到的按十進制進行轉化。

2011.1.20 看到字符串比較部分


接著看:


從本書中,提到有個函數可以體現出php中堆棧的應用效果。array_push()和array_pop()體現了堆棧的后進先出的特性(array_pop推出的元素總會是最后進的數組元素)

總結

以上是生活随笔為你收集整理的阅读php程序设计笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

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