2017-02-20 4 views
-2

Как вызвать статическую функцию внутри массива? Я попробовал, но это дает мне Constant expression contains invalid operations У меня есть два класса класса Login и класса Route.Вызывать статическую функцию внутри массива php

класс маршрута использует Вход :: getJSFile() внутри массива $ маршрутов, но выдает ошибку

Вот мой код:

class Route 
{ 
    private static $routes = [ 
     "login"      => [ 
      "add_to_menu"   => false, 
      "class"     => "login-page", 
      "component"    => [], 
      "css"     => ["/css/form", "/css/login"], 
      "default"    => true, 
      "display_footer_menu" => true, 
      "display_header_menu" => false, 
      "enable_authentication" => true, 
      "enable_permission"  => false, 
      "form"     => true, 
      "icon"     => "<i class='fa fa-sign-in fa-fw'></i>", 
      "js"      => Login::getJSFile(), 
      "layout"     => "pages/login.php", 
      "list"     => false, 
      "menu_order"    => null, 
      "menu_type"    => null, 
      "name"     => "Login", 
      "no_layout"    => "pages/no-layout.php", 
      "parent"     => "", 
      "php"     => ["/php/login"], 
      "require_authentication" => false, 
      "require_permission"  => false, 
      "url"     => "/login/" 
     ] 
    ]; 
} 


class Login 
{ 
    private static $login_routes = [ 
     "administrator" => [ 
      "default" => false, 
      "id"  => "administrator", 
      "js"  => [], 
      "layout" => "pages/components/login/administrator.php", 
      "name"  => "Administrator", 
      "no_layout" => "pages/no-layout.php", 
      "url"  => "administrator" 
     ], 
     "student"  => [ 
      "default" => true, 
      "id"  => "student", 
      "js"  => ["/lib/Inputmask-3.x/dist/min/jquery.inputmask.bundle.min", "/js/components/login/student"], 
      "layout" => "pages/components/login/student.php", 
      "name"  => "Student", 
      "no_layout" => "pages/no-layout.php", 
      "url"  => "student" 
     ] 
    ]; 

    public static function getJSFile() 
    { 
     echo self::$login_routes[self::getCurrent()]["js"]; 
    } 
} 
+0

вы хотите сохранить функцию внутри массива? – sumit

+0

да, но функция находится на классе «Вход», поэтому я использовал Login :: getJSFile() –

+1

http://php.net/manual/en/function.forward-static-call-array.php – sumit

ответ

0

Я не знаю, как вы собираетесь на использовании это, но вы можете использовать переменные переменные:

$login = ${$a['login']['js']}; 

пример/POC ниже:

class Login { 

    function test() { echo 'DERP TEST DERP';} 
} 

$a = [ 
    'login' => [ 
     'js' => Login::test()  
    ] 
]; 

$login = ${$a['login']['js']}; 

Это не самый приятный способ сделать это, но он достигает необходимого. Я делаю (ВЫСОКО) Рекомендуем вам взглянуть на альтернативы в вашей базе кода, чтобы справиться с этим должным образом.

Example/Demo

+0

Что делать, если $ a находится внутри другого класса? Я попробовал, но дал мне ошибку. –

+0

@ Mr.Programmer Можете ли вы показать свой полный код. (* обновите свой ответ. *) – Darren

+0

Я обновил код сейчас –

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