PHP:无法将变量从类a传递到b

时间:2018-11-17 17:48:35

标签: php oop

我已经研究并尝试了不同的方法,但是我无法将变量从主类传递给子类。进行var_dump总是显示NULL。这是因为我要作为数组发送吗?

Userdata.class.php

    <?php

/**
 *  Class used for getting userdata
 */
class Userdata
{
  public $userdata;

  function __construct()
  {

  }

  public function getUserData($username, $password)
  {
    $this->userdata = array
      (
        'arr_username' => $username,
        'arr_password' => $password
      );
    return $this->userdata;
  }
}

Authenticate.class.php

require_once('Userdata.class.php');
/**
 * This class is used for user authentication/validation/form
 */
class Authentication extends Userdata
{
  var $userdata;

  function logIn()
  {
    var_dump($this->userdata);
  }

}

session_handler.php

function formSubmitUser()
{
  // Class the class Authentication
  $userdata = new Userdata();
  $userdata->authentication = new Authentication;
  //First submit the form before processing the data
  if (isset($_POST['submit']))
  {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $userdata->getUserData($username, $password);
    $userdata->authentication->logIn();
  }
}

如果我将值手动添加到主类__construct,那么一切似乎都可以正常工作。但是,如果我尝试从功能getUserData中获取它,我将无法正常工作。

  function __construct()
  {
    $this->userdata = "Sending data like this works";
  }

我想念什么吗?

5 个答案:

答案 0 :(得分:-1)

在类身份验证中,您没有从Userdata类中调用父变量 这就是为什么您从var_dump中获取NULL的原因。身份验证中的$ userdata没有值。 尝试var_dump(parent :: $ userdata); 这应该使您可以访问它

答案 1 :(得分:-1)

您的代码应在下一个

function formSubmitUser()
{
  // Class the class Authentication
  $userdata = new Authentication;
  //First submit the form before processing the data
  if (isset($_POST['submit']))
  {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $userdata->getUserData($username, $password);
    $userdata->logIn();
  }
}

答案 2 :(得分:-1)

首先,将getter方法用作setter并不常见,我建议如果用户数据是数组,则应在构造函数中实例化它。

document.getElementsByClassName('K3JSBVB-C-b titleField')[0].value = 'NEW AWSOME TITLE'

答案 3 :(得分:-1)

您要在Authentication中重新声明userdata变量,该变量实质上是覆盖来自Userdata类的变量。从身份验证类中删除var $userdata

答案 4 :(得分:-1)

您应遵循继承规则。您无需创建两个类的实例。 用它代替您的session_handler.php

function formSubmitUser()
{
  $authenticator = new Authentication;
  //First submit the form before processing the data
  if (isset($_POST['submit']))
  {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $authenticator->getUserData($username, $password);
    $authenticator->logIn();
  }
}

如果您需要其他帮助,请告诉我