關於PHP開發的9條建議_php技巧

來源:互聯網
上載者:User

本文只是個人從實際開發經驗中總結的一些東西,並不是什麼名言警句,寫出來有兩個目的:一是時刻提醒自己要按照這些知識點來寫自己代碼,二是為了分享,說不定對你有用呢?萬一,是吧。。。

1.首要意識:安全

大多數時候,我們開發的Web程式都是需要跟資料庫打交道的,所以這裡幾乎可以說SQL注入是一個怎麼也無法避免要拿出來討論一下的問題。而且近年來像XSS和CSRF攻擊也變得大行其道,使得"駭客"們貌似又有了一把把利器,而我們總是處於被動的狀態。不過我們要記得是下面這兩個原則:

1. 永遠不要相信使用者輸入的東西。(老話了,但這是真的)
2. 將自己需要輸出的資料進行轉義。

簡單來說就是:filter input , escape output

如果你是新手,不要再使用類似以下的查詢語句了:

SELECT FROM users WHERE username = $_POST['username'] AND password = $_POST['password'];

還有就是,使用PDO或Mysqli吧,不要再使用老式的mysql操作了。

而對於,CSRF的解決方案,目前接觸的都是給每一次的表單提交都設定一個token值,然後在表單提交的時候校正之即可。

2.明確地知道各個比較操作符的差別

PHP的比較操作符,這其實可以說是一個很小的注意點,但是在某些時候真的很重要。比如說很多時候我們得考慮清楚,該用==還是===,如果你使用過strpos()這個函數,下面的代碼可能會給你一個直觀的感受:

<?php$authors = 'Chris & Sean';if (strpos($authors, 'Chris')) {  echo 'Chris is an author.';} else {  echo 'Chris is not an author.';}

上面這段代碼的運行結果其實是輸出Chris is not an author,但是現實情況是,Chris & Sean真的是Author啊,怎麼回這樣呢?其實是這樣的:Chris正好出現在Chris & Sean首位開始處,也就是0這個位置,所以substr()返回了,由於條件判斷語句中bool判斷,所以0作為了false處理,於是程式輸出了Chris is not an author,但是在這種情況之下我們該怎麼處理呢?我們其實可以這樣的:

<?phpif (strpos($authors, 'Chris') !== FALSE) {  echo 'Chris is an author.';} else {  echo 'Chris is not an author.';}

這裡的!==和!=的不同就體現出來了。

3.可以減少使用else就少使用else

這個貌似從我一開始接觸編程就有的一個想法,因為每次看到if(){}else{}就有一種這一段其實可以寫得更好的感覺,因為一旦你減少了使用else關鍵字,你得代碼會減少兩行!沒錯,兩行也是我們的追求,而且,從我的經驗看,else少的代碼貌似可讀性更高,對我來說。

if( this condition ){$x = 5;}else{$x = 10;

如果,在$x的預設值是10,還是下面這樣寫感覺比較好:

$x = 10;if( this condition ){$x = 5;}

4.去掉不必要的括弧

這裡的目的其實跟else關鍵字部分是一樣的,我們是為了更簡短的代碼和更優越的可讀性,對以下的情況,你都應該考慮最佳化代碼:

if ($gollum == 'halfling') {$height --;}

其實是可以這樣的:

if ($gollum == 'halfling') $height --;

你甚至可以這樣:

if ($gollum == 'halfling') $height --;else $height ++; if ($frodo != 'dead')echo 'Gosh darnit, roll again Sauron';foreach ($kill as $count)echo 'Legolas strikes again, that makes' . $count . 'for me!';

是不是有一種又短又清晰的感覺?

5.多用str_replace()

在很多時候我們需要對一些字串進行替換,在PHP中有以下幾個函數可以達到這個目的:

str_replace()ereg_replace()preg_replace()

如果你確實是需要使用正則匹配,那就使用preg_replace(),而如果在可實現替換的情況下,請使用str_replace(),因為據不完全統計,str_replace()的效率在這三個當中是最高的。

6.使用三元運算子

這個可能很多人都有這個感受,使用三元運算子之後,我們可以去掉一堆if else語句了,代碼又短又爽。

$host = strlen($host) > 0 ? $host : htmlentities($host);

7.使用緩衝

目前PHP熱門的緩衝技術可能就是Redis和Memcached了,在PHP的官方文檔中,也有Memcached的使用教程,至於Redis,我最近在研究中,後續會給出一些教程,如果一切順利的話。

8.使用架構

架構的好處很多,可能是在效能方面有所損失外,貌似找不到不用架構的理由了,架構即可以加快你的開發速度,也可以讓你在寫代碼的過程中擼的舒舒服服,而且想很多安全問題,你都會得到很好的解決。我這裡首推Laravel,不過像Yii2 Slim Symfony都是非常棒的架構,除了Symfony沒有嘗過過之外,剩下的三個我都有使用經曆,最後就基本是用Laravel了。不過我建議的Laravel可能不適合你,這還是得看個人喜好。

9.用isset()代替strlen()

如果你需要在項目代碼中需要根據一個字串的長度來做條件判斷,這個時候非常推薦你直接使用isset(),因為在同等條件之後,isset()的速度是strlen()的五倍左右,所以:

<?phpif (isset($username[5])) {  // The username is at least six characters long.}if (strlen($username) >= 6) {  // The username is at least six characters long.}

以上的兩個條件判斷都是可以達到相同的目的,但是我推薦使用的是第一種。

以上所述就是本文的全部內容了,希望大家能夠喜歡

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.