为什么这个简单的hello world PHP代码不起作用?

时间:2011-02-13 07:01:01

标签: php

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

6 个答案:

答案 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();