関数は次のとおりです:
コードをコピー コードは次のとおりです:
function update_timelist(&$arr,$timestamp,$threshold){
$timequeue = &$arr['timequeue'];
while(!empty( $timequeue[0])&&($timestamp-$timequeue[0])>$threshold){
array_shift($timequeue)
}
array_push($timequeue, $timestamp); ($arr['count ']
}
}
コードをコピー コードは次のとおりです:
function update_timelist(&$arr,$timestamp,$threshold){
while(!empty($arr['timequeue'][0])&&( $timestamp- $arr['timequeue'][0])>$threshold){
array_shift($arr['timequeue'])
}
array_push($arr['timequeue'],
); if($ arr['count']
}
コードをコピーします コードは次のとおりです。 net'; $b = $a;
$c = $b;
は、PHP の zend エンジンが書き込み時にコピーを使用するため、$ の場合にのみコピーを作成します。 b と $c を「jb51 .net」に変更すると、「jb51.net」のコンテンツ空間タイプが次のコードに変更されます:
$a = 'jb51.net' ; $c = &$a;
これはどうなりますか? 「jb51.net」を保存するためのメモリ領域はまだ残っていますか?いいえ、$c は $a への参照であり、$a が指す記憶域スペースは参照型としてマークする必要があるため、$b 用に 'jb51.net' の別のコピーを作成する必要があります。非参照型を指します。
$c が $a への参照になっていることがわかります。$b が $a の空間を引き続き実行する場合、$c を変更すると $b も変更されることになります。したがって、参照が出現したら、それも変更する必要があります。書き込み操作がなくてもコピーされます。また、PHP には変数が指すメモリ空間が非参照と参照の 2 種類しかなく、これら 2 種類を混在させたり転送したりすることはできません。どこかのメモリ空間の状態を変更する必要がある場合は、コピーを作成する必要があります。
$timequeue = &$arr['timequeue'] を追加するとカウントが遅くなる理由を以下に説明します。c 関数の呼び出しプロセスを覚えていますか?実際、渡すパラメータはコピーして渡す必要があります。これは PHP にも当てはまります。ただし、書き込み時のコピー メカニズムにより、非参照型を渡すときに count は実際にはコピーされませんが、$timequeue がコピーされます。 = &$arr['timequeue '] は $timequeue のメモリ空間を参照型として指定し、count は非参照型を必要とするため、count は $arr['timequeue'] のコピーをコピーする必要があります。 $arr['timequeue'] を直接渡しても問題がないのはなぜですか?もちろん、count は書き込みメカニズムのコピーを使用します。array_shift と array_push はどうですか?これらは参照で渡されます。心配しないでください。これは $arr['timequeue'] の型を変更するのではなく、実際には $arr['timequeue'] のエイリアスを渡します。
私は PHP の学習を始めたばかりです。上記の分析は正しくない、または包括的ではない可能性があります。電子メールを送信したり、私のホームページにメッセージを残して、私とコミュニケーションをとることができます。
以上、作業効率を向上させる方法と、PHP 参照効率の奇妙な問題の分析を紹介しました。作業効率を向上させる方法を含め、PHP チュートリアルに興味のある友人の参考になれば幸いです。