为了账号安全,请及时绑定邮箱和手机立即绑定

为什么是return $this->name; 而不是return $this->$name;

为什么是return $this->name; 而不是return $this->$name;

正在回答

2 回答

PHP面向对象中$this的理解

转载▼

   分类: PHP    

在定义一个类时,因为没有对类实例化(对象),因而也无法得知对象的具体名称是什么。这时,如果想调用类中的成员方法或成员变量,就只能通过伪变量$this调用,$this顾名思义就是指类本身,需要注意的一点是$this 只能在类内部使用。否则将出错。

有一点值得注意的是,在类内部调用变量时,有遇到过两种写法:$this->name以及$this->$name;这两者有什么区别?

以下属个人理解,如有错误,请指教。

参考下面的例子:

<?php

class Test{

public $name = "abc";

public $abc = "test";

public function eTest(){

$name1 = "name";

echo $this->name.'<br>';   // 输出 abc

echo $this->$name1.'<br>';  // 输出 abc,因为 $name1 的值是name,相当与这里替换成 echo $this->name;

$name2 = $this->$name1;  // $name2 的值是 abc

echo $this->$name2.'<br>';  // 输出 test,同上,相当与是 echo $this->abc;

}

}

$a = new Test();

$a ->eTest();

?>

下面我们分步骤来理解:

1、可以先将$this->name和$this->$name看成"$this->变量名",变量名可以是name也可以是$name,这看起来有些冲突,我们将$name换个变量,如$test,即name和$test作为变量名。

2、理解一个变量中存在有两个因素,即变量名和变量值。这样就可以简单的理解上面的变量名了。name本身就是一个变量的变量名,$test则可以理解为以一个变量值为变量名的变量。


3 回复 有任何疑惑可以回复我~
#1

C小明

这样的解释只会更麻烦
2016-07-26 回复 有任何疑惑可以回复我~

首先 你要知道 这是在使用类。

其次,要明白在类中 $this->的含义,$this->name 是该类的一个属性,$name 是一个变量,$this->$name.不正确,没有这个命名规范。

最后,你不妨将这些都打印一遍加深理解

1 回复 有任何疑惑可以回复我~
#1

Dull 提问者

它声明的变量名不是$name吗?为什么取这个值的时候就去掉$了,。。这些都输出过,$this->name; 报错了,
2015-08-27 回复 有任何疑惑可以回复我~
#2

asher111 回复 Dull 提问者

name 是这个实例的一个属性
2015-12-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么是return $this->name; 而不是return $this->$name;

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信