2017-02-20 103 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

是的,但在功能上居住類「登錄」,所以我使用的登錄:: 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']}; 

這不是做的最好的方式,但它實現了真實需要什麼。我做HIGHLY建議你看一下你的選擇的代碼庫,以妥善處理這一範圍內。

Example/Demo

+0

如果什麼$一個在另一個班級裏面?我試過但給我錯誤。 –

+0

@ Mr.Programmer你能顯示你的完整代碼嗎? (*更新您的答案*) – Darren

+0

我現在更新了代碼 –