Marcus Bointon wrote:
I'm not sure if this is a bug or a feature, but it seems you can't use class constants to set default values for class properties. You can, however, use them for default values for method params, e.g.:

class foo {}
             ^--- er.

  const BAR = 100;
  private $thing = self::BAR;
  function wibble($a = self::BAR) {
    echo $a;
  }
}

class foo {
  const BAR = 100;
  private $thing = self::BAR;
  function wibble($a = self::BAR) {
    echo $a;
  }
}
$f = new foo;
$f->wibble();

it _seems_ you did not test this, at least when I run this it gives me a fatal 
error
(which definitely leaves $this->thing undefined!)


In this case $this->thing will be undefined, but wibble() will get the correct default value for $a.

Comments?

I believe this is due to the fact that when setting up $thing, php is still 
building
the class definition therefore the constant does not 'exist' yet. the error msg 
I get
seems to confirm this.

this does work:

class qux { const BAR = 100; }
class foo {
  const BAR = 100;
  private $thing = qux::BAR;
  function wibble($a = self::BAR) {
    echo $a,"\n",$this->thing;
  }
}
$f = new foo;
$f->wibble();


this does work, which really surprised me.


class foo {
  const BAR = 100;
  private $thing = foo::BAR;
  function wibble($a = self::BAR) {
    echo $a,"\n",$this->thing;
  }
}
$f = new foo;
$f->wibble();


but honestly if you want to be very stricly correct about you OO then you
should not (I believe) be setting a value to an instance member in the class
definition, instead do:

class foo {
  const BAR = 100;
  function __construct() {
    $this->thing = self::BAR;
  }
  function wibble($a = self::BAR) {
    echo $a,"\n",$this->thing;
  }
}
$f = new foo;
$f->wibble();



I tested all this on PHP 5.0.2 (cli) (built: Oct 21 2004 13:52:27)


Marcus

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to