PHP: невозможно передать переменную из класса a в b - PullRequest
0 голосов
/ 17 ноября 2018

Я исследовал и попробовал разные методы, но я просто не могу передать переменную из основного класса в детский класс.Выполнение 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 голосов
/ 17 ноября 2018

вы должны следовать правилам наследования.Вам не нужно создавать экземпляры обоих классов.Используйте его вместо вашего 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();
  }
}

Дайте мне знать, если вам нужна какая-либо другая помощь

0 голосов
/ 17 ноября 2018

Вы переделываете переменную userdata в Authentication, которая по существу переопределяет переменную из класса Userdata. Удалить var $userdata из класса аутентификации

0 голосов
/ 17 ноября 2018

Для вашего кода должно работать следующее

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();
  }
}
0 голосов
/ 17 ноября 2018

Во-первых, использование метода-получателя в качестве установщика не распространено. Я предлагаю, если пользовательские данные являются массивом, вы должны создать его экземпляр в конструкторе.

  function __construct()
  {
      $this->userdata = array();

  }
  public function setUserData($username, $password) {
      $this->userdata['username'] = $username;
      $this->userdata['password'] = $password;
  }
  public function getUserData() {
      return $this->userdata;
  }
0 голосов
/ 17 ноября 2018

в классе Authentication вы не вызываете родительскую переменную из вашего класса Userdata Вот почему вы получаете NULL из вашего var_dump. в аутентификации $ userdata не имеет значения. попробуйте var_dump (parent :: $ userdata); это должно дать вам доступ к нему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...