2011-02-11 18 views
15

Básicamente tengo una clase de PHP que quiero probar desde la línea de comandos y ejecutar un método determinado. Estoy seguro de que esta es una pregunta básica, pero me falta algo de los documentos. Sé cómo ejecutar un archivo, obviamente php -f pero no estoy seguro de cómo ejecutar ese archivo que es una clase y ejecutar un método dado¿Cómo se ejecuta un método en una clase desde la línea de comandos

+0

ok gracias, esto podría de sido una pregunta tonta :) Gracias –

Respuesta

32

Esto funcionará:

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

Pero aún no hay razones para hacer que, además de las pruebas aunque.

+5

Aprendí algo nuevo hoy también, entonces ... – Repox

+0

ahh eso es genial y sí, todo lo que estoy haciendo es probar –

+2

Ese es el truco más increíble que encontré para la línea de comandos desde que comencé a buscarlo :) –

4

Como ya mencionó Pekka, necesita escribir un script que maneje la ejecución del método específico y luego ejecutarlo desde su línea de comandos.

prueba.php:

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

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

Y en su línea de comandos

php -f test.php 
+1

, no creo que me Estaba pensando claramente esta mañana –

4

Aquí hay un ejemplo más nítido del código de Repox. Esto solo ejecutará el método cuando se llame desde la línea de comando.

<?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

Probablemente usaría call_user_func para evitar la codificación de nombres de clase o método. de entrada probablemente debería utilizar algún kinf de validación, aunque ...

<?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); 

?> 

Resultados:

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