类的方法中未定义的变量-PHP

类的方法中未定义的变量-PHP,php,Php,我想知道为什么我下面的代码不起作用。它给了我这个错误: (!)注意:未定义变量:第8行的C:\wamp\www\oops\visibility levels\public.php中的uname 但是当我将上面的代码修改为- <?php class User { public $uname; public function setUsername($uname) { $this->uname = $uname; } pub

我想知道为什么我下面的代码不起作用。它给了我这个错误:

(!)注意:未定义变量:第8行的C:\wamp\www\oops\visibility levels\public.php中的uname


但是当我将上面的代码修改为-

<?php
class User
{
    public $uname;

    public function setUsername($uname)
    {
        $this->uname = $uname;
    }

    public function getUsername()
    {
        return $this->uname;
    }
}

$user = new User();
$user->setUsername("admin");
echo $user->getUsername();
?>

然后它工作正常,并给我以下输出-

管理员


但我不明白为什么我在第一段代码中得到了未定义的变量uname。有什么想法吗?

变量
$uname
在setUsername函数作用域中未定义。使用
$this->uname
访问类变量或将$uname作为参数(函数中将包含本地
$uname
变量)。

setUsername
函数中,从未定义变量
$uname
。您正在尝试将class属性
$this->uname
设置为未初始化的变量

在工作代码中,
$uname
变量在参数传递给函数时初始化。

公共函数setUsername()//uname=$uname;
public function setUsername() // <-- missing $uname in args
{
    // $uname is like Javascripts Undefined here,
    $this->uname = $uname;
}
}

该错误正是源于
=$uname-除非在参数列表中定义为参数,否则它不存在。

如果需要第一个功能,请尝试以下操作:

<?php
class User
{
    public $uname;

    public function __construct(){
        $this->uname = "admin";
    }

    public function setUsername($uname)
    {
        $this->uname = $uname;
    }

    public function getUsername()
    {
        return $this->uname;
    }
}

$user = new User();
$user->setUsername();
echo $user->getUsername();
?>

因为函数setUserName不知道变量$uname的值,所以需要在范围内定义它,或者通过函数参数传递

例如:

public function setUsername()
{
    $uname = 'foo';

    $this->uname = $uname;
}

将产生输出:foo

谢谢。我现在明白了。
public function setUsername()
{
    $uname = 'foo';

    $this->uname = $uname;
}