summaryrefslogtreecommitdiff
path: root/Zend/tests/traits
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2012-01-17 08:09:13 +0000
committerDmitry Stogov <dmitry@php.net>2012-01-17 08:09:13 +0000
commitb515bfbdfbea06307df53d725ea3aa3807504a21 (patch)
tree2f27a9ad9e76506fe72943b92422ff22110e1df2 /Zend/tests/traits
parent6b31413b13665cb0fda85aa3cb26b0f701a2d04e (diff)
downloadphp-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.phpt23
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"