PHPのオブジェクトコピー渡しと参照渡し
# 前のタイトルは「LinkedListを16行で書く(PHP4,PHP5互換版)」
配列の途中の要素を抜き取りたい用件があって、作ってみた。
class LinkedList { var $content = null; var $n = null; function setNext(&$obj) { $this->n =& $obj; } function &getNext() { return $this->n; } function setContent($content) { $this->content = $content; } function getContent() { return $this->content; } }
PHP4とPHP5の一番の違いは、「オブジェクトをコピー渡しするか参照渡しするか」という超重大なミスっぽいところ。
以下のテストコードを走らせると、実行結果が異なる。
$a = new LinkedList(); $b = new LinkedList(); $b->setContent('bbbbb'); $a->setNext($b); $c = $a->getNext(); // ←ここを =& にするとPHP4でもそれらしくなる print $c->getContent()."\n"; $b->setContent('ggggg'); print $c->getContent()."\n";
PHP5のことだけを考えると、getNext() の前の & は要らないし、setNext() の & も要らない。
面倒くさいなぁ、PHP4。