PHP引用(&)各种使用方法实例详解(2)

<?php
class foo{
        protected $name;
        function __construct($str){
                $this->name = $str;
        }
        function __toString(){
                return  'my name is "'. $this->name .'" and I live in "' . __CLASS__ . '".' . "\n";
        }
        function setName($str){
                $this->name = $str;
        }
}
class MasterOne{
        protected $foo;
        function __construct($f){
                $this->foo = $f;
        }
        function __toString(){
                return 'Master: ' . __CLASS__ . ' | foo: ' . $this->foo . "\n";
        }
        function setFooName($str){
                $this->foo->setName( $str );
        }
}
class MasterTwo{
        protected $foo;
        function __construct($f){
                $this->foo = $f;
        }
        function __toString(){
                return 'Master: ' . __CLASS__ . ' | foo: ' . $this->foo . "\n";
        }
        function setFooName($str){
                $this->foo->setName( $str );
        }
}
$bar = new foo('bar');
print("\n");
print("Only Created \$bar and printing \$bar\n");
print( $bar );
print("\n");
print("Now \$baz is referenced to \$bar and printing \$bar and \$baz\n");

$baz =& $bar;
print( $bar );
print("\n");
print("Now Creating MasterOne and Two and passing \$bar to both constructors\n");

$m1 = new MasterOne( $bar );
$m2 = new MasterTwo( $bar );
print( $m1 );
print( $m2 );
print("\n");
print("Now changing value of \$bar and printing \$bar and \$baz\n");

$bar->setName('baz');
print( $bar );
print( $baz );
print("\n");
print("Now printing again MasterOne and Two\n");
print( $m1 );
print( $m2 );
print("\n");
print("Now changing MasterTwo's foo name and printing again MasterOne and Two\n");

$m2->setFooName( 'MasterTwo\'s Foo' );
print( $m1 );
print( $m2 );
print("Also printing \$bar and \$baz\n");
print( $bar );
print( $baz );
?>

输出:

复制代码 代码如下:

Only Created $bar and printing $bar
my name is "bar" and I live in "foo".
Now $baz is referenced to $bar and printing $bar and $baz
my name is "bar" and I live in "foo".
Now Creating MasterOne and Two and passing $bar to both constructors
Master: MasterOne | foo: my name is "bar" and I live in "foo".
Master: MasterTwo | foo: my name is "bar" and I live in "foo".
Now changing value of $bar and printing $bar and $baz
my name is "baz" and I live in "foo".
my name is "baz" and I live in "foo".
Now printing again MasterOne and Two
Master: MasterOne | foo: my name is "baz" and I live in "foo".
Master: MasterTwo | foo: my name is "baz" and I live in "foo".
Now changing MasterTwo's foo name and printing again MasterOne and Two
Master: MasterOne | foo: my name is "MasterTwo's Foo" and I live in "foo".
Master: MasterTwo | foo: my name is "MasterTwo's Foo" and I live in "foo".
Also printing $bar and $baz
my name is "MasterTwo's Foo" and I live in "foo".
my name is "MasterTwo's Foo" and I live in "foo".


上个例子解析:

复制代码 代码如下:

$bar = new foo('bar');
$m1 = new MasterOne( $bar );
$m2 = new MasterTwo( $bar );

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ced49dbab8e11088f93988a884450e81.html