PHP里面的这个符号是干嘛用的?

->上面这个符号有什么用?麻烦举个例谢谢~... ->

上面这个符号有什么用?
麻烦举个例谢谢~
展开
 我来答
阳光上的桥
2010-04-08 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21423 获赞数:65813
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
对象的域或者方法,和C语言一样的。

下面的例子是PHP手册第18章内容(建议随手一本手册):

构造函数中的引用
在构造函数中创建引用可能会导致混淆的结果。本节以教程形式帮助避免问题。

<?php
class Foo {
function Foo($name) {
// 在全局数组 $globalref 中建立一个引用
global $globalref;
$globalref[] = &$this;
// 将名字设定为传递的值
$this->setName($name);
// 并输出之
$this->echoName();
}

function echoName() {
echo "<br />",$this->name;
}

function setName($name) {
$this->name = $name;
}
}
?>

下面来检查一下用拷贝运算符 = 创建的 $bar1 和用引用运算符 =& 创建的 $bar2 有没有区别...

<?php
$bar1 = new Foo('set in constructor');
$bar1->echoName();
$globalref[0]->echoName();

/* 输出:
set in constructor
set in constructor
set in constructor */

$bar2 =& new Foo('set in constructor');
$bar2->echoName();
$globalref[1]->echoName();

/* 输出:
set in constructor
set in constructor
set in constructor */
?>

显然没有区别,但实际上有一个非常重要的区别:$bar1 和 $globalref[0] 并没有被引用,它们不是同一个变量。这是因为“new”默认并不返回引用,而返回一个拷贝。

注意: 在返回拷贝而不是引用中并没有性能上的损失(因为 PHP 4 及以上版本使用了引用计数)。相反更多情况下工作于拷贝而不是引用上更好,因为建立引用需要一些时间而建立拷贝实际上不花时间(除非它们都不是大的数组或对象,而其中之一跟着另一个变,那使用引用来同时修改它们会更聪明一些)。

要证明以上写的,看看下面的代码。
<?php
// 现在改个名字,你预期什么结果?
// 你可能预期 $bar1 和 $globalref[0] 二者的名字都改了...
$bar1->setName('set from outside');

// 但如同前面说的,并不是这样。
$bar1->echoName();
$globalref[0]->echoName();

/* 输出为:
set from outside
set in constructor */

// 现在看看 $bar2 和 $globalref[1] 有没有区别
$bar2->setName('set from outside');

// 幸运的是它们不但相同,根本就是同一个变量。
// 因此 $bar2->name 和 $globalref[1]->name 也是同一个变量。
$bar2->echoName();
$globalref[1]->echoName();

/* 输出为:
set from outside
set from outside */
?>

最后给出另一个例子,试着理解它。

<?php
class A {
function A($i) {
$this->value = $i;
// 试着想明白为什么这里不需要引用
$this->b = new B($this);
}

function createRef() {
$this->c = new B($this);
}

function echoValue() {
echo "<br />","class ",get_class($this),': ',$this->value;
}
}

class B {
function B(&$a) {
$this->a = &$a;
}

function echoValue() {
echo "<br />","class ",get_class($this),': ',$this->a->value;
}
}

// 试着理解为什么这里一个简单的拷贝会在下面用 *
// 标出来的行中产生预期之外的结果
$a =& new A(10);
$a->createRef();

$a->echoValue();
$a->b->echoValue();
$a->c->echoValue();

$a->value = 11;

$a->echoValue();
$a->b->echoValue(); // *
$a->c->echoValue();
?>
上例将输出:

class A: 10
class B: 10
class B: 10
class A: 11
class B: 11
class B: 11
iinnersky
2010-04-08 · TA获得超过173个赞
知道答主
回答量:128
采纳率:0%
帮助的人:134万
展开全部
这是C语言中的指向运算符 访问对象的属性和方法
PHP受Perl影响而 Perl受C影响
如定义一个类
<?php
class className{

function funName(){

echo "dggdgdgd";
}

}
$classOne = new className();
$classOne->funName();//会输出dggdgdgd

?>
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
miniapphekXMS4xEytCI
2010-04-08 · TA获得超过125个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:103万
展开全部
访问对象属性和方法
相当于C指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
桁澄
2010-04-08
知道答主
回答量:8
采纳率:0%
帮助的人:1.4万
展开全部
类里面对方法或者属性的应用于C++或Java 的 . 作用相似
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式