国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
自己の PHP 架臺(tái)の注意(二),架橋 php 架臺(tái)の注意
續(xù)言
回調(diào)函數(shù)
VIEW層和ob函數(shù)
類__URL__常量和全局類
用單例模式定義數(shù)據(jù)庫(kù)連接基類
DB類的sql查詢函數(shù)
后續(xù)
ホームページ バックエンド開(kāi)発 PHPチュートリアル 獨(dú)自の PHP フレームワークの構(gòu)築経験 (2)、PHP フレームワークの構(gòu)築経験_PHP チュートリアル

獨(dú)自の PHP フレームワークの構(gòu)築経験 (2)、PHP フレームワークの構(gòu)築経験_PHP チュートリアル

Jul 12, 2016 am 08:55 AM
php

自己の PHP 架臺(tái)の注意(二),架橋 php 架臺(tái)の注意

續(xù)言

對(duì)于本次更新,我想說(shuō):

  • 本框架由本人挑時(shí)間完善,而我還不是PHP大神級(jí)的人物,所以框架漏洞難免,求大神們指出。
  • 本框架的知識(shí)點(diǎn)應(yīng)用都會(huì)寫在博客里,大家有什么異議的可以一起討論,也希望看博客的也能學(xué)習(xí)到它們。
  • 本次更新,更新了函數(shù)規(guī)范上的一些問(wèn)題,如將函數(shù)盡量的獨(dú)立化,每一個(gè)函數(shù)盡量只單獨(dú)做好一件事情,盡量減少函數(shù)依賴。還對(duì)框架的整體優(yōu)化了一下,添加了SQ全局類,用以處理全局函數(shù),變量。

再次貼出GITHUB地址:Sqier框架GITHUB地址


回調(diào)函數(shù)

替換了很low的類名拼裝實(shí)例化,然后拼裝方法名的用法,使用PHP的回調(diào)函數(shù)方式:

原代碼:

<code>$controller_name = 'Controller\\' . self::$c_name;
$action_name = self::$a_name . 'Action';
$controller = new $controller_name();
$controller->$action_name();
</code>

修改后代碼

<code>    $controller_name = 'Controller\\' . self::$c_name;
    $controller = new $controller_name();
    call_user_func([
        $controller,
        self::$a_name . 'Action'
    ]);
</code>

這里介紹一下PHP的函數(shù)回調(diào)應(yīng)用方式:call_user_func和call_user_func_array:

<p>call_user_func ( callback $function [, mixed $parameter [, mixed $... ]] )</p>
<p>調(diào)用第一個(gè)參數(shù)所提供的用戶自定義的函數(shù)。</p>
<p>返回值:返回調(diào)用函數(shù)的結(jié)果,或FALSE。</p>

call_user_func_array()的用法跟call_user_func類似,只不過(guò)傳入的參數(shù)params整體為一個(gè)數(shù)組。

另外,call_user_func系列函數(shù)還可以傳入在第一個(gè)參數(shù)里傳入匿名參數(shù),可以很方便的回調(diào)某些事件,這些特性在復(fù)雜的框架里應(yīng)用也十分廣泛,如yii2的事件機(jī)制里回調(diào)函數(shù)的使用就是基于此。


VIEW層和ob函數(shù)

框架在controller的基類中定義了render方法來(lái)渲染頁(yè)面,它會(huì)調(diào)用類VIEW的靜態(tài)函數(shù)來(lái)分析加載對(duì)應(yīng)頁(yè)面的模板。

<code>public static function display($data, $view_file) {

    if(is_array($data)) {
        extract($data);//extract函數(shù)解析$data數(shù)組中的變量
    }else {
        //拋出變量類型異常
    }

    ob_start();
    ob_implicit_flush(0);
    include self::checkTemplate($view_file);//自定義checkTemplate函數(shù),分析檢查對(duì)應(yīng)的函數(shù)模板,正常返回路徑
    $content = ob_get_clean();

    echo $content;
}
</code>

