引数は値渡しにかわったんじゃなかったの・・・?

PHP5を触っててこんな関数に出くわす。

 int mb_ereg(string pattern ,string string [,array regs])
   pattern:正規表現パターン
   string:検索対象の文字列
   regs:検索結果を格納する配列

で、使用サンプルが

<?php
$str='私のブログはここよん(http://d.hatena.ne.jp/)';
if(mb_ereg('(http://|https://)[a-zA-Z0-9./_\-]+' ,$str ,$data)){
print($data[0]);
}
?>

で結果なんてどうでもよくて、
これで、$data[0]の表示ができるってことは、参照渡し(call by reference)ってことですわよね?
$dataは関数呼び出し前に初期化されてないのに、その後結果が入ってるってことはそうだよね。
自分のごく少ないPHPの知識では、PHP5系からはjava同様にすべて値渡し(call by value)に
なったと思ってたので、ちょいとびっくり。
でも、このサイトとかベータリリース目前!? PHP5の新機能(2/2)− @IT
みると、やはり、値渡しになっていると(いう意味で)書いてある。
あ、記事の方は値渡しと参照渡しの用語を豪快に間違えてるようなので、(というか、この使い方の方が
正しいとかいわれそうで怖いけど)うちでは値渡しと参照渡しの違いは
次の解説と同じ認識です。http://java-house.jp/ml/archive/j-h-b/026214.html

上のサンプルの例だと、どう考えても参照渡しだよなー。
変数に型宣言が必要ない以上、$dataをarrayオブジェクトで
暗黙的に初期化するタイミングがないしなー。
組み込み関数のときだけ呼び出しが違うとかだったらやだなー。
誰かおしえてください。