php 編程題 加法計算器:PHP內部字符串操作函數(1)(組圖)php大賽編程題答案
2023-02-08
1串
1.1 少用正則表達式
如果可以使用PHP內部的字符串操作函數,盡量使用它們來代替正則表達式,因為它們的效率比正則表達式高。
不用說,正則化消耗的性能最多。
函數比函數快得多,函數比來得快。
您是否錯過了一個有用的功能?
例如:(),(),(),(),(),()。
1.2 字符替換
如果您需要轉換的只是單個字符,請使用字符串 as() 函數進行替換,而不是數組:
$addr = ($addr, "abcd", "efgh"); // 建議
$addr = ($addr, ('a' => 'e', )); // 不建議
效率提升:10倍。
字符替換比常規(guī)替換快,但比正則表達式快 1/4。
另外,不要做無意義的替換,即使沒有替換也為它們的參數分配內存。 非常慢!
使用第一次查找(非??欤﹣聿榭词欠裥枰鼡Q,如果需要,則進行更換。
如果需要更換,效率幾乎相等,相差約 0.1%。
如果不需要更換:使用速度提高 200%。
1.3 壓縮大字符串
使用()和()壓縮和解壓一個大容量的字符串,然后存入和存出數據庫。
這個內置函數使用了 gzip 算法,可以將字符串壓縮 90%。
1.4 回聲輸出
使用逗號而不是點來回顯字符串更快。
雖然,echo 是一種語言結構,而不是真正的功能。
但是,它可以將多個以逗號分隔的字符串作為“函數”參數傳遞,因此速度會更快。
回顯 $str1, $str2; // 快速地
回顯 $str1 。 $str2;// 有點慢
1.5 盡量使用單引號
PHP 引擎允許使用單引號和雙引號來包裹字符串變量,但是它們的速度有很大的不同!
帶雙引號的字符串會告訴PHP引擎先讀取字符串的內容,找到其中的變量,并更改變量對應的值。
一般來說,字符串是沒有變量的,使用雙引號會導致性能不佳。
最好使用字符串連接而不是雙引號字符串。
$output = "This is a plain string"; // 不好的實踐
$output = 'This is a plain string'; // 好的實踐
$type = "mixed"; // 不好的實踐
$output = "This is a $type string";
$type = 'mixed'; // 好的實踐
$output = 'This is a ' . $type . ' string';
1.6 代替使用
在檢查字符串的長度時,我們首先想到的是使用 () 函數。
這個函數執(zhí)行得相當快,因為??它不做任何計算,只返回存儲在 zval 結構(C 的內置數據結構,用于存儲 PHP 變量)中的字符串的已知長度。
但是,由于()是一個函數,或多或少會慢一些,因為函數調用會經過很多步驟php 編程題 加法計算器,比如小寫字母,哈希查找,會和被調用的函數一起執(zhí)行。
在某些情況下,您可以使用 () 技巧來加速代碼的執(zhí)行。 例如:
if (($foo) < 5) { echo "Foo is too ";}// 使用 ()
if (!($foo{5})) { echo "Foo 太強了 ";}
1.7 分割字符串
() 在拆分字符串時比 () 快。
split()
0.001813 - 0.002271 seconds (avg 0.002042 seconds)
explode()
0.001678 - 0.003626 seconds (avg 0.002652 seconds)
1.8 echo 比
因為 echo 沒有返回值,它返回一個整數。
注意:當echo輸出的字符串比較大時,不調整會嚴重影響性能。
打開壓縮,或打開將內容放入緩沖區(qū),可以改善性能問題。
2個陳述
2.1 最好不要用@
用 @ 屏蔽錯誤會減慢腳本速度,并在后臺進行大量額外工作。
與不使用@相比,效率差距是3倍。 特別是不要在循環(huán)中使用@。
5循環(huán)測試,即使先用(0)關閉報錯,循環(huán)完成后再打開,也比用@快。
2.2 避免使用魔術方法
以__開頭的函數稱為魔法函數,它們都是在特定條件下觸發(fā)的。
這些魔法函數包括:()、()、()、()等。
以()為例,如果無法將類名與實際的磁盤文件相匹配,則需要進行大量的文件存在性判斷。
而判斷文件是否存在需要磁盤I/O操作。 眾所周知,磁盤I/O操作的效率是很低的,所以這就是降低機制效率的原因。
因此,在設計系統時,需要定義明確的類名到實際磁盤文件的映射機制。
規(guī)則越簡單明了,()機制的效率就越高。
該機制并非天生效率低下,只是自動加載功能的濫用和設計不當會導致其效率降低。
因此,盡量避免使用這種魔術方法是值得商榷的。
2.3 不要在循環(huán)中使用函數
例如:
for($x=0; $x < count($array); $x++) {
}
這種寫法每次循環(huán)都會調用()函數,效率大大降低。 建議這樣做:
$len = count($array);
for($x=0; $x < $len; $x++) {
}
讓函數在循環(huán)外一次獲取循環(huán)計數。
2.4 使用三元運算符
在簡單的判斷語句中,三元運算符?:更加簡潔高效。
2.5 使用替代分支語句
, case 比使用多個 if, else if 語句要好,代碼更易閱讀和維護。
2.6 屏蔽敏感信息
使用 () 函數可以防止向用戶顯示潛在的敏感信息。
理想情況下,應該在 php.ini 文件中完全禁用錯誤報告。
如果你使用的是共享虛擬主機,php.ini不能修改,最好加上()函數。
放在每個腳本文件的第一行,或者用()加載,可以有效保護敏感的SQL查詢和路徑,出錯時不會顯示。
2.7 不實用的 tags 鼓勵使用這種方法,可以使代碼更簡潔。
2.8 沒有關閉標簽的純PHP代碼
如果文件內容是純 PHP 代碼,最好去掉文件末尾的 PHP 結束標記 ?>。
這可以防止在結束 PHP 標記后意外包含空格或換行符,這會導致 PHP 在腳本無意輸出這些空格時開始輸出它們。
2.9 切勿使用和
這是兩個非常古老的特性,在當時(十年前)可能是一個很好的方法,但現在似乎并非如此。
舊版本的 PHP 安裝時默認打開這兩個功能,這可能會導致安全漏洞、編程錯誤和其他問題。
例如,只有當用戶輸入數據時才會創(chuàng)建變量等。
這兩個函數從PHP5.4.0開始就被廢棄了,所以每個程序員都應該避免使用它們。
如果你過去的程序使用了這兩個函數,請盡快將它們移除。
3個功能
3.1 嘗試使用PHP內部函數
內置函數用C語言實現,并經過PHP官方優(yōu)化,效率更高。
3.2 使用絕對路徑
嘗試在 和 中使用絕對路徑。
如果包含相對路徑,PHP 將遍歷內部以查找該文件。
使用絕對路徑會避免此類問題php 編程題 加法計算器,并且解析路徑所需的時間會更少。
3.3 包含文件
盡量不要使用和文件,他們多了一個判斷文件是否被引用的過程,盡量不要使用。
并使用, 方法代替。
鳥哥在博客中多次聲明盡量不要使用 and 。
3.4 函數比類方法快
調用一個只有一個參數且函數體為空的函數所花費的時間相當于 7-8 次 $++ 操作。
具有相同功能的類方法大約是15個$++操作。
3.5 使用子類方法
只有可重用的方法放在基類中,其他功能盡量在子類中實現。 子類中方法的性能優(yōu)于基類中的方法。
3.6 一個類的性能與方法的數量無關
在測試類中添加 10 個或更多新方法后,性能沒有差異。
3.7 讀取文件內容
當可以用()代替file()、()、feof()、()等系列方法時,盡量使用()。
因為他效率更高!
3.8 通過引用傳遞參數
通過參數地址引用的方式,實現了函數的多個返回值,比傳值更高效。
方法是在參數變量前加一個&。
3.9 方法不宜細分太多
仔細想想你真正要重用的代碼是什么?
3.10 盡量保持靜態(tài)
如果一個方法可以是靜態(tài)的,那么聲明它是靜態(tài)的,速度可以提高1/4,甚至我測試的時候,這提高了將近三倍。
當然,這個測試方法需要在10萬級以上執(zhí)行,效果才會明顯。
事實上,靜態(tài)方法和非靜態(tài)方法的效率的主要區(qū)別在于內存。
靜態(tài)方法在程序開始時產生內存,實例方法(非靜態(tài)方法)在程序運行時產生內存。
所以靜態(tài)方法可以直接調用,而實例方法在調用前需要生成一個實例。 靜態(tài)的速度很快,但是多了會占內存。
任何語言都在內存和磁盤上運行。 至于是否面向對象,只是軟件層的問題。 底層是一樣的,只是實現方式不同。
靜態(tài)內存是連續(xù)的,因為它是在程序一開始就產生的網站模板,而實例方法申請的是離散空間,當然不如靜態(tài)方法快。
靜態(tài)方法總是調用同一塊內存,缺點是不能自動銷毀,但實例化可以銷毀。
3.11 C擴展的實現
如果代碼中有很多耗時函數,可以考慮用C擴展來實現。
4個變量
4.1 及時銷毀變量
數組、對象、變量在PHP中占用內存較多,這是PHP底層的zend引擎造成的。
一般來說,PHP數組的內存利用率只有1/10。
也就是說在C語言中一個100M內存的數組在PHP中需要1G。
特別是在使用PHP作為后臺服務器的系統中,經常會出現內存消耗過大的問題。
4.2 使用$變量
如果需要獲取腳本執(zhí)行時間,$[''] 比time()更好。
一個是現成的,可以直接使用,一個是需要函數的結果。
4.3 方法中建立騰云網絡
在類的方法中建立騰云網絡是最快的,幾乎和在方法中調用騰云網絡一樣快。
4.4 騰云網絡比全局變量更快
因為騰云網絡存在于棧中。
當一個函數占用的??臻g不是很大的時候,這部分內存很可能被打的一干二凈,CPU訪問的效率很高。
反之,如果一個函數同時使用全局變量和騰云網絡,當兩個地址相差較大時,CPU需要來回切換,效率會下降。
4.5 騰云網絡代替對象屬性
創(chuàng)建對象屬性(類中的變量網站優(yōu)化,例如:$this->prop++)比騰云網絡慢3倍。