2015-08-01 3 views
0

Я ищу вызов функции в другом файле с использованием переменной для имени класса. Когда пользователь входит в систему, я получаю их уровень доступа и хочу использовать полученную переменную для вызова разных меню, страниц и т. Д., К которым их доступ позволяет им получить доступ. Так, например, они могут иметь следующие права доступа:PHP - класс вызова с использованием переменной с использованием ключевого слова

  • Администратор
  • Сотрудник
  • Общественный

$access установлен в одной из этих переменных (строковое значение).

1. В моем pages.php сценарий, у меня есть следующие (упрощенно):

namespace Project\PageContent; 

use Project\PageContent as pageContent; 

class Administrator 
{ 
    public function pageAccess() 
    { 
     return "Administrator access"; 
    } 
} 
class Employee 
{ 
    public function pageAccess() 
    { 
     return "Employee access"; 
    } 
} 
class Public 
{ 
    public function pageAccess() 
    { 
     return "Public access"; 
    } 
} 

2. Теперь, как я могу получить доступ к нему (с другой страницы - упрощенный):

namespace Project\Main; 

use Project\Main as main; 

require_once('pages.php'); 
use Project\PageContent as pageContent; 

$response = pageContent\Administrator::pageAccess(); 

echo $response 

3. И к тому, как я хотел бы получить к нему доступ (упрощенно) - где это явно не работает или я не буду задавать вопрос:

namespace Project\Main; 

use Project\Main as main; 

$access = 'Administrator'; 

require_once('pages.php'); 
use Project\PageContent as pageContent; 

$response = pageContent\.$access::pageAccess(); 

echo $response; 

Где $ доступ представляет собой строку, которая может быть использована, чтобы указать на соответствующую классу (в случае выше - Administrator)

Выход 3 должен соответствовать выходу 2 и вернуть Administrator access

Любой помощь с это очень ценится, спасибо!

+0

'$ response = pageContent \ {$ access} :: pageAccess();'? –

+0

@u_mulder Я получаю 'синтаксическую ошибку, неожиданную '{', ожидая T_STRING' – ctwheels

+0

Если вы используете E_STRICT, вы получите предупреждение во второй версии, потому что вы обращаетесь к публичной функции, поскольку она статична. – Mihai

ответ

0

У вас нет доступа к общедоступным методам. Вам необходимо создать экземпляр объекта, а затем получить доступ к этому методу. Это, как вы могли бы назвать его:

$class = 'pageContent\\' . $otherClassName; 
$obj = new $class(); 
$obj->pageAccess(); 

Стоит также отметить, что то, что вы делаете, имеет потенциальные проблемы безопасности с вне надлежащей проверки.

Смежные вопросы