¿Cómo se ejecuta un método en una clase desde la línea de comando?

2 minutos de lectura

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

  • ok gracias, esta podría haber sido una pregunta tonta 🙂

    – dan.codes

    11 de febrero de 2011 a las 13:53

Esto funcionará:

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

Pero no veo ninguna razón para eso además de probar.

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

    – Damodar Bashyal

    5 de junio de 2014 a las 2:10

  • Descubrí que no puedo usar este método porque estoy usando la palabra clave $this para las variables que he definido como atributos. (p.ej public function __construct(){ $this->foo = bar;} public function stuff(){ echo $this->foo;}) Si trato de llamar al método de clase MyClass::stuff()entonces obtendría un error.

    – VinceOmega

    16/09/2014 a las 20:43


  • @VinceOmega: porque está llamando estáticamente al método (sin pasar por alto el constructor) y no puede acceder a propiedades no estáticas.

    – HorusKol

    12 de noviembre de 2015 a las 2:32

Probablemente usaría call_user_func para evitar la codificación de nombres de métodos o clases. Sin embargo, la entrada probablemente debería usar algún tipo de validación …

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

?>

Resultado:

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

Avatar de usuario de Sander Marechal
sander marechal

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

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

?>

Avatar de usuario de Repox
Repox

Como ya mencionó Pekka, debe 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 tu línea de comandos

php -f test.php

¿Ha sido útil esta solución?