【问题标题】:Call a static function inside array php在数组php中调用静态函数
【发布时间】:2017-07-09 03:35:47
【问题描述】:

如何在数组中调用静态函数?我试过了,但它给了我一个Constant expression contains invalid operations 我有两个类,登录类和路由类。

Route 类在 $routes 数组中使用 Login::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"];
    }
}

【问题讨论】:

标签: php arrays class web methods


【解决方案1】:

我不知道你打算如何使用它,但你可以利用可变变量:

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

以下示例/POC:

class Login {

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

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

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

这不是最好的方法,但可以达到要求。我确实高度建议您查看代码库中的替代方案以正确处理此问题。

Example/Demo

【讨论】:

  • 如果 $a 在另一个类中怎么办?我试过了,但给了我错误。
  • @Mr.Programmer 你能展示你的完整代码吗? (用它更新你的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
相关资源
最近更新 更多