功能中的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") 
+1

退房:http://*.com/questions/415969/what -are-php-nested-functions- – JKirchartz 2012-03-08 16:44:39

你真正想要做的是动态创建成员变量并检索它们的值。这是什么__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"); 

如果你这样做是为一类,你为什么不考虑使用PHP的魔术方法__get()__set()?检查

需要的,如果该功能存在与否

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]:~$