从 PHP 中的变量实例化一个类?
我知道这个问题听起来很模糊,所以我会用一个例子让它更清楚:
$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
这就是我想做的。 你会怎么做? 我当然可以像这样使用 eval() :
$var = 'bar';
eval('$bar = new '.$var.'Class(\'var for __construct()\');');
但我宁愿远离 eval() 。 有没有办法不用 eval() 来做到这一点?
I know this question sounds rather vague so I will make it more clear with an example:
$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
This is what I want to do. How would you do it? I could off course use eval() like this:
$var = 'bar';
eval('$bar = new '.$var.'Class(\'var for __construct()\');');
But I'd rather stay away from eval(). Is there any way to do this without eval()?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
首先将类名放入变量中:
这通常是您在工厂模式中看到的那种内容。
有关更多详细信息,请参阅命名空间和动态语言功能。
Put the classname into a variable first:
This is often the sort of thing you'll see wrapped up in a Factory pattern.
See Namespaces and dynamic language features for further details.
如果您使用命名空间
在我自己的发现中,我认为最好提到您(据我所知)必须声明类的完整命名空间路径。
MyClass.php
索引.php
If You Use Namespaces
In my own findings, I think it's good to mention that you (as far as I can tell) must declare the full namespace path of a class.
MyClass.php
index.php
如何传递动态构造函数参数
如果要将动态构造函数参数传递给类,可以使用以下代码:
有关动态类和参数的更多信息
PHP >= 5.6
从 PHP 5.6 开始,您可以使用以下方法进一步简化: 参数解析:
感谢 DisgruntledGoat指出这一点。
How to pass dynamic constructor parameters too
If you want to pass dynamic constructor parameters to the class, you can use this code:
More information on dynamic classes and parameters
PHP >= 5.6
As of PHP 5.6 you can simplify this even more by using Argument Unpacking:
Thanks to DisgruntledGoat for pointing that out.
我推荐
call_user_func()
或call_user_func_array
php 方法。您可以在这里查看它们 (call_user_func_array , < a href="http://php.net/manual/en/function.call-user-func.php" rel="nofollow noreferrer">call_user_func)。
示例
如果您有要传递给方法的参数,请使用
call_user_func_array()
函数。例子。
I would recommend the
call_user_func()
orcall_user_func_array
php methods.You can check them out here (call_user_func_array , call_user_func).
example
If you have arguments you are passing to the method , then use the
call_user_func_array()
function.example.