以上所有答案都是功能正确。
您问“为什么” - 原因是由于编程术语'范围'。范围定义了哪些变量是可见的,以及何时可见。您的示例代码定义了一个类级变量$ helloWorld,并且还定义了一个类参数$ helloWorld。
函数执行时'在作用域'中的唯一变量是作为参数传递的唯一变量。因此,当代码稍后调用该方法而未向参数分配值时,会尝试输出其值(因为它没有)。此时该方法不能看到类级变量,因为它不在范围内。
的溶液,如上述,是要么值传递给函数的参数,使得其被定义(并且因此不产生误差)
$saySomething = new saySomething();
$saySomething->sayHelloWorld('Hello world... again');
这将一个值传递给类方法,你会在屏幕上看到'Hello world ... again'。
这可能是,也可能不是,你打算做什么。如果您希望了解如何将类级别变量引入范围,那么最常见的方法是使用预定义的PHP变量'$ this',该变量允许该方法引用(即“查看”)其他变量和方法班上。变量'$ this'自动地魔术般地始终指向当前类,无论它在哪里使用。
class saySomething {
var $helloWorld = 'hello world';
function sayHelloWorld($helloWorld)
{
//set myOutput to parameter value (if set), otherwise value of class var
$myOutput = (isset($helloWorld)) ? $helloWorld : $this->helloWorld;
echo $myOutput;
}
}
$saySomething = new saySomething();
$saySomething->sayHelloWorld(); // Outputs 'hello world' from class definition
$saySomething->sayHelloWorld('Hello world... again'); // Outputs 'Hello world... again'
为sayHelloWorld() – 2011-02-13 07:05:01