php - PHP 中可以将字符串转换为类名

标签 php

我想将字符串转换为 PHP 中的类名,如下脚本所示。 但我收到错误类名必须是有效的对象或字符串这可能是错误,因为表仍然是字符串。

$table = Teller::select('*')->where('user_id','=', $this->user_id)->first();
$modelName = trim($table->tables,'"');
$loan = $modelName::select('*')->where('id','=', $id)->get();

最佳答案

考虑这个简单的场景:

<?php
        class SomeClass{
            public static $a = 12;
            public static $b = "some value";
            public static $c = "another value";

            public static function getSomeData(){
                return self::$a . " " . self::$b . " " . self::$c;
            }
        }


        $b              = SomeClass::getSomeData();
        //DUMPS '12 some value another value' TO THE OUTPUT STREAM...
        var_dump($b);

        $strClassName   = "SomeClass";

        //STILL DUMPS '12 some value another value' TO THE OUTPUT STREAM...
        var_dump(call_user_func($strClassName. "::getSomeData"));

将这些知识扩展到您的独特案例,您可能想要执行以下操作:

        <?php
            $table          = Teller::select('*')->where('user_id','=', $this->user_id)->first();
            $modelName      = trim($table->tables,'"');
            $implicitCall   = call_user_func($modelName. "::select", '*');
            $implicitCall   = call_user_func($modelName. "::where", array('id', '=', $id));
            $loan           = call_user_func($modelName. "::get");

        ?>

可选;你甚至可以更进一步。因为我们知道您正在使用Fluent Setters;很明显,第一个隐式调用将返回该类的一个实例,因此我们可以执行如下操作:

    <?php
        $table          = Teller::select('*')->where('user_id','=', $this->user_id)->first();
        $modelName      = trim($table->tables,'"');

        // THIS SHOULD RETURN AN INSTANCE OF THE CLASS IN QUESTION: THE MODEL CLASS 
        $implicitCall   = call_user_func($modelName. "::select", '*');

        // DO YOU DOUBT IT? WELL, DOUBT IS THE BEGINNING OF ALL KNOWLEDGE.
        // I DOUBT IT TOO; SO LET'S CONFIRM OUR DOUBTS
        var_dump($implicitCall);    // EXPECTED TO DUMP THE CLASS IN QUESTION.

        // NOW WE CAN JUST USE THE $implicitCall VARIABLE AS IF IT WAS AN INSTANCE OF THE MODEL CLASS LIKE SO:
        $loan           = $implicitCall->where('id','=', $id)->get();

    ?>

我希望这个答案对你有所帮助并且对你有用......;-)

关于php - PHP 中可以将字符串转换为类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37160839/

相关文章:

php - 在 drupal 7 中安装 superfish 菜单

php - 如何使用 PHP 运行 Google Embed API 服务器端授权?

php - 用于 SQL 注入(inject)性能的最佳函数

php - Laravel Artisan::队列不工作

php - 如何通过 php 中的 iconv 库获取支持的编码列表?

php - 在 IF 条件下与 int 和 string 进行比较

php - 从 PHP 写入 C 程序的 STDIN

php - SQLSTATE[42000] : Syntax error or access violation

php - 如何将这个 "R"公式翻译成MySQL/PHP?

php - 使用 WordPress 插件选项中存储的 Mysql 数据