- 在 CompilerBase 中添加了对 Expr_Match 节点的解析支持 - 修改 parseTernary 方法参数类型为 Node\Expr\Ternary - 添加了 parseMatch 方法用于处理 Match 表达式 - 在 Preprocessor 中添加对 Stmt_Enum 和 Stmt_EnumCase 的预处理支持 - 扩展 prepareClass 方法以支持枚举类型的处理 - 在 Translator 中添加对 Stmt_Enum 的翻译支持 - 修改 parseClass 方法以正确处理枚举定义 - 添加测试文件 closure_016.phpt 和 closure_017.phpt 验证闭包功能 - 添加枚举示例文件 enum1.php 展示枚举用法pull/1/head
parent
bd06dcf0a5
commit
46e15ca247
6 changed files with 115 additions and 6 deletions
@ -0,0 +1,26 @@ |
|||||||
|
<?php |
||||||
|
interface Colorful { |
||||||
|
public function color(): string; |
||||||
|
} |
||||||
|
|
||||||
|
enum Suit implements Colorful { |
||||||
|
case Hearts; |
||||||
|
case Diamonds; |
||||||
|
case Clubs; |
||||||
|
case Spades; |
||||||
|
|
||||||
|
public function color(): string { |
||||||
|
return match ($this) { |
||||||
|
self::Hearts, self::Diamonds => 'Red', |
||||||
|
self::Clubs, self::Spades => 'Black', |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function main() |
||||||
|
{ |
||||||
|
echo Suit::Hearts->color() . "\n"; |
||||||
|
echo Suit::Diamonds->color() . "\n"; |
||||||
|
echo Suit::Clubs->color() . "\n"; |
||||||
|
echo Suit::Spades->color() . "\n"; |
||||||
|
} |
||||||
@ -0,0 +1,54 @@ |
|||||||
|
--TEST-- |
||||||
|
Closure 016: closures and is_callable() |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
class Foo { |
||||||
|
function __invoke() { |
||||||
|
echo "Hello World!\n"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function foo() { |
||||||
|
return function() { |
||||||
|
echo "Hello World!\n"; |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
$test = new Foo; |
||||||
|
var_dump(is_callable($test, true, $name)); |
||||||
|
echo $name."\n"; |
||||||
|
var_dump(is_callable($test, false, $name)); |
||||||
|
echo $name."\n"; |
||||||
|
var_dump(is_callable(array($test,"__invoke"), true, $name)); |
||||||
|
echo $name."\n"; |
||||||
|
var_dump(is_callable(array($test,"__invoke"), false, $name)); |
||||||
|
echo $name."\n"; |
||||||
|
$test = foo(); |
||||||
|
var_dump(is_callable($test, true, $name)); |
||||||
|
echo $name."\n"; |
||||||
|
var_dump(is_callable($test, false, $name)); |
||||||
|
echo $name."\n"; |
||||||
|
var_dump(is_callable(array($test,"__invoke"), true, $name)); |
||||||
|
echo $name."\n"; |
||||||
|
var_dump(is_callable(array($test,"__invoke"), false, $name)); |
||||||
|
echo $name."\n"; |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
bool(true) |
||||||
|
Foo::__invoke |
||||||
|
bool(true) |
||||||
|
Foo::__invoke |
||||||
|
bool(true) |
||||||
|
Foo::__invoke |
||||||
|
bool(true) |
||||||
|
Foo::__invoke |
||||||
|
bool(true) |
||||||
|
Closure::__invoke |
||||||
|
bool(true) |
||||||
|
Closure::__invoke |
||||||
|
bool(true) |
||||||
|
Closure::__invoke |
||||||
|
bool(true) |
||||||
|
Closure::__invoke |
||||||
@ -0,0 +1,10 @@ |
|||||||
|
--TEST-- |
||||||
|
Closure 017: Trying to destroy an active lambda function |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
$a = function(&$a) { $a = 1; }; |
||||||
|
$a($a); |
||||||
|
echo "DONE\n"; |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
DONE |
||||||
Loading…
Reference in new issue