我一直在PHP开发一段时间,而我还没有一个任务,我不得不使用变量变量。任何人都可以给我例子,在哪里使用它们是一个好主意?或者他们是否仅仅为了娱乐而被包含在语言中?什么时候在PHP中使用变量变量?
回答
我不得不使用它们的一种情况是URI处理,尽管这种技术可能过时了,并且我承认很久没有使用它了。
比方说,我们想要以格式domain.tld/controller/action/parameter/s
的格式从脚本中提取URI。我们可以使用下面的删除脚本名称:
$uri_string = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['REQUEST_URI']);
要提取控制器,动作和参数,从这个我们将不得不使用爆炸的路径分隔符“/”的字符串值。然而,如果我们开头或结尾的分隔符,我们将不得不在爆炸空数组值,所以我们应该修剪那些从字符串的开头和结尾:
$uri_string = trim($uri_string, '/');
现在,我们可以爆炸的路径到一个数组:
$uri_data = explode('/', $uri_string);
$uri_data[0]
现在包含我们的控制器名称,$uri_data[1]
包括操作名称,并在数组中值超出了是应该传递到操作方法参数。
$controller_name = $uri_data[0];
$action_name = $uri_data[1];
所以,现在我们有了这些名字,我们可以将它们用于许多事情。如果您将控制器保存在相对于站点根目录的特定目录中,则可以将此信息用于控制器类require_once
。在这一点上,你可以实例,并使用可变的变量调用它:
$controller = new $controller_name();
$controller->{$action_name}(); // Or pass parameters if they exist
有很多安全陷阱的看出来在这种方法中,但是这是我见过利用的一种方式变量变量。
免责声明:我不是建议你真的使用这段代码。
我通常在代码味道不好的地方找到它们。也许引用一个静态配置变量等......但为什么通常的关联数组不是一个更好的解决方案。看起来像是一个等待发生的安全漏洞。
我想你可能能够有效地在模板中使用它们。
首先,如果您将用户输出用于这些目的,那么这将是一个巨大的安全隐患。内部是这里唯一有效的用法。
鉴于这一点,我想这是为了像循环各种变量或发送变量作为参数。
foreach($name in array('_GET','_POST','_REQUEST')) {
array_map('stripslashes',$$name);
}
好的例子:) – 2009-06-16 21:34:37
除非你用多深度变量(如果你没有做任何幻想,你将不再需要)的工作,你可能并不需要它们。即使那样,你也许可以找到另一种方式来写下同样的东西,仍然可以得到相同的结果。虽然它可以缩短(并且在某些情况下甚至更容易理解),但我很高兴它是该语言的一部分。
语言包括你不应该碰到的东西(我甚至在asked a question about it后面),这种情况并不少见,而变量变量可能属于这个类别的构造之一。仅仅因为一种语言包含一项功能并不意味着你必须使用它。
有些时候他们可以解决问题(毕竟递归在实践中很少使用,但没有人会认为这不是一个基本的构造),但通常任何语言特性都会掩盖您的代码正在做什么,并且可变变量明确地属于这个范畴,应该极其谨慎。
我还没有找到变量变量的许多用途,但使用变量的方法可以很方便,只要你在做什么是明确的。例如,在一个简单的REST服务,你可能会做这样的事情:
$method = $request->getMethod(); // 'post','get','put','delete'
try
{
$response = $resource->$method($request->getInput());
}
catch (BadMethodException $badMethod)
{
$response = $responseFactory->getError($badMethod);
}
有人会说,你可以用switch
声明做同样(你能),但这种方式适合于可扩展性(如果你决定添加另一种方法类型)并维护在资源上应用方法的抽象。
我已经找到了一个相当不错的..
$php = "templates/php/default.php";
$html = "templates/html/default.php";
$css = "templates/css/default.php";
$js = "templates/js/default.php";
现在我问用户说,他希望PHP或/和HTML的文件..
$userarray = array("php", "css");
foreach($userarray as $file){
var_dump($$file);
}
输出:
templates/php/default.php
templates/css/default.php
我试图范围静态变量 self::$file;
这样的话,我记得我可以使用可变变量 self::$$file;
将被解释为self::$php;
- 1. 变量变量:什么时候有用?
- 2. 在PHP中,什么时候变量赋值返回false?
- 3. 什么时候应该在PHP类中声明变量?
- 4. 什么时候可以在Python中使用父类变量?
- 5. 什么时候释放变量decodeSet1?
- 6. 什么时候应该在ARM模板中使用变量的时候
- 7. 什么时候和如何用PHP创建类变量?
- 8. 何时使用PHP的变量变量?
- 9. 什么时候应该在CMake中用$ {...}包装变量?
- 10. 什么时候使用borrow = True用于theano共享变量?
- 11. 什么时候使用静态变量和自我关键字
- 12. 什么时候你不想使用@synthesized实例变量?
- 13. 什么时候应该使用会话变量而不是cookie?
- 14. p5.js - 什么时候使用var声明变量vs this.varName
- 15. 什么时候使用静态变量更好?
- 16. 变量中变量在PHP
- 17. 什么时候全局静态常量变量被初始化?
- 18. 什么时候必须在Tensorflow中初始化变量?
- 19. 什么时候没有指针变量在javascript中消失?
- 20. 什么时候变量值在Java中死亡或删除
- 21. 在PHP中使用变量
- 22. PHP使变量变量
- 23. 什么是“变量=变量|| {}”在JavaScript
- 24. 在什么时候内存被分配给C++中的一个常量变量?
- 25. 什么时候使用alt.js流量
- 26. 什么时候应该将函数存储到变量中?
- 27. 什么时候gae中的servlet静态变量?
- 28. 为什么在PHP或其他语言中使用动态变量(变量变量)
- 29. 在php中使用变量赋值中的值在使用php中的变量
- 30. jQuery选择与变量,变量的时候改变
我只是偶尔使用PHP ...什么时候越过自己对这个heck是PHP中的一个“变量变量”? – 2009-06-16 20:14:16
$ foo = 42; $ bar =“foo”; $$ bar ==> 42 – jrockway 2009-06-16 20:19:10