脚本宝典收集整理的这篇文章主要介绍了php – 根据键将大型关联数组转换为局部变量,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
为了防止这个小的关联数组,可以接受这样做:
$username = $_POST['username']; $password = $_POST['password'];
我不是逃避他们为了这个例子,以保持一切尽可能整洁,所以放松.
你也可以这样做:
list($username,$password) = $_POST;
但是,如果$_POST数组更大?那么做这两种方法就变得乏味.要解决这个问题,你可以运行这样一个循环:
foreach($arr as $key => $value) { ${$key} = $value; }
该方法的问题是它分配局部变量.如果可以在运行此循环的父类中调用一个函数,并且这些局部变量在调用类中可访问,那将是很好的.想象一下MVC设置,其中每个控制器都是从Controller类派生的,同样对于模型.这样做会很好:
$this->localize($_POST); doWhatever($username) // $username works! Assuming $_POST['username'] is defined
创建这样的方法会导致局部变量只保留在父类中的localize()函数的范围内,因此这将不起作用.我一直在做的是运行相同的循环与一个修改:
foreach($arr as $key => $value) { $this->{$key} = $value; }
这个工作和所有,但并不真正解决初始问题.而不是用括号和引号杂乱的代码,它有$this->在所有的地方,更不用说它是分配在类中从未正式定义的变量.
所以最后,我的问题是:是否可以创建一个如我所描述的localize()这样的函数,以便它可以从父类继承,但是创建相对于子类的局部变量($username而不是$this-&gt ;用户名).
此外,无论你是否可以,这是否被认为是不好的做法?对我来说似乎有点黑客,你忽略了一些OOP的原则.如果是,您是否使用解决方案来修复大型关联数组的丑陋和混乱,还是处理它?
如果函数采用用户提供的变量名(例如由$_POST提供)来防止现有变量的重新定义,那么请务必使用EXTR_SKIP选项来提取extract():
$myVAR = 'abc'; extract($_POST,EXTR_SKIP); // $_POST['myvar'] won't overwrITe $myvar.
以上是脚本宝典为你收集整理的php – 根据键将大型关联数组转换为局部变量全部内容,希望文章能够帮你解决php – 根据键将大型关联数组转换为局部变量所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。