如何轻松 overwrite/change 多个 php 变量
How to easily overwrite/change multiple php variables
我正在使用 php 构建一个 pdf 并注意到我的字符串不起作用,因为它们是 UTF-8 格式。 utf8_decode($str)
工作正常,但我有很多变量必须以这种方式解码。我的代码看起来像这样:
function makePDF(titleStr, bodyStr, headerStr, and more...)
{
//TO-DO
$pdf->Cell(20, 6, $titleStr, 1, 1, 'L', false);
$pdf->Cell(15, 6, $bodyStr, 1, 1, 'L', true);
$pdf->Cell(50, 6, $headerStr, 1, 1, 'R', false);
}
我想找到一种方法在循环中一次解码它们,或者不需要对每个变量都这样做,也不必更改我已有的任何其他代码:
$titleStr = utf8_decode($titleStr);
$bodyStr = utf8_decode($bodyStr);
...and so on
有人知道如何更轻松地做到这一点吗?
您可以使用 func_get_args()
to retrieve them, array_map()
to apply the UTF8 decoding, and list()
将函数的所有参数读回简单的字符串变量。
<?php
function makePDF($titleStr, $bodyStr, $headerStr)
{
$args = func_get_args();
$args = array_map(function($args){
return utf8_decode($args);
}, $args);
list($titleStr, $bodyStr, $headerStr) = $args;
var_dump($titleStr);
var_dump($bodyStr);
var_dump($headerStr);
}
makePDF('foo', 'bar', 'baz');
输出:
string(3) "foo"
string(3) "bar"
string(3) "baz"
您需要 copy/paste 您的方法签名到 list()
调用中,但这相当简单。
为了好玩,如果您想跳过 copy/paste 这一步,您可以将 func_get_args()
切换为 get_defined_vars()
and use variable variables 以重新分配参数:
<?php
function makePDF($titleStr, $bodyStr, $headerStr)
{
$args = get_defined_vars();
$args = array_map(function($args){
return utf8_decode($args) . rand(0,10);
}, $args);
foreach($args as $key => $arg){
// The two $$ show that this is a variable variable.
$$key = $arg;
}
var_dump($titleStr);
var_dump($bodyStr);
var_dump($headerStr);
}
makePDF('foo', 'bar', 'baz');
string(4) "foo5"
string(4) "bar5"
string(4) "baz9"
*我在 array_map()
可调用函数中添加了 rand()
以证明赋值实际上是在这里发生的。
我正在使用 php 构建一个 pdf 并注意到我的字符串不起作用,因为它们是 UTF-8 格式。 utf8_decode($str)
工作正常,但我有很多变量必须以这种方式解码。我的代码看起来像这样:
function makePDF(titleStr, bodyStr, headerStr, and more...)
{
//TO-DO
$pdf->Cell(20, 6, $titleStr, 1, 1, 'L', false);
$pdf->Cell(15, 6, $bodyStr, 1, 1, 'L', true);
$pdf->Cell(50, 6, $headerStr, 1, 1, 'R', false);
}
我想找到一种方法在循环中一次解码它们,或者不需要对每个变量都这样做,也不必更改我已有的任何其他代码:
$titleStr = utf8_decode($titleStr);
$bodyStr = utf8_decode($bodyStr);
...and so on
有人知道如何更轻松地做到这一点吗?
您可以使用 func_get_args()
to retrieve them, array_map()
to apply the UTF8 decoding, and list()
将函数的所有参数读回简单的字符串变量。
<?php
function makePDF($titleStr, $bodyStr, $headerStr)
{
$args = func_get_args();
$args = array_map(function($args){
return utf8_decode($args);
}, $args);
list($titleStr, $bodyStr, $headerStr) = $args;
var_dump($titleStr);
var_dump($bodyStr);
var_dump($headerStr);
}
makePDF('foo', 'bar', 'baz');
输出:
string(3) "foo" string(3) "bar" string(3) "baz"
您需要 copy/paste 您的方法签名到 list()
调用中,但这相当简单。
为了好玩,如果您想跳过 copy/paste 这一步,您可以将 func_get_args()
切换为 get_defined_vars()
and use variable variables 以重新分配参数:
<?php
function makePDF($titleStr, $bodyStr, $headerStr)
{
$args = get_defined_vars();
$args = array_map(function($args){
return utf8_decode($args) . rand(0,10);
}, $args);
foreach($args as $key => $arg){
// The two $$ show that this is a variable variable.
$$key = $arg;
}
var_dump($titleStr);
var_dump($bodyStr);
var_dump($headerStr);
}
makePDF('foo', 'bar', 'baz');
string(4) "foo5" string(4) "bar5" string(4) "baz9"
*我在 array_map()
可调用函数中添加了 rand()
以证明赋值实际上是在这里发生的。