Вся идея friend
заключается в том, чтобы разоблачить ваш класс для друга.
Есть два способа, которыми вы могли бы более конкретно узнать, что вы показываете:
FooA
, таким образом, открываются только защищенные и общедоступные методы. .
friend void FooB::fun();
Исключительно в вопросе о разрешении методу принимать типы User и DemoUser, вы можете установить класс Interface, который может реализовывать и пользователь, и DemoUser.
Надеюсь, что это помогает.
То, что вы пытаетесь сделать, может быть достигнуто с помощью интерфейсов или абстрактных классов. Создайте интерфейс и реализуйте его в двух моделях или создайте абстрактный класс и расширьте его из вашего класса двух пользователей. Затем при передаче аргумента используйте интерфейс или абстрактный класс в качестве подсказки типа, например
public function createLogin(UserInterface $user) {
}
Вы можете сделать что-то вроде этого,
public function createLogin($user)
{
if (is_a($user, 'App\User'))
{
// Create your user here
}
elseif(is_a($user, 'App\DemoUser'))
{
// create demo user here
}
}
Один из способов - расширить класс с методом createLogin
и переписать этот метод с помощью:
public function createLogin($user)
{
if ($user instanceOf User) {
parent::createLogin($user)
}
if ($user instanceOf DemoUser) {
// Login logic for DemoUser
}
}
* Дайте мне знать, если у вас есть какие-либо вопросы