Проверка экземпляра класса в другом классе - PullRequest
2 голосов
/ 01 июля 2011

Я создал класс пользователя, в котором есть информация о пользователе. Кроме того, я расширил этот класс другим классом с именем LoggedInUser.

Смысл LoggedInUser в том, чтобы иметь возможность легко определить, прошел ли пользователь аутентификацию и вошел в систему, просто проверив наличие объекта LoggedInUser следующим образом:

class User {
 //properties
}

class LoggedInUser extends User {
 //some additional token stuff
}

$isLoggedIn = new LoggedInUser();

class Router {
 public function gotoRoute() {
  if($isLoggedIn) {
   // perform the action
  }
 }
}

Насколько я могу судить, $ isLoggedIn недоступен для класса, поэтому я должен передать его в конструктор? или есть лучший способ сделать все это?

Ответы [ 3 ]

2 голосов
/ 01 июля 2011

На мой взгляд, у вас есть два варианта. Вы можете передать LoggedInUser в Router::__construct(). Или вы можете создать LoggedInUser в Router::__construct()

1-й вариант:

$LoggedInUser = new LoggedInUser();
$Router = new Router($LoggedInUser);

2-й вариант

$Router = new Router();

// in router class file
__construct() {
    $this->YourProperty = new LoggedInUser();
}

Мне нравится 1-й вариант. Это называется Внедрение зависимостей

0 голосов
/ 01 июля 2011

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

В таком простом сценарии я бы так и сделал:

class Router {
    public function gotoRoute() {
        $isLoggedIn = $isLoggedIn = new LoggedInUser();
        if( $isLoggedIn instanceof User ) {
        // perform the action
        }
    }
}
0 голосов
/ 01 июля 2011

Я не совсем уверен, что это то, что вам нужно, но что делать с закрытой переменной $ isLoggedIn, чтобы классы могли проверять ее существование?

private $ isLoggedIn = new LoggedInUser ();

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