|  | Posted by Jerry Stuckle on 05/03/06 20:51 
Ciaran wrote:> Andy,
 >
 > I think that 'self' will not do what you want, in this instance.
 >
 > In PHP, 'self' always refers to the class in which it is used so in
 > your example code you will get a warning that A::TEST_CONST is not
 > defined when you try either $b->printConst() or $c->printConst().
 >
 > This is very annoying behaviour, but there isn't a keyword in PHP5 that
 > refers to 'the current class' in the way you want it to.  This is under
 > discussion for PHP6, and a new keyword apparently may or may not be
 > introduced - I'm hoping very much that it will!
 >
 > See:
 > http://www.php.net/~derick/meeting-notes.html#late-static-binding-using-this-without-or-perhaps-with-a-different-name
 >
 
 Actually, Ciaran, in this case it makes sense.  For instance, what if you had:
 
 $a = new A();
 $a->printConst();
 
 What would it print?
 
 
 Or, if you had:
 
 class A {
 public function printConst()
 {
 print {something}::TEST_CONST;
 }
 }
 
 class B extends A {
 const TEST_CONST = 10;
 }
 
 class C extends B {
 const TEST_CONST = 20;
 }
 
 $c = new C();
 $c->printConst();
 
 What would it print?
 
 PHP does have an advantage over other OO languages such as Java and C++ in that
 it is a strictly interpreted language - it's not compiled.  So something like
 this *could* be done.
 
 However, the way to handle this would be to define TEST_CONST in A, and set it
 in the constructors for B and C.  Unfortunately, PHP doesn't allow a constant to
 be initialized in the constructor, so it has to be a non-constant.  However,
 something like this works:
 
 class A {
 private  $TEST_CONST = 30;
 
 public function A($tc) {
 $this->TEST_CONST = $tc;
 }
 public function printConst()
 {
 print $this->TEST_CONST;
 }
 }
 
 class B extends A {
 public function B () {
 parent::A(10);
 }
 }
 
 class C extends B {
 public function C() {
 parent::A(20);
 }
 }
 
 
 
 
 --
 ==================
 Remove the "x" from my email address
 Jerry Stuckle
 JDS Computer Training Corp.
 jstucklex@attglobal.net
 ==================
  Navigation: [Reply to this message] |