class saySomething {
var $helloWorld = 'hello world';
function sayHelloWorld($helloWorld)
{
echo $helloWorld;
}
}
$saySomething = new saySomething();
$saySomething->sayHelloWorld();
上面给出了这个错误:
Warning: Missing argument 1 for saySomething::sayHelloWorld(), called in C:\xampp\htdocs\test.php on line 15 and defined in C:\xampp\htdocs\test.php on line 7
答案 0 :(得分:5)
因为你缺少saySomething :: sayHelloWorld()的参数1。定义函数时,将其定义为具有1个必需参数。
像这样定义你的功能:
class saySomething {
var $helloWorld = 'hello world';
function sayHelloWorld()
{
echo $this->helloWorld;
}
}
答案 1 :(得分:1)
您可能需要的正确代码应为:
class saySomething {
var $helloWorld = 'hello world';
function sayHelloWorld()
{
echo $this->helloWorld;
}
}
$saySomething = new saySomething();
$saySomething->sayHelloWorld();
在您编写的function sayHelloWorld($helloWorld)
行上,您的意思是$helloWorld
是传递给方法/函数的参数。要访问类变量,请改用$this->variableName
。
答案 2 :(得分:1)
以上所有答案在功能上都是正确的。
你问“为什么” - 原因是编程术语“范围”。范围定义了哪些变量可见,以及它们何时可见。您的示例代码定义了一个类级变量$ 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'
答案 3 :(得分:0)
class saySomething {
var $helloWorld = 'hello world';
function sayHelloWorld()
{
echo $this->helloWorld;
}
}
$saySomething = new saySomething();
$saySomething->sayHelloWorld();
答案 4 :(得分:0)
您可以将其修改为
class saySomething {
var $helloWorld = 'hello world';
function sayHelloWorld($helloWorld="default value if no argument")
{
echo $helloWorld;
}
}
$saySomething = new saySomething();
$saySomething->sayHelloWorld();
或者你的sayhelloworld不需要参数,因为已经定义了helloWorld。
班级说些什么{
var $helloWorld = 'hello world';
function sayHelloWorld()
{
echo $helloWorld;
}
}
$ saySomething = new saySomething(); $ saySomething-> sayHelloWorld();
答案 5 :(得分:0)
使用$ this指针
class saySomething {
var $helloWorld = 'hello world';
function sayHelloWorld()
{
echo $this->helloWorld;
}
}
$saySomething = new saySomething();
$saySomething->sayHelloWorld();