Can I set up a default method argument with class property in PHP?

前端 未结 4 1380
离开以前
离开以前 2020-12-18 21:19

I\'m using PHP 5.2.6. I want to have a default value for an argument in a method, but it seems I\'m getting a bit too clever.

The class property blnOverwrite

相关标签:
4条回答
  • 2020-12-18 21:54

    you just can shorten it a little:

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

    but thats nearly the same

    0 讨论(0)
  • 2020-12-18 22:03

    You absolutely can do this. Best of both worlds: initialize your default property AND your method's default argument with a class constant.

    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)
    
    0 讨论(0)
  • 2020-12-18 22:04

    Yes, you have to do it this way. You cannot use a member value for the default argument value.

    From the PHP manual on Function arguments: (emphasis mine)

    A function may define C++-style default values for scalar arguments. […] PHP also allows the use of arrays and the special type NULL as default values. […] The default value must be a constant expression, not (for example) a variable, a class member or a function call. […] Note that when using default arguments, any defaults should be on the right side of any non-default arguments; otherwise, things will not work as expected.

    0 讨论(0)
  • 2020-12-18 22:11

    You must do it that way, afaik, or use a class constant since php 5.3 but of course its fixed and cant be changed later so i would definitely go with your own solution:

    class foo{
        const constant = 'bar';
    
        public function place($path, $overwrite = self::constant ) { 
            die('bla' . $overwrite);
        }
    }
    
    $bar = new foo();
    $bar->place('baz');
    
    0 讨论(0)
提交回复
热议问题