[開心學php100天]第五天:與基本功搞一搞基(上)

來源:互聯網
上載者:User
本期格言

   越進階的技術越需要紮實的基本功。而學好基本功的首要條件是能沉住氣和靜下心。

   往往很多程式員太想一口吃一個肥婆而直接略過基礎部分去學習進階部分,長期以往會導致越來越喪失繼續學下去的信心,但迫於各種壓力又不想放棄,於是氣急攻心、鬱悶糾結,最後血壓越來越高,於是產生了一個程式員通病的描述詞:“浮躁”。

本期扯淡

   大家會發現很多程式員喜歡買書自學。其實這是很好的習慣,有對IT行業的熱情和喜好就會有執著,有了執著就會想盡各種辦法擷取知識,當我們通過無限的量變後跳過了執著這個階段,終于欣喜的發現了走出“程式員囧途”的出口,於是開始不顧一切的奮起創業。

    然而買書自學方面,一些有點初級技術經驗的程式員青年可能有個習慣:一般會先熟讀第二章(有些書第一章囉嗦到什麼程度,大家懂的)。

   然後發現頭兩章挺簡單,於是偷偷的往後跳過四到五章,這個跳躍很有意思,一般技術類書籍過了五、六章後,會開始講執行個體和應用。

   於是該青年頓時來了興趣,他決定先看應用執行個體,因為執行個體搞懂了明天就可以投簡曆了,效率多高啊。於是青年點上煙盤腿坐在床上,並警告室友把dota音效關掉。

    一個小時後,室友歡呼—“翻盤了”。再一看青年,已經在床上沉睡多時。

 

本文部分

PHP的string函數

  很多javaer和C# Man經常會在網上互博,譬如”java好還是c#好”。這方面的話題甚至比”社會主義”好還是“資本主義”好討論的更加激烈,更加無底線。這時其中一個javaer拿出java中對String對象的處理,宣稱其有多麼的高效率、結構多麼的分明,C# Man不甘示弱也拿出string對象,宣稱其有多麼的方便、功能有多麼的強大。這時一個PHPer不小心點進了該貼,他弱弱的打算參與跟帖,於是他列出了PHP中string函數列表,瞬間終結了上面(意)淫亂的場面。

  不得不說,PHP的string函數確實非常強大。很有名的wordpress把這些函數幾乎用到了極致,而今天本文要簡要講的就是關於PHP的string函數。

 string函數是php內建的。不需安裝,不需引用任何函數庫。

  這點很好,乾淨利落。我喜歡,拿來就可以使用。

    接下來爆料幾個常用的string函數,不常用的大家可以去查手冊,個人建議有些函數根本不用去學,用的時候再查即可。這點是java或者c#均不能媲美的。

