php函数的功能

时间:2012-03-08 16:42:10

标签: php function

我正在尝试构建一个可以调用另一个函数的函数。例如,如果我有一个充满函数名称的数组要调用,是否可以为每个数组值调用一个函数而无需在脚本中编写它?

示例:

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

5 个答案:

答案 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)

如果你是为一个班级做这个,为什么不考虑使用PHP的魔术方法__get()__set()

答案 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;
    }
}