回应PHP类属性

时间:2018-01-04 23:07:21

标签: php

有人可以向我解释为什么属性$ message在方法'getMessage'之前为空?

我期待它返回'这是一条消息',但它返回null,只有在方法中重置它后才会返回一个字符串。

干杯

<?php

class Data {
    public $message = 'this is a message';

    public function getMessage() {
        return $this->$message = 'new value';
    }
}

$object = new Data;

var_dump($object->$getMessage); // Equals Null

echo $object->getMessage(); // Equals 'New value'

3 个答案:

答案 0 :(得分:3)

没有定义变量$getMessage,但您尝试使用它,就好像它是属性名称一样;所以当然它不会返回任何东西

如果您为$ getMessage分配了值,例如

$getMessage = 'message';

然后使用

$object->$getMessage

将此视为$object->message(如变量变量)以指向message属性

然后在您的getMessage()方法中,您有

return $this->$message = 'new value';

将使用变量$message的值(未定义)并再次使用它作为变量变量来设置由该(不存在的)值命名的属性。

要引用课程中的message属性,它是$this->message,而不是$this->$message

答案 1 :(得分:1)

class Data {
    public $message = 'this is a message';

    public function getMessage() {
        return $this->message = 'new value'; // Access internal variable $message
    }
}

$object = new Data;

var_dump($object->message); // Equals 'this is a message'
echo $object->getMessage(); // Equals 'new value'

答案 2 :(得分:0)

getMessage不是一个属性,它是一个方法,类似于一个函数,你不能输出一个函数。

您可以阅读有关属性here的更多信息。

这里是一个使用属性和方法的简单示例:

<?php 

 class example {

  // this is a property 
  public $a = 10;
  // this is a private property
  // private properties cannot be accessed outside the object
  private $b = 15;    

  // this is a method 
  public function sum(Int $a, Int $b) : Int
  {
      return $a + $b;
  }

  // this is a method to get the private propery 
  public function getB() : Int 
  {
     return $this->b;
  }

  }

  $obj = new example();
  // note you don't put '$' before the property name
  $a   = $obj->a;
  //$b   = $obj->b; // this will cause an error !    
  $b   = $obj->getB(); // works ! 
  $sum = $obj->sum($a,$b); // works !  
  echo $sum;