Heim > php教程 > php手册 > Hauptteil

PHP里的值传递与引用传递

WBOY
Freigeben: 2016-06-13 10:51:31
Original
876 Leute haben es durchsucht

PHP中存在着值传递和引用传递。后者需要使用地址符&来标识变量。使用赋值操作举例说明如下:

1、值传递

1)基本数据类型:

01
02
    $a = 1;
03
    $b = $a;
04
    $b += 2;
05
    
06
    echo "\$a = ".$a."
";
07
    echo "\$b = ".$b."
";
08
    
09
    /* 输出:
10
        $a = 1
11
        $b = 3
12
    */
13
?>
注:这里使用了$b = $a语句,是将$a的值赋给了$b。 即此时赋的值是1。 
 
执行语句$b += 2后:
 
所以,$b变成了3,但是$a的值并没有改变。

2)引用数据类型

Person类如下:

01
class Person {
02
    private $_name;
03
    
04
    public function setName($name) {
05
        $this->_name = $name;
06
    }
07
    
08
    public function getName() {
09
        return $this->_name;
10
    }
11
    
12
    public function toString() {
13
        return "name is ".$this->_name;
14
    }
15
}
初始化两个Person类对象,并设置属性:

1
$p1 = new Person();
2
$p1->setName("person1");
3
$p2 = new Person();
4
$p2->setName("person2");
执行以下操作:

1
$p3 = $p1;
测试:

1
echo "\$p1's ".$p1->toString().".
";
2
echo "\$p3's ".$p3->toString().".
";
3
 
4
/* 输出:
5
    $p1's name is person1.
6
    $p3's name is person1.
7
*/
注: 对于 $p3 = $p1语句,     即此时赋的值是0x000a。  即$p1和$p3都引用了同一个对象。
 

2、引用传递

1)基本数据类型

01
02
    $a = 1;
03
    $b = &$a;
04
    $b += 2;
05
    
06
    echo "\$a = ".$a."
";
07
    echo "\$b = ".$b."
";
08
    
09
    /* 输出:
10
        $a = 3
11
        $b = 3
12
    */
13
?>
注:这里使用$b = &$a语句,进行了引用传递:   即此时赋的值是0x0001。 

 
所以对$b += 2后,

 

所以$a和$b的值都是3。

2)引用数据类型

若执行的是以下操作来替代之前的$p3 = $p1

1
$p3 = &$p1;
再执行以下操作:

1
$p3 = $p2;
测试结果如下:

1
echo "\$p1's ".$p1->toString().".
";
2
echo "\$p3's ".$p3->toString().".
";
3
 
4
/* 输出:
5
    $p1's name is person2.
6
    $p3's name is person2.
7
*/
注:对已打印出$p3的结果信息是很明了的,因为执行了$p3 = $p2语句,但是为什么打印$p1的结果信息与之前相比不一样了呢?

是因为$p3 = &$p1语句执行后,  即此时赋的值是0x0001。


紧接着执行$p3 = $p2语句后


所以才会打印出如上的结果信息,这便是地址符&在起作用。

完整代码如下:

1)引用数据类型


01
02
    class Person {
03
        private $_name;
04
        
05
        public function setName($name) {
06
            $this->_name = $name;
07
        }
08
        
09
        public function getName() {
10
            return $this->_name;
11
        }
12
        
13
        public function toString() {
14
            return "name is ".$this->_name;
15
        }
16
    }
17
        
18
    $p1 = new Person();
19
    $p1->setName("person1");
20
    $p2 = new Person();
21
    $p2->setName("person2");
22
    
23
    $p3 = $p1;
24
    // $p3 = &$p1;
25
    // $p3 = $p2;
26
    echo "\$p1's ".$p1->toString().".
";
27
    echo "\$p3's ".$p3->toString().".
";
28
?>
2)基本数据类型


 
1
2
    $a = 1;
3
    $b = $a;
4
    // $b = &$a;
5
    $b += 2;
6
    
7
    echo "\$a = ".$a."
";
8
    echo "\$b = ".$b."
";
9
?>
结束语:对于值传递与引用传递在方法/函数参数的传递上情况下,与赋值操作情况是类似的。


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!