【问题标题】:Undefined variable in creating new object error with constructor使用构造函数创建新对象错误中的未定义变量
【发布时间】:2016-05-08 06:11:29
【问题描述】:

我是一名二年级 IT 学生,刚开始使用 PHP 中的 OOP,我真的很难掌握它,我多年来一直以程序方式编码,所以请理解切换到 OOP非常具有挑战性,而且我还没有看到它的好处,反正我只需要得到它。

问题

根据上面的问题,我用上面的代码来了,我把它调整到无穷大,我规定的书也不是很有帮助

代码

class Registration{
        private $user_type;
        private $user_name;

        function __construct($user_type, $user_name){
            $this->user_type=$user_type;
            $this->user_name=$user_name;
        }//constructor

        function setUser($user_type, $user_name){
            if($user_type == "admin"){
                $user_name = "Peter";
                $msg = "Hi administrator ".$user_name;  
            }
            else if($user_type="member"){
                $user_name = "Ntubele123!";
                $msg = "Hi member ".$user_name; 
            }
        }//function

        function getUser(){
            return $this->user_type;
        }//function getter

}//class

    $userInfo = new Registration($user_type, $user_name);
        $user = $userInfo->setUser("admin", "Peter");
        $user = $userInfo->getUser();

我的问题

  • 我怀疑上面的代码有很多问题,如果有人可以让我知道我哪里出了问题以及我应该考虑改变什么,请记住初学者友好,它将不胜感激。

错误

未定义的变量 user_type & user_name

【问题讨论】:

  • 在以$userInfo = new ... 开头的行之前,您需要创建要传递给new Registration($user_type, $user_name$user_type$user_name 变量.. $user_type = $user_name = ''; 应该这样做
  • 您的 setter 方法没有设置任何内容。它忽略了传入的用户名,并始终显示对 Peter 或 Ntubele123 的问候。
  • @Barmar 它什么都没有显示,当将对象初始化为new Registration("admin", "Peter") aaaarrrrrggggghhhh 时,只会在屏幕上打印admin
  • 我说的是setUser,它应该将用户设置为参数中给出的名称,但只是显示一条消息。

标签: php oop


【解决方案1】:
$userInfo = new Registration($user_type, $user_name);

在这一行$user_type$user_name 未定义,因为没有使用此名称声明的变量

所以首先声明变量而不是创建Registration类的对象

【讨论】:

  • 感谢您的帮助和输入....当我通过将对象初始化为new Registration("admin", "Peter") 来做到这一点时,我只会在屏幕上打印输出admin ....?很明显我的一些方法是错误的? ——
  • 你必须在$userInfo = new Registration($user_type, $user_name);之前定义变量
  • 好的,但是我在哪里可以在我的一种方法中定义该变量?
  • 告诉我你到底需要什么。什么时候设置用户?
  • 我希望 SetUser 如下当 user_type = adminuser_name = peter 我希望显示消息 Hi Admin Peter 否则我希望显示消息 Hi member Ntubele123
【解决方案2】:

在 OOP 代码中使用变量没有什么不同。您仍然必须先设置它们,然后才能将它们用作参数。所以应该是:

$name = "Fred";
$type = "admin";
$user = new Registration($type, $name);

您的 setter 方法应该设置属性的值。所以应该是:

function setUser($username) {
    $this->user_name = $username;
}

setter 方法通常一次只设置一个属性。

整个班级应该如下所示:

class Registration{
    private $user_type;
    private $user_name;

    function __construct($user_type, $user_name){
        $this->user_type=$user_type;
        $this->user_name=$user_name;
    }//constructor

    function setUser($user_name){
        $this->user_name = $user_name;
    }

    function setType($type) {
        $this->user_type = $type;
    }

    function getUser(){
        return $this->user_name;
    }//function getter

    function getType() {
        return $this->user_type;
    }

    function greet() {
        echo "Hello " . $this->user_type . " " . $this->user_name;
    }

}//class

$user = new Registration("admin", "Joe");
$user->greet();

【讨论】:

  • 非常感谢您的努力和洞察力
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多