¿Puedo configurar un argumento de método predeterminado con propiedad de clase en PHP?

Estoy usando PHP 5.2.6. Quiero tener un valor predeterminado para un argumento en un método, pero parece que me estoy volviendo demasiado inteligente.

La propiedad de clase blnOverwrite está predeterminada y configurable en cualquier parte de la clase. Tengo un método donde quiero que sea configurable de nuevo, pero no anulo el valor existente. Me sale un error cuando pruebo esto:

 public function place( $path, $overwrite = $this->blnOverwrite ) { ... } 

¿Debo hacer algo como esto?

 public function place( $path, $overwrite = NULL ) { if ( ! is_null($overwrite) ) { $this->blnOverwrite = $overwrite; } ... } 

    Sí, tienes que hacerlo de esta manera. No puede usar un valor de miembro para el valor de argumento predeterminado.

    Del manual de PHP sobre los argumentos de la función: ( énfasis mío )

    Una función puede definir valores predeterminados de estilo C ++ para argumentos escalares. […] PHP también permite el uso de matrices y el tipo especial NULL como valores predeterminados. […] El valor predeterminado debe ser una expresión constante, no (por ejemplo) una variable, un miembro de clase o una llamada a función. […] Tenga en cuenta que cuando se utilizan argumentos predeterminados, los valores predeterminados deben estar en el lado derecho de los argumentos no predeterminados; de lo contrario, las cosas no funcionarán como se espera.

    Usted absolutamente puede hacer esto. Lo mejor de ambos mundos: inicialice su propiedad predeterminada Y el argumento predeterminado de su método con una constante de clase.

     class Object { const DEFAULT_BLNOVERWRITE = TRUE; protected $blnOverwrite = self::DEFAULT_BLNOVERWRITE; public function place($path, $overwrite = self::DEFAULT_BLNOVERWRITE) { var_dump($overwrite); } } $Object = new Object(); $Object->place('/'); //bool(true) 

    Debes hacerlo de esa manera, afaik, o usar una constante de clase desde php 5.3, pero por supuesto está arreglado y no se puede cambiar más tarde, así que definitivamente iría con tu propia solución:

     class foo{ const constant = 'bar'; public function place($path, $overwrite = self::constant ) { die('bla' . $overwrite); } } $bar = new foo(); $bar->place('baz'); 

    solo puedes acortarlo un poco:

     public function place( $path, $overwrite = NULL ) { if(!is_null($overwrite))$this->blnOverwrite = $overwrite; ... } 

    pero eso es casi lo mismo