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

来源:2-2 PHP类和对象之创建一个对象

Dull

2015-08-27 13:21

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

写回答 关注

2回答

  • 四亖
    2015-09-15 09:40:09

    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则可以理解为以一个变量值为变量名的变量。


    C小明

    这样的解释只会更麻烦

    2016-07-26 11:05:57

    共 1 条回复 >

  • 刘伶
    2015-08-27 14:58:08

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

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

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

    asher1... 回复Dull

    name 是这个实例的一个属性

    2015-12-20 15:18:50

    共 2 条回复 >

PHP进阶篇

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

181727 学习 · 2575 问题

查看课程

相似问题