(); var_dump($obj->monkeys); ?>
One may check reference to any object by simple operator==( object). Example:
class A {}
$oA1 = new A();
$roA = & $oA1;
echo "roA and oA1 are " . ( $roA == $oA1 ? "same" : "not same") . "<br>";
$oA2 = new A();
$roA = & $roA2;
echo "roA and oA1 are " . ( $roA == $oA1 ? "same" : "not same") . "<br>";
Output:
roA and oA1 are same
roA and oA1 are not same
Current technique might be useful for caching in objects when inheritance is used and only base part of extended class should be copied (analog of C++: oB = oA):
class A {
/* Any function changing state of A should set $bChanged to true */
public function isChanged() { return $this->bChanged; }
private $bChanged;
//...
}
class B extends A {
// ...
public function set( &$roObj) {
if( $roObj instanceof A) {
if( $this->roAObj == $roObj &&
$roObj->isChanged()) {
/* Object was not changed do not need to copy A part of B */
} else {
/* Copy A part of B */
$this->roAObj = &$roObj;
}
}
}
private $roAObj;
}
*** WARNING about OBJECTS TRICKY REFERENCES ***
-----------------------------------------------
The use of references in the context of classes
and objects, though well defined in the documentation,
is somehow tricky, so one must be very careful when
using objects. Let's examine the following two
examples:
<?php
class y {
public $d;
}
$A = new y;
$A->d = 18;
echo "Object $A before operation:n";
var_dump($A);
$B = $A; $C =& $A; $B->d =
9/12 首页 上一页 7 8 9 10 11 12 下一页 尾页 |