是否可以从值数组中自动生成PHP函数名称?

时间:2011-07-31 21:42:55

标签: php arrays function auto-generate

我最近教过数组系统来缩短我在Javascript上的代码。

        var fields = ['username', 'password', 'password_confirm', 'type', 'firstname', 'lastname', 'bdate_month', 'bdate_day', 'bdate_year', 'email', 'country', 'state', 'city', 'payment_email'];
        var length = fields.length;
        for (var i=0; i<length; i++) {
        if ($('#' + fields[i]).val() == "") {
        $('#' + fields[i] + '_error').show();
        $('#' + fields[i] + '_error').fadeOut(4000, function() {});
        $('#' + fields[i]).focus();
        return false;
        }
        }

这是我为生成一系列条件而生成的代码,这些条件将验证提交表单的内容。

现在我想在PHP中使用相同的原理来生成一系列函数,这些函数将从MySQL数据库中查询登录用户的数据。

我是PHP的新手,我知道下面的代码可能只是一堆无意义的胡言乱语。但也许你可以了解我在这里想要完成的事情。

include("connect.php");

$fields = ('id', 'username', 'password', 'password_confirm', 'type', 'firstname', 'lastname', 'bdate_month', 'bdate_day', 'bdate_year', 'email', 'country', 'state', 'city', 'payment_email');
$username = mysql_real_escape_string($_SESSION['username']);

for ($i=0; $i<15; $i++) {
function $fields($i)() {
    $username = mysql_real_escape_string($_SESSION['username']);
    $sql="SELECT * FROM users WHERE username='$username'";
    $resultado=mysql_query("$sql");
    $row=mysql_fetch_array($resultado);
    if($row!=NULL)
    {
        echo ($row['$fields($i)']);
    } else {

        echo (" No ".$fields($i)." inserted!");
    }
}
}

=========================================== 编辑:

我想出了一种更简单,更简单的方法。

function in_user($key) { 
$username = mysql_real_escape_string($_SESSION['username']);
$sql="SELECT * FROM users WHERE username='$username'"; 
$resultado=mysql_query("$sql"); 
$row=mysql_fetch_array($resultado); 
if($row!=NULL){ 
echo ($row[$key]); 
} else { 
echo ("No {$key}!"); 
} 
}

由于我需要改变的是要咨询的领域,我认为一个有争议的函数会更简单,更简单。

<?php in_user('email');?>会输出stored.email@database.com

6 个答案:

答案 0 :(得分:1)

在PHP中,您无法创建名称基于变量的函数。

此外,在这个例子中你不会获得太多收益,我认为使用起来要清楚得多:

function user_get_field($fieldname)

现在,如果您需要多个字段,这将导致执行多个查询,因此最好检索所有内容并对其进行缓存。

嘿,您甚至可以在会话中存储与用户相关的所有内容,并在更改自己的设置时对其进行更新。这是每个会话只有一个查询。

答案 1 :(得分:0)

function fields($i) {
    $username = mysql_real_escape_string($_SESSION['username']);
    $sql="SELECT * FROM users WHERE username='$username'";
    $resultado=mysql_query($sql);
    $row=mysql_num_rows($resultado);
    if($row != 0) {
        echo ($row['$fields($i)']);
    } else {
        echo (" No ".$fields($i)." inserted!");
    }
}
for ($i=0; $i<15; $i++) {
    fields($i);
}  

该函数必须输出且$fields是一个数组,我希望它能正常工作。

答案 2 :(得分:0)

你想要完成什么?喜欢最终结果应该做什么?您是否只是想检查一行中的字段是否已填写?对我而言,看起来你的生活比你需要的更复杂。

编辑:

这是我将如何做到的。把它放在你的connect.php中:

$user = array();
$username = mysql_real_escape_string($_SESSION['username']);
$query = "SELECT * FROM users WHERE username='{$username}'";
$rs = mysql_query($query);
$row = mysql_fetch_array($rs);

foreach($row as $key => $value) {
    $user[$key] = $value;
}

有了这个,您应该可以通过$ user ['id']或$ user ['password']访问任何用户字段,只要包含connect.php。

我希望这很有帮助。

编辑2:

更简单:

$username = mysql_real_escape_string($_SESSION['username']);
$query = "SELECT * FROM users WHERE username='{$username}'";
$rs = mysql_query($query);
$user = mysql_fetch_array($rs);

答案 3 :(得分:0)

嗯,我不确定整体方法,但只是为了好玩....你可以使用variable variables来触发anonymous functions,如下所示:

<?php
$fields = array('id', 'username' ...
foreach($fields as $index => $one_field) {
    $$one_field = function() use ($one_field, $index) { ... };
}

请注意use的使用,因此我可以访问$one_field$index的实例,这些实例是在函数中创建每个$$one_field时最新的...创建一个真正的关闭。

现在您可以访问其中一个功能,例如$username()

Here's a quick illustrative example.

答案 4 :(得分:0)

我知道它的旧,但仍然是这个作品......

function test_one(){
print "one";
}
function test_two(){
print "two";
}
$var = "test_two";
$var();

答案 5 :(得分:-4)

您可以使用php的fwrite,并像往常一样将函数写入文件。即fwrite($handle,'<?php function '.$function_name.' { //function contents here } ?>');我不推荐这个,但它是可行的。