【问题标题】:Fatal error: Call to undefined method User::getSkipper()致命错误:调用未定义的方法 User::getSkipper()
【发布时间】:2014-07-27 08:47:03
【问题描述】:

我正在尝试用 PHP 自学 OOP。我有一个来自子类的错误,有人知道我为什么会收到这个错误吗?

致命错误:在第 28 行的 C:\wamp\www\starter\display.php 中调用未定义的方法 User::getSkipper()

用户类是这样的:

<?php
class User
{
    protected $_first_name;
    protected $_last_name;
    protected $_email;

    public function __construct($first_name, $last_name, $email) 
    {
        $this->_first_name = $first_name;
        $this->_last_name = $last_name;
        $this->_email = $email;
    }

    public function getFirstName()
    {
        return $this->_first_name;
    }

    public function getLastName()
    {
        return $this->_last_name;
    }

    public function getEmail()
    {
        return $this->_email;
    }       
}

?>

Skipper 类是这样的:

<?php
class Skipper extends User
{
    protected $_skipper;

    public function __construct($first_name, $last_name, $email, $skipper) 
    {
        $this->_skipper = $skipper;
    }

    public function getSkipper()
    {
        return $this->_skipper;
    }
}
?>      

执行以下代码时抛出错误:

$user1 = new User('Steven', 'Smith', 'steve@sljgksdj.com', 'Yes');
echo '<p>First Name: ' . $user1->getFirstName() .'</p>';
echo '<p>Last Name: ' . $user1->getLastName() .'</p>';
echo '<p>Email: ' . $user1->getEmail() .'</p>';
echo '<p>Skipper: ' . $user1->getSkipper() .'</p>';

【问题讨论】:

  • 将 skıpper 变量添加到 User 的构造函数中
  • 您正在使用用户类的对象调用skipper方法,同时将用户扩展到skipper.instantiate skipper.或将对象传递给用户的构造函数

标签: php class methods undefined


【解决方案1】:

您创建了一个 user 类的对象,而用户没有任何方法 getSkipper。 您应该创建一个 Skipper 类的对象。

$user1 = new Skipper('Steven', 'Smith', 'steve@sljgksdj.com', 'Yes');

【讨论】:

  • @ChristopherPecoraro 是的,您需要他们来设置 _skippervariable。您必须调用parent::__construct($first_name, $last_name, $email) 来初始化其他树变量。
  • 如果对象已经是 Skipper 类型,为什么还需要设置 _skipper?他们不能只使用 instanceof() 吗?
【解决方案2】:

如果 skipper 扩展了 User,则需要实例化 Skipper。另外,我对您通过将“是”传递给 Skipper 构造函数来实现的目标感到困惑。

<?php
class User
{
    protected $_first_name;
    protected $_last_name;
    protected $_email;

    public function __construct($first_name, $last_name, $email) 
    {
    $this->_first_name = $first_name;
    $this->_last_name = $last_name;
    $this->_email = $email;
   }

   public function getFirstName()
   {
    return $this->_first_name;
    }

    public function getLastName()
   {
    return $this->_last_name;
    }

    public function getEmail()
   {
    return $this->_email;
    }       
};

<?php
class Skipper extends User
{
protected $_skipper;

    public function __construct($first_name, $last_name, $email, $skipper) 
   {
    parent::__construct($first_name, $last_name, $email) 
    $this->_skipper = $skipper;
    }

    public function getSkipper()
    {
    return $this->_skipper;
    }
}

$skipper1 = new Skipper('Steven', 'Smith', 'steve@sljgksdj.com', 'Yes');
echo '<p>First Name: ' . $skipper1->getFirstName() .'</p>';
echo '<p>Last Name: ' . $skipper1->getLastName() .'</p>';
echo '<p>Email: ' . $skipper1->getEmail() .'</p>';

【讨论】:

  • 好的,感谢调用船长类工作。我确实必须将 require 一次添加到包含 skipper 的文件中。
  • 我想定义他们是否是船长而不仅仅是用户
  • 然后你可以使用“$var instanceof Skipper”
猜你喜欢
  • 1970-01-01
  • 2015-01-28
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 2012-01-06
相关资源
最近更新 更多