有人可以向我解释为什么属性$ 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'
答案 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;