从命令行传递给函数时不处理值

问题描述 投票:0回答:1

当我将变量传递给从命令行获得的函数时,它返回无效

    echo "Enter vendor name: [vendor1|vendor2|vendor3|vendor4|vendor5] : ";
    $handle = fopen ("php://stdin","r");
    $vendor = fgets($handle);
    $tables = array();

    $err = validate_vendor($vendor, $tables);
    if(!$err) {
        exit("error: invalid vendor\n");
    }

在 validate_vendor 函数中,我嵌入了给定的逻辑 bwlow,如果供应商名称不在这些供应商类型中,则返回 0,否则返回 1。即使我按有效的供应商名称(例如“vendor1”),它也会给出无效的供应商名称并退出。

function validate_vendor($prev_vendor, &$tables) {
        if($prev_vendor == "vendor1")
        {
            ---
            ---
            
            return 1;
        }
        if($prev_vendor == "vendor2")
        {
            ---
            ---
            
            return 1;
        }
        if($prev_vendor == "vendor3")
        {
            ---
            ---
            
            return 1;
        }
        if($prev_vendor == "vendor4")
        {
            ---
            ---
            
            return 1;
        }
        if($prev_vendor == "vendor5")
        {
            ---
            ---
            
            return 1;
        }
        else
        {
            return 0;
        }
    }
php command-line
1个回答
0
投票

面临的问题 您面临的问题可能是由于 fgets 从标准输入读取时包含换行符所致。当您键入供应商名称并按 Enter 键时,fgets 会捕获输入以及换行符。因此,字符串“vendor1”实际上读作“vendor1” ",它与 validate_vendor 函数中的任何条件都不匹配。

您可以通过从输入中删除换行符来解决此问题。以下是修改代码的方法:

echo "Enter vendor name: [vendor1|vendor2|vendor3|vendor4|vendor5] : ";
$handle = fopen("php://stdin", "r");
$vendor = fgets($handle);
$vendor = trim($vendor); // Remove newline character and any surrounding whitespace
$tables = array();

$err = validate_vendor($vendor, $tables);
if (!$err) {
    exit("error: invalid vendor\n");
}

function validate_vendor($prev_vendor, &$tables) {
    if ($prev_vendor == "vendor1") {
        // Your logic here
        return 1;
    }
    if ($prev_vendor == "vendor2") {
        // Your logic here
        return 1;
    }
    if ($prev_vendor == "vendor3") {
        // Your logic here
        return 1;
    }
    if ($prev_vendor == "vendor4") {
        // Your logic here
        return 1;
    }
    if ($prev_vendor == "vendor5") {
        // Your logic here
        return 1;
    }
    return 0;
}

说明:

  • fgets($handle):从标准输入读取一行,包括换行符。
  • trim($vendor):从输入字符串中删除任何前导和尾随空格(包括换行符)。
  • 您的 validate_vendor 函数的其余部分保持不变,现在它应该正确匹配供应商名称,而无需换行符。

这应该可以解决问题并允许有效的供应商名称正确通过 validate_vendor 函数。

© www.soinside.com 2019 - 2024. All rights reserved.