On 20/09/2007, Stanislav Malyshev <[EMAIL PROTECTED]> wrote:
>
> I think we better spend time on figuring out the concept and then do the
> patch than first do the patch and then discover we don't know how it was
> supposed to work :)

Here's a question that I think hasn't been discussed and isn't covered
by the test cases in the patch: will static:: have a meaning in
property and constant declarations? e.g.:

<?
class A {
 const MY_CONST = "const A";
 public $p = static::MY_CONST;
}
class B extends A {
 const MY_CONST = "const B";
}
$a = new A();
$b = new B();
var_dump($a::p, $b::p);
?>

One reason I ask is that in php5.2, self:: and parent:: can (imho) act
counter-intuitively in property declarations. They do not always
behave as if they were bound at compile time. See test case below and
http://news.php.net/php.internals/31961 for more details.

(if these inconsistencies are bugs, please let me know and I'll
happily raise them on bugzilla)

<?php
class A {
   const MY_CONST  = 'MY_CONST_A';
   public static $inheritedStatic = self::MY_CONST;
   public $inheritedProp = self::MY_CONST;
   const INHERITED_CONST = self::MY_CONST;
   public static function inheritedStaticMethod() {
      return self::MY_CONST;
   }
   public function inheritedMethod() {
      return self::MY_CONST;
   }
}
class B extends A {
   const MY_CONST  = 'MY_CONST_B';
}
echo "\n Static Properties:\n";
new B; // !!! Removing this line changes behaviour !!!
echo "   - In A: "; var_dump(A::$inheritedStatic);
echo "   - In B: "; var_dump(B::$inheritedStatic);
echo "\n Instance Properties\n";
$a = new A;
$b = new B;
echo "   - In A: "; var_dump($a->inheritedProp);
echo "   - In B: "; var_dump($b->inheritedProp);
echo "\n Constants:\n";
echo "   - In A: "; var_dump(A::INHERITED_CONST);
echo "   - In B: "; var_dump(B::INHERITED_CONST);
echo "\n Static call:\n";
echo "   - From A: "; var_dump(A::inheritedStaticMethod());
echo "   - From B: "; var_dump(B::inheritedStaticMethod());
echo "\n Instance call:\n";
echo "   - From A: "; var_dump($a->inheritedMethod());
echo "   - From B: "; var_dump($b->inheritedMethod());
?>


-- Actual Output on php5 --

 Static Properties:
  - In A: string(10) "MY_CONST_B"
  - In B: string(10) "MY_CONST_B"
 Instance Properties
  - In A: string(10) "MY_CONST_A"
  - In B: string(10) "MY_CONST_B"
 Constants:
  - In A: string(10) "MY_CONST_A"
  - In B: string(10) "MY_CONST_B"
 Static call:
  - From A: string(10) "MY_CONST_A"
  - From B: string(10) "MY_CONST_A"
 Instance call:
  - From A: string(10) "MY_CONST_A"
  - From B: string(10) "MY_CONST_A"


-- Expected output assuming self:: is bound at compile time --

 Static Properties:
  - In A: string(10) "MY_CONST_A"
  - In B: string(10) "MY_CONST_A"
 Instance Properties
  - In A: string(10) "MY_CONST_A"
  - In B: string(10) "MY_CONST_A"
 Constants:
  - In A: string(10) "MY_CONST_A"
  - In B: string(10) "MY_CONST_A"
 Static call:
  - From A: string(10) "MY_CONST_A"
  - From B: string(10) "MY_CONST_A"
 Instance call:
  - From A: string(10) "MY_CONST_A"
  - From B: string(10) "MY_CONST_A"



Kind regards,
Robin Fernandes

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to