note 31555 deleted from language.oop.newref by danbrown
| From: | danbrown@php.net | Date: | Sat, 07 Nov 2009 19:11:17 +0000 |
| Subject: | note 31555 deleted from language.oop.newref by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-162589@lists.php.net to get a copy of this message | ||
Note Submitter: jjh at gmx dot at
----
This is another sample script to demonstrate the use of references on objects.
To test the script first replace all <b r> (note the space!) tags by normal
HTML-linke-brakes! Normal line brakes (what a shame!) cannot be shown inside a
php.net-note!!!
<?
// Class C contains instances of class A and class B.
//
// A should "know" B and B should "know" A.
// In other words: Object A should have a Reference on
// object B and vice versa.
class A {
var $a;
var $a_b; // this links to object B
function A() {
$this->a="set by constructor of A";
}
function getToKnowB(&$b) {
$this->a_b =& $b;
}
}
class B {
var $b;
var $b_a; // this links to object A
function B() {
$this->b="set by constructor of B";
}
function getToKnowA(&$a) {
$this->b_a =& $a;
}
}
class C {
var $myA;
var $myB;
function C() {
// Create Objects A and B
$this->myA = new A;
$this->myB = new B();
// "Introduce" A and B to each other
$this->myA->getToKnowB($this->myB);
$this->myB->getToKnowA($this->myA);
// Prove that A and B are using References (not copies!)
echo "Prove that myA->a equals myB->b_a->a<br>";
$this->myA->a = "one";
echo "this->myA->a is set to ".$this->myA->a."<br>";
$this->myB->b_a->a = "two";
echo "this->myB->b_a->a is set to
".$this->myB->b_a->a."<br>";
echo "this->myA->a: ".$this->myA->a."<br>";
echo "this->myB->b_a->a: ".$this->myB->b_a->a."<br>";
echo "<br>";
echo "Prove that myB->b equals myA->a_b->b<br>";
$this->myB->b = "one";
echo "this->myB->b is set to ".$this->myB->b."<br>";
$this->myA->a_b->b = "two";
echo "this->myA->a_b->b is set to
".$this->myA->a_b->b."<br>";
echo "this->myB->b: ".$this->myB->b."<br>";
echo "this->myA->a_b->b: ".$this->myA->a_b->b."<br>";
}
}
$myC = new C;
/*
evaluates to:
Prove that myA->a equals myB->b_a->a
this->myA->a is set to one
this->myB->b_a->a is set to two
this->myA->a: two
this->myB->b_a->a: two
Prove that myB->b equals myA->a_b->b
this->myB->b is set to one
this->myA->a_b->b is set to two
this->myB->b: two
this->myA->a_b->b: two
*/
?>