2011-02-11 15 views
15

基本上我有一個PHP類,我想從命令行測試並運行某種方法。我確信這是一個基本問題,但我錯過了文檔中的某些內容。我知道如何運行一個文件,顯然php -f但不知道如何運行文件,該文件是一個類,並執行給定方法如何從命令行執行類中的方法

+0

好,謝謝,這可能情況而愚蠢的問題:) – 2011-02-11 13:53:33

回答

32

這將工作:

php -r 'include "MyClass.php"; MyClass::foo();' 

但我看不出有任何理由做的,除了測試雖然。

+5

我今天也學到了一些新東西,然後... – Repox 2011-02-11 14:40:44

4

如佩卡已經提到的,你需要編寫處理的具體方法的執行腳本然後從命令行運行它。

test.php的:

<?php 
class MyClass 
{ 
    public function hello() 
    { 
    return "world"; 
    } 
} 

$obj = new MyClass(); 
echo $obj->hello(); 
?> 

而在你的命令行

php -f test.php 
+1

謝謝,我不認爲我今天早上想清楚 – 2011-02-11 13:57:26

4

下面是Repox代碼的一個更好的例子。這隻會在從命令行調用時運行de方法。

<?php 
class MyClass 
{ 
    public function hello() 
    { 
    return "world"; 
    } 
} 

// Only run this when executed on the commandline 
if (php_sapi_name() == 'cli') { 
    $obj = new MyClass(); 
    echo $obj->hello(); 
} 

?> 
11

我可能會使用call_user_func來避免對類或方法名進行哈希編碼。 輸入或許應該使用驗證的一些kinf,但...

<?php 

class MyClass 
{ 
    public function Sum($a, $b) 
    { 
     $sum = $a+$b; 
     echo "Sum($a, $b) = $sum"; 
    } 
} 


// position [0] is the script's file name 
array_shift(&$argv); 
$className = array_shift(&$argv); 
$funcName = array_shift(&$argv); 

echo "Calling '$className::$funcName'...\n"; 

call_user_func_array(array($className, $funcName), $argv); 

?> 

結果:

E:\>php testClass.php MyClass Sum 2 3 
Calling 'MyClass::Sum'... 
Sum(2, 3) = 5