2012-03-08 78 views
2

我正在嘗試構建一個函數來調用另一個函數。例如,如果我有一個要調用的函數名稱的數組,是否可以爲每個數組值調用一個函數,而無需將其寫入腳本中?功能中的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://stackoverflow.com/questions/415969/what -are-php-nested-functions- – JKirchartz 2012-03-08 16:44:39

回答

3

你真正想要做的是動態創建成員變量並檢索它們的值。這是什麼__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

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"); 
0

需要的,如果該功能存在與否

function contr_val($key,$val) { 
    if (!function_exists($key)){ 
     function $key($val=NULL) { 
      if($val) 
       $this->_$key = $val; 
     } 
    }else{ 
     return $this->_$key; 
    } 
} 
2

在一個陣列功能齊全的名字,這就要求每一個存在的功能。

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