ホームページ >バックエンド開発 >PHPチュートリアル >PHP で仮想プロキシを使用して遅延読み込みテクノロジを実装する、phploading_PHP チュートリアル

PHP で仮想プロキシを使用して遅延読み込みテクノロジを実装する、phploading_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:15:09893ブラウズ

PHP で仮想プロキシを使用して、遅延読み込みテクノロジ、PHP ローディングを実装します

ちなみに、私はこれを Martin の「Enterprise Application Architecture Patterns」から学びました。これは PHP 動的言語の機能を支援し、仮想プロキシ プレースホルダーを通じて Java よりもはるかに簡単に遅延読み込みを実装できます。唯一の欠陥は、組み込みの基本タイプではなく、オブジェクトのみをプロキシできることです。

私が試した PHP ドメイン モデルの設計では、これを使用して DomainObject の遅延読み込みを実装しました。

コードをコピーします コードは次のとおりです:

* 仮想プロキシでは、メンバーにアクセスされた場合にのみ、クロージャ関数が呼び出され、ターゲット オブジェクトが生成されます。
*
* @作者tonyseek
*
*/
クラスVirtualProxy
{
プライベート $holder = null;
private $loader = null;

/**
* * 仮想プロキシ。メンバーにアクセスされた場合にのみクロージャ関数が呼び出され、ターゲット オブジェクトが生成されます。
*
* @param Closure $loader はプロキシオブジェクトのクロージャ関数を生成します
​​*/
パブリック関数 __construct(Closure $loader)
{
$this->loader = $loader;
}

/**
* * プロキシメンバーメソッドの呼び出し
*
* @param string $method
* @param 配列 $arguments
* @throws BadMethodCallException
* @return 混合
​​*/
パブリック関数 __call($method, 配列 $arguments = null)
{
$this->check();

if (!method_exists($this->holder, $method)) {
throw new BadMethodCallException();
}

return call_user_func_array(
array(&$this->holder, $method),
$arguments);
}

/**
* プロキシメンバー属性の読み取り
*
* @param string $property
* @throws ErrorException
* @return 混合
​​*/
パブリック関数 __get($property)
{
$this->check();

if (!isset($this->holder->$property)) {
throw new ErrorException();
}

return $this->holder->$property;
}

/**
* プロキシメンバー属性の割り当て
*
* @param string $property
* @param 混合 $value
​​*/
パブリック関数 __set($property, $value)
{
$this->check();

$this->holder->$property = $value;
}

/**
※プロキシオブジェクトが既に存在するか確認し、存在しない場合は生成します。
​​*/
プライベート関数 check()
{
If (null == $this->holder) {
$loader = $this->loader;
$this->holder = $loader();
}
}
}


// テスト
$v = 新しい VirtualProxy(function(){
echo 'Now, Loading', "n";
$a = 新しい ArrayObject(range(1,100));
$a->abc = 'a';
//実際の使用ではここでDataMapperのfindXXXメソッドを呼び出します
// ドメイン オブジェクトのコレクションを返します
$a を返します;
});
//プロキシオブジェクトはオリジナルオブジェクトとして直接アクセスされます
// この時、コンストラクターで渡されたコールバック関数が呼び出されます
//これにより、オブジェクト操作の読み込みの遅延が実現します
echo $v->abc . $v->offsetGet(50);

phpでファイルのロードを遅らせる方法

最初に表示されたコンテンツをバッファからプッシュします。後続のコンテンツが出てくるかどうかは、前のコンテンツには影響しません。 . .
簡単なコードは次のとおりです:
//重要
echo rand(),'最初に出てきたもの
';
ob_flush();
flush();

/ /重要ではありません。 . .
include "big.avi";
sleep(3);
ob_flush();
?>

追加した質問から、上記のコードが無駄に書かれていることがわかりました。
裸の馬~ 結局のところ、必要なのは ajax 遅延ロードだけです!

PHP で遅延読み込みを実装するにはどうすればよいですか?

PHP での遅延ロードは、最終的にはオンデマンドでファイルをロードし、オンデマンドでオブジェクトをインスタンス化することです。
オンデマンドでのインスタンス化は、上記のメソッドを使用して実装できますが、より多くの場合、プロキシが使用されます。ローダーが処理します

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/906675.html技術記事仮想エージェントは PHP で遅延読み込みテクノロジを実装するために使用されます。PHP の読み込みは、Martin の「エンタープライズ アプリケーション アーキテクチャ パターン」から学んだもので、PHP の動的言語機能を支援します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。