搜尋

隨機推薦

看了一下datastore的入門,以及開始採用MVC方式來寫php,於是想拿php為redis寫個model,可以實現一些datastore的基本功能...於是碰到這樣一個問題-.-

php裡__CLASS__這類東西是靜態綁定的,如果不再子類裡重載的話,那麼繼承父類方法所得到的依舊是父類的名稱而不是子類的名稱。比如:

class A{
function __construct(){
echo __CLASS__;
}
static function name(){
echo __CLASS__;
}
}
class B extends A{}

此時無論將B實例化還是直接調用靜態方法,echo出來的都會是A。翻qeephp裡是用子類重載的方式解決這個問題,可是這樣的話沒新搞一個子類就得把相應調用類名的方法重載一邊.....這算是php在oop上的缺陷吧,試了試python上沒這個問題。

google之。找到兩個函數get_class()和get_called_class()。get_class()用於實例調用,加入參數($this)可解決子類繼承調用的問題,而get_called_class()則是用於靜態方法調用,可是...這玩意兒只在php 5.3以後才有....5.3還是比較遙遠的事...還好5.2之前可以手動實現這個函數:參閱http://php.net/manual/en/function.get-called-class.php 下方有高手添加了幾種5.3之前的實現方式。這樣,即可實現印出靜態子類別的方法了。

何為正規表示式?

幾年前,我對 Web 表單的輸入框做了一些有趣的檢驗。用戶將在此表單中輸入電話號碼。隨後,此電話號碼會按用戶鍵入的形式打印在用戶的廣告中。按照要求,美國的電話號碼可以幾種方式輸入:可以是 (555) 555-5555,也可以是 555-555-5555,但不能接受 555-5555 這樣的形式。

您或許會感到奇怪,為什麼我們不拋開所有的非數字字符,只保證剩餘的字符總數為 10 呢?這種方法確實可行,但無法阻止用戶輸入 !555?333-3333 這樣的內容。

以一名 Web 開發者的眼光來看,這種情況帶來了一項有趣的挑戰。我可以編寫例程來檢查各種不同格式,但我希望能夠找到一種解決方案,假如用戶隨後認可 555.555.5555 這樣的格式,這種解決方案能具備一定的靈活性。

這正是正規表示式(簡稱為 regex)的適用場景。之前我已經將它們剪切並粘貼到了應用程序中,但從未發現任何難以理解的語法問題。Regex 看上去非常像數學表達式。當您看到一個形如 2x2=4 的表達式時,您通常會想到 “2 乘以 2 等於 4”。正規表示式與之非常類似。閱讀過本文後,當您看到一個這樣的正規表示式 ^b$ 時,您就會告訴自己:“一行的開頭是 b,隨後就是行尾”。不僅如此,您還會意識到在 PHP 中使用正規表示式有多麼簡單。

 

中文分詞是做好中文內容檢索、文本分析的基礎,主要應用於搜索引擎與數據挖掘領域。中文是以詞為基本語素單位,而詞與詞之間並不像英語一樣有空格來分隔,因而中文分詞的難點在於如何準確而又快速地進行分詞。以下介紹4款開源中文分詞系統。

 

我們經常會在PHP程序中處理來自用戶輸入或從數據庫中讀取的數據,可能在你的字符串中有多餘的空白或製表符,回車等。存儲這些額外的字符是有點浪費空間的。

如果您想要去掉字符串開始和結束的空白可以使用PHP內部函數trim() 。但是, 我們經常想完全清除空白。需要把開始和結束的空白清除掉,將多個空白變為一個空白,使用一個規則來處理同樣的類型的其它空白。

完成這些可以使用PHP的正規表示式來完成

下例可以去除額外Whitespace

<?php

$str = " This line  contains\tliberal \r\n use of   whitespace.\n\n";

// First remove the leading/trailing whitespace

//去掉開始和結束的空白

$str = trim($str);

// Now remove any doubled-up whitespace

//去掉跟隨別的擠在一塊的空白

$str = preg_replace('/\s(?=\s)/', '', $str);

// Finally, replace any non-space whitespace, with a space

//最後,去掉非space 的空白,用一個空格代替

$str = preg_replace('/[\n\r\t]/', ' ', $str);

// Echo out: 'This line contains liberal use of whitespace.'

echo "<pre>{$str}</pre>";

?>

上例一步一步的去掉所有的空白。首先我們使用trim()函數來去掉開始和結束的空白。然後,我們使用preg_replace() 去除重複的。\s代表任何whitespace 。(?=) 表示向前查找 。它味著只匹配後面有和它本身相同字符的字符。所以這個正則表達式的意思是: "被whitespace 字符跟隨的任何whitespace 字符。" 我們用空白來替換掉,這樣也就去除了,留下的將是唯一的whitespace 字符。

