変数,静的変数,変数の参照,グローバル変数,およびリソースの占有関係を議論する

2063 ワード

参照代入
phpの引用はCのポインタと同じだと誤解する人が多いが、実際にはそうではなく、大きな違いがある.
C言語におけるポインタは配列伝達の過程で明示的に説明しない以外は*を用いて定義する必要があるが,phpにおけるアドレスの指向機能はユーザ自身で実現するものではなくZendコアで実現され,phpにおける引用は「書き込み時コピー」の原理を採用している.書き込み操作が発生しない限り、同じアドレスを指す変数またはオブジェクトはコピーされません.
$a = array('a','c'...'n');
$b = $a;
// $a   $b            

プログラムがここまでしか実行されていない場合、$aと$bは同じですが、Cのように$aと$bは異なるメモリ空間を占有するのではなく、同じメモリを指しています.これがphpとcの違いです.$b=&$aと書く必要はありません.zendはすでに引用を実現しています.
$a = array('a','c'...'n');
$b = $a;
printArray($a);

function printArray( &$arr ) { //    
    print(count($arr));
}

//Zend  $b             ,  $a         。    

上記のコードがprintArray()に$a値を直接渡す場合、リファレンス転送は存在しないため、書き込み時コピーは発生しません.
上記の2行のコードの実行効率をテストすることができます.例えば、1000回のループを追加し、実行にかかる時間を見てみると、リファレンスを正しく使用しないとパフォーマンスが30%以上低下することがわかります.フォーラムでは、「コピー」を減らし、リソースを減らすために&を参照しています.
参照は、参照を返す、インスタンス化する、直接参照する.
//    
function &test($d){
    return $d;
}
// $xml = &new xml_object::create(' ',' ',array(" "=>' '));
// $xml = &xml_object::create(' ',' ',array(" "=>' '));
*          ,                            & 

 
未完待機http://blog.sina.com.cn/s/blog_694c144f0100ymsl.html