我正在编写一些可以从模板生成HTML文件的PHP代码。
我希望,如果可能的话,创建一个函数,它将接受函数的任何字符串,并将其放入文件中。像这样:
function generator($a, $b, $c, $n...){
$filename = $a . ".html";
ob_start ();
echo $b;
echo $c;
echo $d;
echo $n...;
$buffer = ob_get_clean();
file_put_contents($a, $buffer);
}
我需要这个,因为不同的页面会包含不同数量的包含文件,因此我可以跳过为特定页面制作不同的功能。只是一个迭代器,就是它。
谢谢!
答案 0 :(得分:6)
从PHP 5.6+开始,您可以使用...
来表示可变数量的参数:
function test (... $args)
{
foreach ($args as $arg) {
echo $arg;
}
}
test("testing", "variable"); // testing variable
所以,你的函数看起来像这样:
function generator($a, $b, $c, ... $n) {
$filename = $a . ".html";
ob_start();
echo $b;
echo $c;
foreach ($n as $var) {
echo $var;
}
$buffer = ob_get_clean();
file_put_contents($a, $buffer);
}
答案 1 :(得分:2)
您还可以使用variadic functions (PHP 5.6+):
function generator($a, ...$args) {
echo $a . "\n";
print_r($args);
}
generator("test", 1, 2, 3, 4);
输出:
"test"
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
答案 2 :(得分:1)
只需在函数内使用func_get_args();
即可返回传入的所有参数的数组。
您还可以使用func_get_arg($arg_num)
返回特定参数,或使用func_num_args
返回参数数量。
所有PHP函数都允许任意数量的参数,它们只是不能按名称调用,唯一的方法是使用这3个函数。
注意,您可以使用可变参数作为参数列表中的最后一个参数:
function my_func($x,$y, ... $z){
//Now $z is an array of all arguments after the first two
}
答案 3 :(得分:1)
您可以使用数组进行以下操作:
function generator($array){
// set the first item of the array as name of the .html file and take it out of the array.
$filename = array_shift($array) . ".html";
ob_start ();
// echo all the array fields
foreach($array as $a){
echo $a;
}
$buffer = ob_get_clean();
file_put_contents($a, $buffer);
}
您可以直接传递数组以调用函数,如下所示:
generator( ["val_1", "val_2", "val_3"] );
答案 4 :(得分:1)
在设计良好的过程中,我会仔细考虑何时何地使用此类内容。例如,我目前正在处理一个可能有超过200K行代码的项目,更糟糕的是,这实际上从未使用过。
最常见的方法是传递数组" struct"方法:
$args = array();
$args['kitchen'] = 'sink';
$args['bath'] = 'room';
$args['cat'] = array('fur','tail');
$func->someFunction($args);
如果您想要更多地控制数据,可以创建一个结构并在类中访问它。公共职能充当处理者。
class SomeClass {
....
private $args
public function setArgs($arg1,$arg2,$arg3) {
$this->arg1 = $arg1;
...
}
public function getArgs() {
return $this->args;
}
更少见的是你可以使用C ++之类的控件,只使用类作为结构:
class MyStruct {
public $foo;
public $bar;
private $secret;
private function getSecret() {
return $secret;
}
protect function setSecret($val) {
$secret = $val;
}
}
已经提到过' ...'我几乎从未见过,但它有趣,虽然有用吗?这有助于解释发生了什么吗?
function someFunction(... $args)
通常,您会在方法中看到各种各样的东西,这些方法有助于阐明其目的。
private function someSmallFunc($list = array(), $val = '', $limit = 10)
这个例子是为了说明信息的自然分组,数据在列表中,$ val用于控制方法的内容以及$ limit表示限制查询结果的数量。因此,您应该以这种方式思考您的方法IMO。
此外,如果您注意到默认值已设置($ limit = 10)以防它们未被传入。例如,如果您调用someSmallFunc($ data,$ someVal)(反对someSmallFunc($ data) ,$ someVal,20))并且没有传入$ limit它将默认为10.