PHP:UChome 分析

WBOY
WBOYオリジナル
2016-06-23 14:34:35818ブラウズ

1.1.1 コード構造 1.1.2 ウーチョメのコアフレームワーク

ウーチョメはSNSシステムですが、PHP技術の蓄積が深い康盛社の商用製品でもあり、学ぶ価値のあるものがたくさんあります。垂直型 SNS ウェブサイトをセットアップするために使用するだけでなく、自分のコード レベルを向上させ、コードの品質を向上させるための彼のテクニックのいくつかを学ぶこともできます。

PHP 開発では、cake や zend フレームワークなどの軽量なものが常に好まれますが、小規模なシステムにはまだ多すぎます。シンプルかつ適度な方法でシステムを十分に優れたものにします。

これも MVC モデルですが、厳密に言えば、それ自体で一連のモデルを実装するのではなく、データベースから返されるビューを介して実装されます。独自に実装された一連のテンプレート メソッド。機能コードとインターフェイス設計を分離します。

Uuchome のフレームワークにはいくつかのコア ファイルがあります:

source/function_

投稿された文字列の取得、ユーザー ID の取得、データの挿入、データの更新、ログ、テンプレート呼び出しインターフェイスなど、よく使用される関数を提供します。 getstr、insertable、updatetable 関数は非常に実用的で便利です。

gestr の関数パラメータを見てください。

function getstr($string, $length, $in_slashes=0, $out_slashes=0, $censor=0, $bbcode=0, $html=0)

文字列をインターセプトします、エスケープ文字、HTML、bbcode がすべて含まれています

データを挿入および更新する方法も非常に簡単です。例として、データを挿入する必要はありません。

function inserttable($tablename) , $insertsqlarr, $returnid= 0, $replace = false)

従業員情報を挿入する場合は、次のように記述できます:

inserttable('staffs',array('name'=>'hankshuang','post) '=>'de',' age'=>25),1)

source/function_

テンプレート ファイルの解析メソッドを提供するテンプレート関数ファイル。 function_common ファイルを解析し、テンプレート ディレクトリ内のファイルをファイルに解析します。テンプレート構文 としてエスケープされます。 php if ($staffid) {?> を使用して foreach を参照すると、解析されたコードは複雑ではありません。興味がある場合は、function_ ファイルの parse_template メソッドを注意深く読んでください。これにより、preg_replace を呼び出して正規表現を置き換えます。このようにして、目に見えないところで

source/function_

キャッシュの書き込みと更新を提供します。 最も重要なメソッドは、cache_write メソッドです。

function queue_write($name, $var, $values) )

従業員データをキャッシュしたい場合は、$staff = array('name'=>'hankshuang','age'=>25)

メソッドを呼び出すだけです

cache_write('staffcache', 'staff ',$staff)

次回このコンテンツを使用したい場合は、data_staff ファイルを data ディレクトリに直接インクルードすると、$staff オブジェクトが得られます。原理は単純ですが、使用すると非常に便利です。

これら 3 つのファイルだけで、高速で実用的なシステムを構築できます。 もちろん、uhome には、画像処理、メール送信、スケジュールされたタスクなどの非常に便利な機能もあります。非常に賢く、PHP 開発スキルの向上に非常に役立ちます。

1.1.3 うちょめの構成テーブルキャッシュ

SNS サイトとしては、CMS サイトに比べて動的要件が高く、静的ページを生成する価値はあまり大きくなく、変更要素が多すぎます。一方では、ucome のキャッシュはビューのキャッシュです。一方で、データベース サーバーの負荷を軽減するために各ページに必要な設定ファイルをキャッシュします。 /、構成は次のように読み取られます:

//構成ファイル

if(!@include_once(S_ROOT.'./data/data_')) {

include_once(S_ROOT.'./source/function_');

config_cache();// 構成ファイルを更新します

}

data/data_ ファイルは config_cache() によって生成されます。function_ ファイル内の具体的な実装を見てください:

// 構成ファイルを更新します

function config_cache ($updatedata=true) {

グローバル $_SGLOBAL, $_SCONFIG;

$_SCONFIG = array();

$query = $_SGLOBAL['db']->query('SELECT * FROM '. tname('config'));

while ($ value = $_SGLOBAL['db']->fetch_array($query)) {

value value['datavalue'])?array():unserialize($ value['datavalue']);

$_SCONFIG[$value['var']] = $value['datavalue'];

cache_write('config', '_SCONFIG', $_SCONFIG);

. ....一部省略

}

構成テーブルのデータを $_SCONFIG 配列に読み取り、cache_write を使用してキャッシュに書き込みます。 = S_ROOT.' ./data/data_'.$name.'.php';

$cachetext = "

"if(!define('IN_UCHOME')) exit('アクセスが拒否されました' ); rn "。

。:$ cachefile write error。");このコードは、HASH 変数を直接インクルードできるコードに変換し、ファイルに保存します。

たとえば、cache_write("test","hanks",array("strong"=>1,"good"=>1,"nice"=>1))

と書くと、最後に data_ ファイルを取得します。内部のコンテンツは

if(!define('IN_UCHOME')) exit('Access Denied');

$hanks = array("strong"=>1,") です。 Good"=> ;1,"nice"=>1);

より複雑なネストも実行できます。 arrayeval は文字列を変換します。

キャッシュ用の php ファイルの生成は、udome で最も一般的に使用されるモードであり、テンプレートにも同じことが当てはまり、シンプルで実用的です

1.1.4 udome データベース アクセス

space_ ファイルには、次のクエリ コードがあります。

$query = $_SGLOBAL ['db']->query("SELECT * FROM ".tname('friend')." WHERE uid='$space[uid]' AND status='1' LIMIT 0, 6");

$_SGLOBAL['db'] とはどのようなオブジェクトですか? Function_ ファイルで答えを見つけます:

Function dbconnect () {

Global $ _Sglobal, $ __SC;

(s_root. './Source/class _');バル [ 'db '] = 新しい dbstuff;

$_SGLOBAL['db']->charset = $_SC['dbcharset'];

$_SGLOBAL['db']->connect($_SC['dbhost' ], $_SC['dbuser'], $_SC['dbpw'], $_SC['dbname'], $_SC['pconnect']);

}

それは dbstuff オブジェクトであることが判明しましたclass_ ファイル内

dbstuff クラスの最も重要なメソッドは connect() メソッドと query() メソッドです。connect はデータベース接続を開く役割を果たします。クエリのコア コードは次のとおりです。 :

$func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ? ENT' ) {

t $ this- & gt; 型の実行後判断して値を「mysql_query」に代入すると、$func() は mysql_query() と等しくなります。ror に詳しい人は間違いなくこの手法に精通しているでしょう。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。