我正在尝试构建一个可以调用另一个函数的函数。例如,如果我有一个充满函数名称的数组要调用,是否可以为每个数组值调用一个函数而无需在脚本中编写它?
示例:
function email($val=NULL) {
if($val)
$this->_email = $val;
else
return $this->_email;
}
function fname($val=NULL) {
if($val)
$this->_fname = $val;
else
return $this->_fname;
}
用于电子邮件fname等。
但我希望如此:
function contr_val($key,$val) {
function $key($val=NULL) {
if($val)
$this->_$key = $val;
else
return $this->_$key;
}
function $key($val="hallo");
}
并将其命名为:
contr_val("email","test")
答案 0 :(得分:3)
您真正想要做的是动态创建成员变量并检索其值。这是* {3}}的含义。
以下是您可以使用它的方法:
class TestClass {
var $data = array();
public function __set($n, $v) { $this->data[$n] = $v; }
public function __get($n) {
return (isset($this->data[$n]) ? $this->data[$n] : null);
}
public function contr_val($k,$v = NULL) {
if ($v) $this->$k = $v;
else return $this->$k;
}
};
$sherp = new TestClass;
$sherp->contr_val("Herp", "Derp");
echo "Herp is: " . $sherp->contr_val("Herp") . "\n";
echo "Narp is: " . $sherp->contr_val("Narp") . "\n";
** __get() and __set(),但我觉得有必要使用代码示例。*
答案 1 :(得分:2)
你的意思是这样吗?
/*
Input: $val - any value
$varname - the variable name, for instance: _email
*/
function checkValue($val=NULL , $varname) {
if($val) $this->$var = $val;
else return $this->$var;
}
checkValue("hello" , "_email");
checkValue("hello2" , "_name");
答案 2 :(得分:2)
答案 3 :(得分:2)
在一个充满函数名的数组中,这会调用每个存在的函数。
ghoti@pc:~$ cat functest.php
#!/usr/local/bin/php
<?php
function one() { print "one\n"; }
function two() { print "two\n"; }
function three() { print "three\n"; }
$a=array( "one", "two", "three", "four" );
foreach ($a as $item) {
if (function_exists($item)) {
$item();
} else {
print "No such function: $item\n";
}
}
ghoti@pc:~$ ./functest.php
one
two
three
No such function: four
ghoti@pc:~$
答案 4 :(得分:0)
需要检查功能是否存在
function contr_val($key,$val) {
if (!function_exists($key)){
function $key($val=NULL) {
if($val)
$this->_$key = $val;
}
}else{
return $this->_$key;
}
}