功能中的PHP函数
问题描述:
我正在尝试构建一个函数来调用另一个函数。例如,如果我有一个要调用的函数名称的数组,是否可以为每个数组值调用一个函数,而无需将其写入脚本中?功能中的PHP函数
例子:
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")
答
你真正想要做的是动态创建成员变量并检索它们的值。这是什么__get() and __set()是*。
这里是你如何使用它。
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";
** afuzzyllama beat me to this point,但我觉得有必要的代码示例,*
+0
你写了比我更深入的回答,你应该接受! – afuzzyllama 2012-03-08 18:35:57
答
待办事项你的意思是这样的?
/*
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");
答
需要的,如果该功能存在与否
function contr_val($key,$val) {
if (!function_exists($key)){
function $key($val=NULL) {
if($val)
$this->_$key = $val;
}
}else{
return $this->_$key;
}
}
答
在一个阵列功能齐全的名字,这就要求每一个存在的功能。
[email protected]:~$ 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";
}
}
[email protected]:~$ ./functest.php
one
two
three
No such function: four
[email protected]:~$
退房:http://stackoverflow.com/questions/415969/what -are-php-nested-functions- – JKirchartz 2012-03-08 16:44:39