diff options
author | Dmitry Stogov <dmitry@php.net> | 2012-01-17 08:09:13 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2012-01-17 08:09:13 +0000 |
commit | b515bfbdfbea06307df53d725ea3aa3807504a21 (patch) | |
tree | 2f27a9ad9e76506fe72943b92422ff22110e1df2 /Zend/tests/traits | |
parent | 6b31413b13665cb0fda85aa3cb26b0f701a2d04e (diff) | |
download | php-git-b515bfbdfbea06307df53d725ea3aa3807504a21.tar.gz |
Improved traits implementation. Now to support __CLASS__ constant in traits php doesn't have to copy the complete compiled method, but can reuse the same code. The resolution of __CLASS__ constants in methods defined in traits are delayed till run-time. This approach also made possible to use __CLASS__ constant as default value for traits properties and method arguments.
Diffstat (limited to 'Zend/tests/traits')
-rw-r--r-- | Zend/tests/traits/bug55214.phpt | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/Zend/tests/traits/bug55214.phpt b/Zend/tests/traits/bug55214.phpt index 9f3cb4f0e4..890fc3792c 100644 --- a/Zend/tests/traits/bug55214.phpt +++ b/Zend/tests/traits/bug55214.phpt @@ -4,6 +4,9 @@ Bug #55214 (Use of __CLASS__ within trait returns trait name not class name) <?php trait ATrait { + public static $static_var = __CLASS__; + public $var = __CLASS__; + public static function get_class_name() { return __CLASS__; } @@ -11,6 +14,14 @@ trait ATrait { public function get_class_name_obj() { return __CLASS__; } + + public static function get_class_name2() { + return self::$static_var; + } + + public function get_class_name_obj2() { + return $this->var; + } } trait Indirect { @@ -27,22 +38,34 @@ class UsingIndirect { $r = SomeClass::get_class_name(); var_dump($r); +$r = SomeClass::get_class_name2(); +var_dump($r); $o = new SomeClass(); $r = $o->get_class_name_obj(); var_dump($r); +$r = $o->get_class_name_obj2(); +var_dump($r); $r = UsingIndirect::get_class_name(); var_dump($r); +$r = UsingIndirect::get_class_name2(); +var_dump($r); $o = new UsingIndirect(); $r = $o->get_class_name_obj(); var_dump($r); +$r = $o->get_class_name_obj2(); +var_dump($r); ?> --EXPECT-- string(9) "SomeClass" string(9) "SomeClass" +string(9) "SomeClass" +string(9) "SomeClass" +string(13) "UsingIndirect" +string(13) "UsingIndirect" string(13) "UsingIndirect" string(13) "UsingIndirect" |