這里重點(diǎn)說(shuō)一下ob(output buffering)系列函數(shù),其作用引用簡(jiǎn)明代魔法的ob作用介紹:

  • 防止在瀏覽器有輸出之后再使用setcookie,或者h(yuǎn)eader,session_start函數(shù)造成的錯(cuò)誤。其實(shí)這樣的用法少用為好,養(yǎng)成良好的代碼習(xí)慣。
  • 捕捉對(duì)一些不可獲取的函數(shù)的輸出,比如phpinfo會(huì)輸出一大堆的HTML,但是我們無(wú)法用一個(gè)變量例如$info=phpinfo();來(lái)捕捉,這時(shí)候ob就管用了。
  • 對(duì)輸出的內(nèi)容進(jìn)行處理,例如進(jìn)行g(shù)zip壓縮,例如進(jìn)行簡(jiǎn)繁轉(zhuǎn)換,例如進(jìn)行一些字符串替換。
  • 生成靜態(tài)文件,其實(shí)就是捕捉整頁(yè)的輸出,然后存成文件,經(jīng)常在生成HTML,或者整頁(yè)緩存中使用。

它在ob_start()函數(shù)執(zhí)行后,打開(kāi)緩沖區(qū),將后面的輸出內(nèi)容裝進(jìn)系統(tǒng)的緩沖區(qū),ob_implicit_flush(0)函數(shù)來(lái)關(guān)閉絕對(duì)刷送(echo等),最后使用ob_get_clean()函數(shù)將緩沖區(qū)的內(nèi)容取出來(lái)。


類__URL__常量和全局類

TP里的__URL__等全局常量用著很方便,可以很簡(jiǎn)單的實(shí)現(xiàn)跳轉(zhuǎn)等操作,而定義它的函數(shù)createUrl函數(shù)我又想重用,于是借鑒YII的全局類定義方法:

定義基類及詳細(xì)方法(以后的全局方法會(huì)寫在這里)

<code>class BaseSqier{
    //方法根據(jù)傳入的$info信息,和當(dāng)前URL_MODE解析返回URL字符串
    public static function createUrl($info = '') {
        $url_info = explode('/', strtolower($info));
        $controller = isset($url_info[1]) ? $url_info[0] : strtolower(CONTROLLER);
        $action = isset($url_info[1]) ? $url_info[1] : $url_info[0];
        switch(URL_MODE){
            case URL_COMMON:
                return "/index.php?r=" . $controller . '/' . $action;
            case URL_REWRITE:
                return '/' .$controller . '/' . $action;
        }
    }
 }
</code>

在啟動(dòng)文件中定義類并繼承基類;

<code>require_once SQ_PATH.'BaseSqier.php';
class SQ extends BaseSqier{
}
</code>

在全局內(nèi)都可以直接使用SQ::createUrl()方法來(lái)創(chuàng)建URL了。這樣,定義__URL__常量就很輕松了。


用單例模式定義數(shù)據(jù)庫(kù)連接基類

