php新版本廢棄 preg_replace /e 修飾符

來源:互聯網
上載者:User
最近伺服器php版本升級到了 5.6 發現出了很多警告

preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

一開始沒注意,後來發現 很多這樣的警告,於是網上查了下 發現 php5.5版本以上 就廢棄了 preg_replace 函數中 /e 這個修飾符 /e 這個修飾符的意思 就是讓 正則替換的 時候 替換規則 支援 php 代碼

那麼 應該怎麼辦呢

其實 只要 把 preg_replace 裡面 有 /e 修飾符的代碼 修改成 preg_replace _callback 然後重新寫下就好了

例子

最簡單的 寫法

preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)

修改成

preg_replace("/([A-Z])/",'gwyy', $str);function gwyy($match) {return  '_'.strtolower($match[1]);}

第二個參數是個 函數名 然後在外部寫一個函數 但是 我們每次定義一個函數 感覺很麻煩 所以我們可以用匿名函數

比如說

preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)

修改成

preg_replace_callback('/([A-Z])/',                      function ($matches) {                        return '_' . strtolower($matches[0]);                      },                      $str)
即可

這裡特別警告 修改後 /([A-Z])/e 最後一個 e 一定要去掉 不然就出錯了

如果在類裡面 還能這麼寫

class a {private $joinStr = "__AAAAA__";public function __construct() {$this->joinStr = preg_replace_callback("/__([A-Z_-]+)__/sU",array($this,'gwyy'),$this->joinStr);echo  $this->joinStr;}publicfunction  gwyy($match) {print_r($match);return 'aaa';}}$a = new a();

第二個參數不是一個函數 而變成了一個數組 表示 調用 $this 類 裡面的 gwyy 方法 執行 gwyy會自動接受到 一個 $match 參數表

下面再看一個稍微複雜點的例子

$patterns       = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/eis';$replacement    = "\$this->parseXmlTag('$tagLib','$tag','$1','')";$content        = preg_replace($patterns, $replacement,$content);

這個替換 使用了 類裡面的自訂方法 如果 你再 用匿名函數直接套的話 會提示 錯誤 因為 匿名函數上下文裡面 並沒有 該方法和 該變數 所以 要用 use() 來引入 同時 注意 一定要 把 正則裡面 e 去掉
$that = $this;$patterns       = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/is';$content=preg_replace_callback($patterns, function($matches) use($tagLib,$tag,$that){    return $that->parseXmlTag($tagLib,$tag,$matches[1],'');},$content);

這裡 用 $thit 代替 $this; 好了 今天先記錄到這裡吧 。

小煙原創,轉載請註明出處!

以上就介紹了php新版本廢棄 preg_replace /e 修飾符,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

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