我想将字符串转换为 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/