关于php的引用(就是在变量或者函数、对象等前面加上符号)的作用,我们先看下面这个程序。 1 ?php 2 $a = 100; //声明变量a 3 $b = $a ; //声明变量b,引用自变量a 4 echo $a br / ; 5 echo $b br / ; 6 $a ; //变量a自增1 7 echo $a br / ; 8 echo $b br /
关于php的引用(就是在变量或者函数、对象等前面加上&符号)的作用,我们先看下面这个程序。
1
|
<?php
|
2
|
$a =
100; //声明变量a
|
3
|
$b =
& $a ; //声明变量b,引用自变量a
|
4
|
echo "$a
<br>" ;
|
5
|
echo "$b
<br>" ;
|
6
|
$a ++; //变量a自增1
|
7
|
echo "$a
<br>" ;
|
8
|
echo "$b
<br>" ; //查看变量b,也增加了1,说明使用的是同一存储单元
|
9
|
?>
|
程序运行结果:
1
|
100
|
2
|
100
|
3
|
101
|
4
|
101
|
很多人误解php中的引用跟C当中的指针一样,事实上并非如此,而且很大差别。C语言中的指针除了在数组传递过程中不用显式申明外,其他都需要使用*进行定义,而php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。
php默认为传值传递:
1
|
<?php
|
2
|
$a =
20;
|
3
|
$b = $a ;
|
4
|
$a = $a +
10;
|
5
|
echo $a . '
and ' . $b ;
|
6
|
?>
|
程序运行结果:
1
|
30 and 20
|
要是想变为地址传递需要加&,既:
1
|
<?php
|
2
|
$a =
20;
|
3
|
$b =
& $a ;
|
4
|
$a = $a +
10;
|
5
|
echo $a . '
and ' . $b ;
|
6
|
?>
|
程序运行结果:
1
|
30 and 30
|
也就是说,&把$a的地址传给了$b,这样的话这两个变量现在共享一个内存的存储区域,就是说它们的值是一样的。
同样的语法可以用在函数中,它返回引用,以及用在 new 运算符中:
1
|
<?php
|
2
|
$bar =& new fooclass();
|
3
|
$foo =&
find_var( $bar );
|
4
|
?>
|
引用做的第二件事是用引用传递变量。这是通过在函数内建立一个本地变量,并且该变量在呼叫范围内引用了同一个内容来实现的。说的通俗点就是一个函数的参数是一个本地变量的引用。下面再举例说明一下:
01
|
<?php
|
02
|
function foo(& $val1 , $val2 )
{
|
03
|
$val1 +=
1;
|
04
|
$val2 +=
1;
|
05
|
}
|
06
|
$a =5;
|
07
|
$b =10;
|
08
|
foo( $a , $b );
|
09
|
echo $a ;
|
10
|
echo $b ;
|
11
|
?>
|
运行这段代码是给函数传递两个参数,一个是引用$a的内容,一个是$b的值,在执行此函数后,发现$a的内容改变了,而$b的内容则没有变化。
PHP引用的第三个用法是引用返回,这个用法理解起来有点难度,引用返回用在当你想用函数找到引用应该被绑定在哪一个变量上面时。当返回引用时,使用此语法:说的简单点,就还是引用函数的返回。但和参数传递不同,必须在函数定义和函数引用这两个地方都用 & 符号。下面举个例子:
1
|
<?php
|
2
|
function &find_var
( $param )
|
3
|
{
|
4
|
/*
...code... */
|
5
|
return $found_var ;
|
6
|
}
|
7
|
$foo =&
find_var ( $bar );
|
8
|
$foo ->x
= 2;
|
9
|
?>
|
这个例子给$foo 赋值是函数find_var的返回引用,所以在给$foo->x赋值时就是给find_var的返回引用赋值,而不是简单的赋值。
PHP引用的最后一个用法是引用定位,主要有两个应用:一个是global 引用,当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。也就是和$var =& $GLOBALS["var"];是一样的。另外一个是$this的用法,在一个对象的方法中,$this 永远是调用它的对象的引用。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

Zend Studio 13.0.1
Powerful PHP integrated development environment

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.