drupal 7でdrupal_static関数ソース分析
2126 ワード
私たちはdrupal 7を勉強しています.よく関数を見てdrupalを呼び出します.static()関数は静的キャッシュを行い,関数の効率を高める.drupal_static()関数にはPHPのstatic静的変数の知識が用いられており,これは同じコードファイルで同じ関数を繰り返し呼び出し,関数の結果をキャッシュ処理できる場合に非常に有用である.drupal 7には次の2つの関数があります. drupal_static($name,$default_value = NULL,$reset = FALSE); drupal_static_reset($name = NULL);
drupal 7のAPIコードは以下の通りである.
https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/drupal_static/7.x
上記の2つの関数について、テストコードは次のとおりです.静的キャッシュが可能なケース
2.静的変数の初期値を回復できるテスト
以上のコードは参考までに、drupal 7公式ドキュメントを参照してください.
drupal 7のAPIコードは以下の通りである.
https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/drupal_static/7.x
function &drupal_static( $name,$default_value = NULL,$reset = FALSE ){
static $data = array(),$default = array();
//First check if dealing with a previously define static varibale
if( isset( $data[$name] ) || array_key_exists($name,$data) ){
// $name $data[$name] $default[$name]
if( $reset ){
$data[$name] = $default[$name];
}
return $data[$name];
}
//$data[$name] $default[$name]
if( isset( $name ) ){
if( $reset ){
//
return $data;
}
$default[$name] = $data[$name] = $default_value;
return $data[$name];
}
// $name == NULL
foreach( $default as $name=>$value ){
$data[$name] = $value;
}
//As the function returns a reference, the return should always be a variable
return $data;
}
//drupal_static_reset()
function drupal_static_reset( $name = NULL ){
drupal_static($name,NULL,TRUE);
}
上記の2つの関数について、テストコードは次のとおりです.
function test1(){
$result = false;
$result = &drupal_static(__FUNCTION__);
if( !$result ){
error_log( 'test1test1test1test1test1' );
$result = 'get test1';
}
return $result;
}
$a = test1();
echo $a;//get test1 error_log
$b = test1();
echo $b;//get test1 error_log
2.静的変数の初期値を回復できるテスト
function test1(){
static $result = 1;
$result = &drupal_static(__FUNCTION__,1);
echo $result;
$result++;
}
$a = test1();
echo $a;//1
$b = test1();
echo $b;//2
drupal_static_reset('test1');//
$c = test1();
echo $c;//1
以上のコードは参考までに、drupal 7公式ドキュメントを参照してください.