Browse Source
Added __TRAIT__ magic constant [TRAITS] [DOC]
Added __TRAIT__ magic constant [TRAITS] [DOC]
# __TRAIT__ behaves like __CLASS__ more or less but is constraint to traits. # Since traits are not types, there are not many valid use cases, and trying # to use __TRAIT__ to make traits more like classes is discouraged.pull/7/head
7 changed files with 1878 additions and 1694 deletions
-
36Zend/tests/traits/trait_constant_001.phpt
-
27Zend/tests/traits/trait_constant_002.phpt
-
2Zend/zend_language_parser.y
-
3374Zend/zend_language_scanner.c
-
20Zend/zend_language_scanner.l
-
2Zend/zend_language_scanner_defs.h
-
111ext/tokenizer/tests/token_get_all_variation12.phpt
@ -0,0 +1,36 @@ |
|||||
|
--TEST-- |
||||
|
__TRAIT__: Basics, a constant denoiting the trait of definition. |
||||
|
--FILE-- |
||||
|
<?php |
||||
|
|
||||
|
trait TestTrait { |
||||
|
public static function test() { |
||||
|
return __TRAIT__; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class Direct { |
||||
|
use TestTrait; |
||||
|
} |
||||
|
|
||||
|
class IndirectInheritance extends Direct { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
trait TestTraitIndirect { |
||||
|
use TestTrait; |
||||
|
} |
||||
|
|
||||
|
class Indirect { |
||||
|
use TestTraitIndirect; |
||||
|
} |
||||
|
|
||||
|
echo Direct::test()."\n"; |
||||
|
echo IndirectInheritance::test()."\n"; |
||||
|
echo Indirect::test()."\n"; |
||||
|
|
||||
|
?> |
||||
|
--EXPECT-- |
||||
|
TestTrait |
||||
|
TestTrait |
||||
|
TestTrait |
||||
@ -0,0 +1,27 @@ |
|||||
|
--TEST-- |
||||
|
__TRAIT__: Use outside of traits. |
||||
|
--FILE-- |
||||
|
<?php |
||||
|
|
||||
|
class MyClass { |
||||
|
static function test() { |
||||
|
return __TRAIT__; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function someFun() { |
||||
|
return __TRAIT__; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
$t = __TRAIT__; |
||||
|
var_dump($t); |
||||
|
$t = MyClass::test(); |
||||
|
var_dump($t); |
||||
|
$t = someFun(); |
||||
|
var_dump($t); |
||||
|
?> |
||||
|
--EXPECT-- |
||||
|
string(0) "" |
||||
|
string(0) "" |
||||
|
string(0) "" |
||||
3374
Zend/zend_language_scanner.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue