2012-09-18 98 views
5

我有一個具有一堆不同參數化函數的腳本。是否可以從命令行調用這些函數中的任何一個,並傳入參數,而不是必須在腳本中硬編碼函數調用?從命令行調用PHP腳本中的函數

FYI:我不知道如何在命令行

執行一個簡單的PHP腳本並不完全調用函數,記得script.php的大約有5種不同的功能,我期待只能撥打1,這是可能的

回答

8

不,你不能直接做到這一點。您有幾種選擇:

  • 把各種功能在一個單獨的PHP文件並調用php文件
  • 使用傳遞到PHP文件作爲函數名的第一個參數,寫幾行代碼,以選擇正確的功能。

更新:

下面是使用第一傳遞的參數是一個函數調用的一個例子:

if(function_exists($argv[1])) 
    call_user_func_array($argv[1], $argv); 
+1

功能沒有,getopt的()可以,這是爲什麼upvoted? – wesside

+2

因爲它回答了這個問題。 – artragis

+0

@artragis沒有示例就沒用了。 – wesside

0

getopt()需要CLI參數。

php /path/to/myscript.php -a foo -b bar -c baz 

$arguments = getopt("a:b:c:"); 

print_r($arguments); 

    Array 
    (
     [a] => foo 
     [b] => bar 
     [c] => baz 
    ) 

使它成爲一個功能$arguments[a]();調用foo();你可以在B傳遞此外,如果你有一個函數ARG。

+2

他想調用script.php中的一個特定函數,將args傳遞給它,而不僅僅是運行script.php – ernie

+0

我意識到,放輕鬆。 – wesside

0

不是100%肯定你問什麼,但執行會像

php script.php arg1 arg2 arg3 

你似乎已經知道了。在腳本本身中訪問這些參數的方法是使用變量,因此$argv[0]將是腳本,$argv[1]將是"arg1"等。如果這樣做不起作用,則使用$_SERVER['argv']

至於選項,你可以用getopt

3

php script.php arg1 arg2 訪問解析這些它們作爲$ ARGV [1],$ ARGV [2] ...等等,在您的腳本。

+0

你怎麼得到$ argv? – wesside

+0

http://php.net/manual/en/reserved.variables.argv.php –

+0

不錯,不知道這個。 – wesside

0

您可以讓命令行腳本使用其第一個參數作爲調用的函數,然後將參數傳遞給它。參數將出現在魔術數組變量中。

// Zero'th "argument" is just the name of your PHP script 
$name_of_php_script = array_unshift($argv); 
// Next argument will be your callback 
$callback = array_unshift($argv); 
// Remaining arguments are your parameters 
call_user_func_array($callback, $argv); 

很明顯,你可能想使事情變得安全更加複雜,或某種特殊的價值傳遞,但確實你的問題描述的基本邏輯。

0

您可以編寫一個選項,然後將該函數傳遞給例如myscript。PHP - 函數創建my_function

在腳本

然後調用像

$argv[1]()