<code>class Db {
    protected static $_instance;
    public static function getInstance() {
        if(!(self::$_instance instanceof self)) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    private function __construct() {
        $link = new \mysqli(DB_HOST, DB_USER, DB_PWD, DB_NAME) or die("連接數(shù)據(jù)庫(kù)失敗,請(qǐng)檢查數(shù)據(jù)庫(kù)配置信息!");
        $link->query('set names utf8');
    }
    public function __clone() {
        return self::getInstance();
    }
}
</code>

使用單例模式的核心是:

  • 私有化構(gòu)造函數(shù),使無(wú)法用new來(lái)創(chuàng)建對(duì)象,也防止子類繼承它并改寫其構(gòu)造函數(shù);
  • 用靜態(tài)變量存放當(dāng)前對(duì)象,定義靜態(tài)方法來(lái)返回對(duì)象,如對(duì)象還未實(shí)例化,實(shí)例化一個(gè),存入靜態(tài)變量并返回。
  • 構(gòu)造其__clone魔術(shù)方法,防止clone出一個(gè)新的對(duì)象;

DB類的sql查詢函數(shù)

DB查詢函數(shù)是一個(gè)很復(fù)雜的部分,它是一個(gè)自成體系的東西,像TP和YII的查詢方法都有其獨(dú)特的地方。我這里暫時(shí)先借用TP的MODEL基類,有時(shí)間再慢慢補(bǔ)這個(gè)。

嗯,介紹一下像TP的查詢里的方法聯(lián)查的實(shí)現(xiàn),其訣竅在于,在每個(gè)聯(lián)查方法的最后都用 return this 來(lái)返回已處理過(guò)的查詢對(duì)象。


后續(xù)

yii2里的數(shù)據(jù)表和model類屬性之間的映射很酷(雖然被深坑過(guò)), 前面一直避開(kāi)的模塊(module,我可以想像得到把它也添加到URI時(shí)解析的麻煩)有時(shí)間考慮一下。

邊寫邊優(yōu)化。

さて、続きます... ちなみに、あなたの個(gè)人ウェブサイトを宣伝してください: www.alwayscoding.cn 私の連絡(luò)先情報(bào)は掲示板ページの右側(cè)にあります。質(zhì)問(wèn)がある場(chǎng)合は、そこで連絡(luò)できます。

www.bkjia.comtru??ehttp://www.bkjia.com/PHPjc/1116381.html技術(shù)記事獨(dú)自の PHP フレームワーク構(gòu)築體験 (2)、PHP フレームワーク構(gòu)築體験の続きです。 今回の更新では、このフレームワークは私自身で完成させたものであり、私はまだ PHP マスターではないので... と言いたいと思います。
このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

2つのPHPアレイを組み合わせる方法ユニークな値は? 2つのPHPアレイを組み合わせる方法ユニークな値は? Jul 02, 2025 pm 05:18 PM

2つのPHPアレイをマージし、一意の値を保持するには、2つの主要な方法があります。 1.インデックスアレイまたは重複排除のみの場(chǎng)合、array_mergeとarray_uniqueの組み合わせを使用します:最初のマージArray_merge($ array1、$ array2)を使用してから、array_unique()を使用して、最終的にすべての一意の値を含む新しいアレイを取得します。 2。関連アレイと最初の配列のキー値のペアを保持したい場(chǎng)合は、演算子を使用してください。$ result = $ array1 $ array2。これらの2つの方法は、キー名が保持されているか焦點(diǎn)があるかに応じて、異なるシナリオに適用できます。

PHP出口機(jī)能の使用方法は? PHP出口機(jī)能の使用方法は? Jul 03, 2025 am 02:15 AM

Exit()は、すぐにスクリプトの実行を終了するために使用されるPHPの関數(shù)です。一般的な用途には次のものが含まれます。1。ファイルが存在しない、または検証が失敗するなど、例外が検出されたときにスクリプトを事前に終了します。 2。デバッグ中の出力中間結(jié)果と実行を停止します。 3。Header()と組み合わせてリダイレクトした後、Exit()を呼び出して、後続のコード実行を防ぎます。さらに、exit()は、文字列パラメーターを出力コンテンツまたはステータスコードとして整數(shù)として受け入れることができ、そのエイリアスはdie()です。

HTMLで記事、セクション、および脇にセマンティック構(gòu)造を適用する HTMLで記事、セクション、および脇にセマンティック構(gòu)造を適用する Jul 05, 2025 am 02:03 AM

HTMLでのセマンティックタグの合理的な使用は、ページ構(gòu)造の明確さ、アクセシビリティ、SEO効果を改善することができます。 1.ブログの投稿やコメントなどの獨(dú)立したコンテンツブロックに使用されると、自己完結(jié)型でなければなりません。 2。通常はタイトルを含む分類関連のコンテンツに使用され、ページのさまざまなモジュールに適しています。 3。サイドバーの推奨事項(xiàng)や著者プロファイルなど、メインコンテンツに関連する補(bǔ)助情報(bào)に使用されますが、コアではありません。実際の開(kāi)発では、ラベルを組み合わせて、その他を組み合わせ、過(guò)度のネストを避け、構(gòu)造をシンプルに保ち、開(kāi)発者ツールを使用して構(gòu)造の合理性を検証する必要があります。

PHPで配列を作成する方法は? PHPで配列を作成する方法は? Jul 02, 2025 pm 05:01 PM

PHPで配列を作成するには、Array()関數(shù)を使用するか、ブラケットを使用する方法は2つあります。 1. Array()関數(shù)を使用することは、適切な互換性を備えた従來(lái)の方法です。 $ fruits = array( "apple"、 "banana"、 "orange")などのインデックス配列、および$ user = array( "name" => "john"、 "age" => 25)などの連想配列を定義します。 2。[]を使用することは、$ COLORなどのPHP5.4以降、より簡(jiǎn)単なサポート方法です

要求された操作には、標(biāo)高ウィンドウが必要です 要求された操作には、標(biāo)高ウィンドウが必要です Jul 04, 2025 am 02:58 AM

「この操作は権限のエスカレーションが必要」というプロンプトに遭遇した場(chǎng)合、管理者の権限を継続する必要があることを意味します。ソリューションには以下が含まれます。1?!腹芾碚撙趣筏茖g行」プログラムを右クリックするか、ショートカットを設(shè)定して常に管理者として実行します。 2.現(xiàn)在のアカウントが管理者アカウントであるかどうかを確認(rèn)してください。 3.管理者の権限を使用してコマンドプロンプトまたはPowerShellを開(kāi)き、関連するコマンドを?qū)g行します。 4.ファイルの所有権を取得するか、必要に応じてレジストリを変更することにより制限をバイパスしますが、そのような操作は注意し、リスクを完全に理解する必要があります。許可の身元を確認(rèn)し、上記の方法を試してみると、通常は問(wèn)題を解決します。

