PHPの怠惰負荷を実現する方法

3331 ワード

本論文の実例はPHPの不精負荷を実現する方法を述べている。皆さんの参考にしてください。具体的な分析は以下の通りです。
通常のphpのロードはinclude()やrequire()などによって外部ファイルをロードした後、例の呼び出し方法や静的方法を直接呼び出しますが、このように導入文を書くのは本当に面倒くさいです。特定のパスのファイルを全部導入して、直接的に実行できるフレームもあります。ロードしたものは少なくないです。プログラムの性能に影響します。
PHPの反射系Reflectionクラスを通して直接に対応クラスの反射クラスを得ることができます。
test.phpファイルは以下の通りです。

<?php
 class test{
   public function showName(){
     var_dump(__CLASS__);
   }
 }
?>
index.phpファイルは以下の通りです。

<?php
var_dump(get_included_files()); 
$rf = new ReflectionClass('test');
var_dump(get_included_files());
$testObj = $rf->newInstance();
$testObj->showName();
function __autoload($classname){
  $classpath = './' . $classname . '.php';
  if (file_exists($classpath)) {
    require_once($classpath);
  }else {
    echo 'class file'.$classpath.'not found!';
  }
}
?>
//array
// 0 => string 'D:\code\www\test\index.php'(length=26)
//array
// 0 => string 'D:\code\www\test\index.php'(length=26)
// 1 => string 'D:\code\www\text\test.php'(length=25)
//string 'test' (length=4)
ReflectionClassを実例化し、クラス名を入力すると、対応するクラスの反射が得られます。例でnewInstanceを呼び出すと反射系のインスタンスが得られ、これにより実例化されます。
get_を通じてincludドドfiles()メソッドは、現在のページで紹介されているファイルを見ることができます。反射クラスを実際に例証する前に、index.phpファイルだけあって、反射クラスを実際に例証した後に、自動的にtest.phpファイルを導入しました。そうすると、上のコードを見て、一つの__u u_があります。autload()名前のマジック方法は自動的にファイルをロードすると定義されていますが、ReflectionClassは現在のページでクラスが見つからない場合には、__uを呼び出します。atoload()はクラスをロードします。これは自動的にロードする過程です。
知りたいですautload()方法はオープンしていますか?PHPの標準ライブラリSPLの方法で確認できます。

var_dump(spl_autoload_functions());
spl_autoload_register('newAutoload');
var_dump(spl_autoload_functions());
$testObj1 = getInstance('test');
$testObj2 = getInstance('test');
$testObj3 = getInstance('test');
function getInstance($class, $returnInstance = false){
  $rf = new ReflectionClass($class);
  if ($returnInstance)
     return $rf->newInstance();
}
function newAutoload($classname){
  $classpath = './' . $classname . '.php';
  if (file_exists($classpath)) {
    var_dump('require success');
    require_once($classpath);
  } else {
    echo 'class file ' . $classpath . ' not found!';
  }
}
//array
// 0 => string '__autoload' (length=10)
//array
// 0 => string 'newAutoload' (length=11)
//string 'require success' (length=15)
sqlautload_functions()メソッドは現在の自動ローディングを確認する方法です。atoload魔術の方法ですので、関数名に戻りました。自動ローディング方法が定義されていないとfalseに戻ります。spl_autload_register()方法は、方法名によって自動ローディング方法に登録され、ここではnewAutoload方法によって、_u_uを置き換える方法である。autloadの方法。
newAutoload方法では、実行に成功するごとに、「require success」という文を印刷します。ここでは一回だけ印刷しました。3回のReflection Classを例示しましたが、testクラスは一度ロードしたので、自動ローディングの方法は実行されません。get Instance()というロードの方法によって、以前のinclude()などよりもずっと便利になりました。これをロードしてget Instance()メソッドを書いたファイルを読み込めばいいです。
書き換えの自動ローディング方法は必要に応じて、クラスの名前を判断することで、異なるファイルパスを定義することができます。get Instanceは、静的変数でインスタンスを保存することができ、これも設計モードの単一の例モードに使用される。
本論文で述べたように、皆さんのphpプログラムの設計に役に立ちます。