最後, 我們使用另一個正則表達式[\n\r\t]來查找任何殘餘的換行符(\n), 回車(\r), 或製表符(\t) 。我們用一個空格來替換這些。

簡介: 設計模式只是為 Java™ 架構師準備的 —— 至少您可能一直這樣認為。實際上,設計模式對於每個人都非常有用。如果這些工具不是 “架構太空人” 的專利,那麼它們又是什麼?為什麼說它們在 PHP 應用程序中非常有用?本文解釋了這些問題。

 

設計模式 一書將設計模式引入軟件社區,該書的作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗稱 “四人幫”)。所介紹的設計模式背後的核心概念非常簡單。經過多年的軟件開發實踐,Gamma 等人發現了某些具有固定設計的模式,就像建築師設計房子和建築物一樣,可以為浴室的位置或廚房的構造方式開發模板。使用這些模板或者說設計模式 意味著可以更快地設計更好的建築物。同樣的概念也適用於軟件。

設計模式不僅代表著更快開發健壯軟件的有用方法,而且還提供了以友好的術語封裝大型理念的方法。例如,您可以說您正在編寫一個提供鬆散耦合的消息傳遞系統,也可以說你正在編寫名稱為觀察者 的模式。

用較小的示例展示模式的價值是非常困難的。這往往有些大材小用的意味,因為模式實際上是在大型代碼庫中發揮作用的。本文不展示大型應用程序,所以您需要思索的是在您自己的大型應用程序中應用示例原理的方法 —— 而不是本文演示的代碼本身。這不是說您不應該在小應用程序中使用模式。很多良好的應用程序都以小應用程序為起點,逐漸發展到大型應用程序,所以沒有理由不以此類紮實的編碼實踐為基礎。

既然您已經瞭解了設計模式以及它們的有用之處,現在我們來看看 PHP V5 的五種常用模式。

這兩天,Charles研究Yii框架的使用,注意到Yii的配置文件,採用一種寫法。如下:

  /**
* 註釋若干
* 以下是一個格式如config.php的文件
*/

return array(
'config1' => 'some value',
'config2' => 'some value',
);
?>

在這個文件中,直接就寫了一個return,這個用法又一次突破了我的常識。特意查詢了一下文檔,裡面這樣描述的:

return

If called from within a function, the return() statement immediately ends execution of the current function, and returns its argument as the value of the function call. return() will also end the execution of an eval() statement or script file.

If called from the global scope, then execution of the current script file is ended. If the current script file was include()ed or require()ed, then control is passed back to the calling file. Furthermore, if the current script file was include()ed, then the value given to return() will be returned as the value of the include() call. If return() is called from within the main script file, then script execution ends. If the current script file was named by the auto_prepend_file or auto_append_file configuration options in php.ini, then that script file's execution is ended.

return語句可以終止函數執行那自不必說了,這裡還提到了可以終止eval過程的進行,並且如果處於被include的文件中,還能使return的值成為include和require函數的返回值。這樣寫的好處是,一個語句就可以得到配置項的內容了。

  //原來這樣寫
require './config.php';
function test() {
global $config;
if ($config['a']=='b') echo 'hello';
}

//現在
function test() {
$config = require('./config.php');
if ($config['a']=='b') echo 'hello';
}
?>

作者:Charles

原文鏈接:[Tips] PHP中return的用法

最後修改日期: 2000-11-16


PHP編程標準是經由Todd Hoff許可,基於《C++ 編程標準》為PHP而重寫的,
作者為Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它

使用本標準,如果您想拷貝一份留做自用的話,那是完全免費的,這也是我們製作它的原因。假如您發現了任何的錯誤又或者是有任何的改進,請您給筆者發一個email,以便筆者將它們合併到最新更新中去。

 

TimThumb

一、什麼是TimThumb?

TimThumb是一個簡潔高效的創建圖片縮略圖的程序。它功能非常強大,並且制定性很強。通過對多個參數的控制,你可以靈活地設置縮略圖片的輸出樣式。

TimThumb是一個很不錯的選擇,它可以為你的網站批量地生成樣式化的縮略圖,並在你的主機上緩存起來。這樣既生成了縮略圖也 加快了載入速度。

一個蠻方便又實用的縮圖程式,需要有PHP跟GD函式庫,可以將圖片依等比例縮小,可以處理PNG/GIF/JPG,適合做會員的頭像(Avatar)上傳,或者是相簿的縮圖,優點是避免網友上傳的圖片太大將版型撐開,也可以縮小圖片的尺寸,加快網頁瀏覽的速度!

縮圖時可以依等比例縮圖,也可以按指定長寬縮圖,處理過的圖片可以儲存在HD上,也可以直接輸出到網頁

第 2 頁,共 4 頁

Please publish modules in offcanvas position.