php object default-arguments

¿Funciona php como configurar valor por defecto como objeto?



object default-arguments (4)

Podría usar mi pequeña biblioteca ValueResolver en este caso, por ejemplo:

function func2(itemp $obj = null) $obj = ValueResolver::resolve($obj, new temp(''Default'')); // .... }

y no olvide usar el espacio de nombres use LapaLabs/ValueResolver/Resolver/ValueResolver;

También hay capacidad para encasillar, por ejemplo, si el valor de su variable debería ser integer , entonces use esto:

$id = ValueResolver::toInteger(''6 apples'', 1); // returns 6 $id = ValueResolver::toInteger(''There are no apples'', 1); // returns 1 (used default value)

Compruebe la ValueResolver para más ejemplos

Una función (en realidad un constructor de otra clase) necesita un objeto de class temp de class temp como argumento. Así que defino la interface itemp e itemp $obj como argumento de función. Esto está bien, debo pasar objetos de class temp a mi función. Pero ahora quiero establecer un valor predeterminado para este argumento itemp $obj . ¿Cómo lograr esto? ¿O acaso no es posible?
Pondré el código de prueba para aclarar:

interface itemp { public function get(); } class temp implements itemp { private $_var; public function __construct($var = NULL) { $this->_var = $var; } public function get() { return $this->_var ; } } $defaultTempObj = new temp(''Default''); function func1(itemp $obj) { print "Got : " . $obj->get() . " as argument./n"; } function func2(itemp $obj = $defaultTempObj) //error : unexpected T_VARIABLE { print "Got : " . $obj->get() . " as argument./n"; } $tempObj = new temp(''foo''); func1($defaultTempObj); //Got : Default as argument. func1($tempObj); //Got : foo as argument. func1(); //error : argument 1 must implement interface itemp (should print Default) //func2(); //could not test as i can''t define it


Un posible problema con la respuesta de arnaud576875 es que, en algunos casos, es posible que desee permitir NULL como un parámetro específico, por ejemplo, podría desear que lo siguiente se maneje de manera diferente:

func2(); func2(NULL);

Si es así, una mejor solución sería:

function func2(itemp $obj = NULL) { if (0 === func_num_args()) { $obj = new temp(''Default''); } // ... }


Usted no puede Pero puedes hacerlo fácilmente:

function func2(itemp $obj = null) if ($obj === null) { $obj = new temp(''Default''); } // .... }


desde php 5.5 , simplemente puede usar la ::class para pasar una clase como parámetro de la siguiente manera:

function func2($class = SomeObject::class) { $object = new $class; } func2(); // will create an instantiation of SomeObject class func2(AnotherObject::class); // will create an instantiation of the passed class