PHP RAW POSTデータPHP PHP RAW POSTデータPHP Jul 02, 2025 pm 04:51 PM

PHPで生のポストデータを処理する方法は、JSON、XML、またはその他のカスタム形式データの受信に適した$ rawData = file_get_contents( 'php:// input')を使用することです。 1.php://入力は読み取り専用のストリームであり、これは投稿リクエストでのみ有効です。 2.一般的な問(wèn)題には、サーバー構(gòu)成またはミドルウェアの読み取り入力ストリームが含まれます。これにより、データを取得することができません。 3.アプリケーションシナリオには、フロントエンドのフェッチリクエストの受信、サードパーティのサービスコールバック、およびRestfulapisの構(gòu)築が含まれます。 4. $ _POSTとの違いは、$ _POSTが標(biāo)準(zhǔn)フォームデータを自動(dòng)的に解析し、元のデータは非標(biāo)準(zhǔn)形式に適しており、手動(dòng)解析を可能にすることです。 5。通常のHTM

ファイルアップロードをPHPで安全に処理する方法は? ファイルアップロードをPHPで安全に処理する方法は? Jul 08, 2025 am 02:37 AM

PHPファイルのアップロードを安全に処理するには、ソースとタイプを確認(rèn)し、ファイル名とパスを制御し、サーバー制限を設(shè)定し、メディアファイルを2回プロセスする必要があります。 1.トークンを介してCSRFを防ぐためにアップロードソースを確認(rèn)し、ホワイトリストコントロールを使用してFINFO_FILEを介して実際のMIMEタイプを検出します。 2。ファイルをランダムな文字列に変更し、検出タイプに従って非WEBディレクトリに保存する拡張機(jī)能を決定します。 3。PHP構(gòu)成は、アップロードサイズを制限し、一時(shí)的なディレクトリnginx/apacheはアップロードディレクトリへのアクセスを禁止します。 4. GDライブラリは寫真を再利用して、潛在的な悪意のあるデータをクリアします。

PHPの參照により、値ごとに変數(shù)をどのように渡しますか? PHPの參照により、値ごとに変數(shù)をどのように渡しますか? Jul 08, 2025 am 02:42 AM

inphp、variablySarepassedByValueByDefault、意味することを意味します

See all articles