一、去空格,字元替換,輸出

 這三個字元處理函數實在是太常見了,行內人士把它們叫做“三寶”,為何叫三寶?那是因為掌握這三寶加上一些html知識簡直就可以立馬上手做一個並不是特別幼稚的頁面了,同時基本上大部分功能性函數都要用到這老三樣。

  去空格:trim 。去除字串前後空格

  用法也灰常的簡單 如:

    $str=’   南京8秒綠燈走百米 中國式過馬路孰之錯   ‘;

    $str=trim($str);   // 這裡就達到了去除”南“和”錯“兩個字身邊的空格

   這個函數看似簡單,不過有個小學問。它不光是去除字串兩把的普通空格,還能去除字串兩邊的”\t(這貨是全太陽系最討厭的,白白淨淨的,不仔細看還以為是空格其實是一個tab)” “\0″也就是 NULL。”\n”分行符號,”\x0B” – 縱向列表符, ”\r” – 斷行符號。所以不要以為trim只去空格,其實php核心默默無聞的幫你幹掉了很多字元。

  如果$str=trim($str,’\t’); 則代表 這個trim只去除字串前後的 \t也就是 tab,遇到普通空格之類的是不會管的。

 輸出:它存在 echo、print、printf 這三個主要函數

  至於區別:大家只需知道 print比echo稍微慢,printf可以格式化輸出即可。不用搞的太清楚。如果什麼都要搞得太明朗太計較,那麼你何必去學php。

  這裡只講printf(print大家就忘記這貨吧,只需用echo即可)

   $str = “php”;
   $number = 100;
   printf(“開心學%s %u天”,$str,$number);

  則會輸出 開心學php100天。按照順序%s代表字元出,$u代表數字。有幾個%符號,後面就要跟幾個參數。如果我倒過來寫:

  printf(“開心學%s %u天”,$number,$str); 那就會輸出開心學100 0天。php首先會把$number當做字串那100就是”100″,把”php”這個字串當做數字型,大家知道把php變為數字是行不通的,所以就是0.

 字串替換函數:str_replace

  這個函數非常的有用。怎麼個有用發?網警會讓你充分知道你為什麼要學會這個函數。你懂的。

  $str=str_replace(“禁用語”,”我愛祖國”,”XXX@#%$&%@這裡其中有一個是禁用語“);

   這就代表我要把某些 禁用語替換成”我愛祖國“。注意這個函數後面還有個count選擇性參數。幾乎沒什麼用,那是用來計數用的,代表一共替換了幾次。如果要實現只替換幾個,那麼要用Regex來做。本章暫時不講。

  有人說這個函數效率差。其實對於小網站小資料量的處理根本無所謂。如果你發現你的網站中簡簡單單的str_replace一個小字串已經很影響伺服器效能了。那麼恭喜你,你要發大財了。

 

  

二、strpos()

   這個函數也是非常有用的。類似於我們在其他語言中常用的indexof。

   譬如:$str=’這是我又一個個人部落格:網址是www.shenyisyn.org。’;

    那麼:

    $i=strpos($str,”shenyisyn”);
    echo strval($i);  //注意 這裡為什麼要用strval ,如果這個$i 有值,那麼它是int型的。你直接輸出在網頁裡,通過肉眼是看不到的。

  輸出結果就是38。

 這裡有個小學問

  我們不能簡單的用 if(strpos($str,’shenyisyn’)) 來判斷字串中是否存在 “shenyisyn”這個詞彙。

因為假如

  $str=”shenyisyn是我的中文名縮寫”;

  那麼 strpos($str,’shenyisyn’) 的真值是0。在php中0就是false。而實際上這個匹配是能匹配到的

  所以你要這樣:

  if(strpos($str,’shenyisyn’)===false) 這就代表沒有指定的’shenyisyn’這個字串存在.

  在PHP中 ”===”的區別就好比高考時的”裸體檢查“,除了醫生確認我們==男生外,還要裸體”===”確認一下,萬一你只是外表像而已呢?也就說”===”連值帶類型一起比對了。在php中0==false,但是0!===false

 這個函數是從左至右進行檢索。反過來就是strrpos 它是從右往左,類似於lastindexof

 同樣的.strpos是區分大小寫。那麼不區分的函數就是stripos。另外一個從右往左的貨就是 strripos。

 用法一樣只不過順序不一樣。就不多贅述了。

三、計算字串長度-strlen

  這是一個很搞的函數。都怪秦始皇走的太早。如果統一了全世界就沒這問題了。

  $str=”紅十會”;

  echo strval(strlen($str));

  大家知道結果嗎?肯定不是3,也不是6,而是9。

 大家看一下:strlen(“紅十會”);  這裡預設每個中文字元算3個位元組。那麼整個長度就是6。這裡英文和數字都是1個位元組。如果改成strlen(“紅10會”);那麼就是3+1+1+3=8個位元組。

 如果要轉換成大家耳目能詳細的 英文1個位元組,中文兩個位元組 那麼要這麼做

  echo mb_strlen($str,’utf8′); //這裡要確保mbstring 這個庫被開啟。預設是不開啟的。

  當然mb_strlen第二個參數還可以是gbk或者gb2312,這個不建議使用,這會讓你對人生感到迷茫的。況且現在開發網站,使用utf8是基本之道。如果你的網站連使用utf8這樣的大字型檔都產生巨大壓力了而無法正常運轉了,那麼再一次恭喜你,你這次真的發了。既然發了,那就不在乎多買幾台伺服器了。

四、strip_tags 剝去html標記

  官方中文解釋使用了”剝去“,這個詞用得好。用了剝去這個犀利的詞語。什麼叫剝去?好比你明明穿了一件很炫很酷的t恤去單位路上,突然一個流氓跑過來把你的t恤剝去穿自己身上跑了,於是你只能光著身子回單位上班,到了單位同事把你笑了一整天。

  這個剝去就是這個效果。它只是剝掉,並沒有過濾掉包含在html或者xml標記內部的內容。

  如:$str=”一個老漢好心捐了10萬<strong>被挪用後</strong>,他很傷心”;

    那麼$str=strip_tags($str);

     echo $str; 則 會輸出 一個老漢好心捐了10萬被挪用後,他很傷心。

    這個函數的”剝去“效果在於,他不會把<strong>標記中間的”被挪用後“的字元刪去,否則就變成了”一個老漢好心捐了10萬,他很傷心“。

    這個函數非常妙。妙到大大的降低了我們開發web程式中的很多難度和繁瑣的地方。正應了php就是為web而生的這句話。

今天暫時講這幾個函數。稍後繼續。。。。

如有不當之處,望積極指正。

 

未完待續。。。。

 註:本系列章節的轉載除非本人自發,否則一律必須得到本人的書面同意。否則本人保留投訴和鄙視的權利。

原文作者:沈逸


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.