php-src/Zend/tests/traits/property008.phpt
Stefan Marr 3dc9f0abe6 Fixed inconsistent and broken handling of private properties in traits.
# The handling of private properties in classes is now consistent with private properties in traits.
# Perviously, privates could cause strict warnings, are were not properly merged into the class when
# the parent class had a private property of the same name. Now, we introduce it without notice,
# since it is a new and independent property, just like in normal classes.
# This problem was diagnosed while working on Bug #60536.
2011-12-17 14:26:39 +00:00

62 lines
1.2 KiB
PHP

--TEST--
Handling of private fields with traits needs to have same semantics as with normal inheritance.
--FILE--
<?php
error_reporting(E_ALL | E_STRICT);
class BaseWithPropA {
private $hello = 0;
}
// This is how privates are handled in normal inheritance
class SubclassClassicInheritance extends BaseWithPropA {
private $hello = 0;
}
// And here, we need to make sure, that the traits behave the same
trait AHelloProperty {
private $hello = 0;
}
class BaseWithTPropB {
use AHelloProperty;
}
class SubclassA extends BaseWithPropA {
use AHelloProperty;
}
class SubclassB extends BaseWithTPropB {
use AHelloProperty;
}
$classic = new SubclassClassicInheritance;
var_dump($classic);
$a = new SubclassA;
var_dump($a);
$b = new SubclassB;
var_dump($b);
?>
--EXPECTF--
object(SubclassClassicInheritance)#1 (2) {
["hello":"SubclassClassicInheritance":private]=>
int(0)
["hello":"BaseWithPropA":private]=>
int(0)
}
object(SubclassA)#2 (2) {
["hello":"SubclassA":private]=>
int(0)
["hello":"BaseWithPropA":private]=>
int(0)
}
object(SubclassB)#3 (2) {
["hello":"SubclassB":private]=>
int(0)
["hello":"BaseWithTPropB":private]=>
int(0)
}