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
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 claseMyClass::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
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();
}
?>
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
ok gracias, esta podría haber sido una pregunta tonta 🙂
– dan.codes
11 de febrero de 2011 a las 13:53