本文整理匯總了Golang中github.com/stephens2424/php/ast.Echo函數的典型用法代碼示例。如果您正苦於以下問題:Golang Echo函數的具體用法?Golang Echo怎麽用?Golang Echo使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了Echo函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: TestIf
func TestIf(t *testing.T) {
testStr := `<?php
if (true)
echo "hello world";
else if (false)
echo "no hello world";`
p := NewParser()
p.disableScoping = true
a, _ := p.Parse("test.php", testStr)
tree := &ast.IfStmt{
Branches: []ast.IfBranch{
{
Condition: &ast.Literal{Type: ast.Boolean, Value: "true"},
Block: ast.Echo(&ast.Literal{Type: ast.String, Value: `"hello world"`}),
},
{
Condition: &ast.Literal{Type: ast.Boolean, Value: "false"},
Block: ast.Echo(&ast.Literal{Type: ast.String, Value: `"no hello world"`}),
},
},
}
if !assertEquals(a.Nodes[0], tree) {
t.Fatalf("If did not correctly parse")
}
}
示例2: TestIfBraces
func TestIfBraces(t *testing.T) {
testStr := `<?php
if (true) {
echo "hello world";
} else if (false) {
echo "no hello world";
}`
p := NewParser(testStr)
a, _ := p.Parse()
tree := &ast.IfStmt{
Condition: &ast.Literal{Type: ast.Boolean, Value: "true"},
TrueBranch: &ast.Block{
Statements: []ast.Statement{ast.Echo(&ast.Literal{Type: ast.String, Value: `"hello world"`})},
},
FalseBranch: &ast.IfStmt{
Condition: &ast.Literal{Type: ast.Boolean, Value: "false"},
TrueBranch: &ast.Block{
Statements: []ast.Statement{ast.Echo(&ast.Literal{Type: ast.String, Value: `"no hello world"`})},
},
FalseBranch: ast.Block{},
},
}
if !assertEquals(a[0], tree) {
t.Fatalf("If with braces did not correctly parse")
}
}
示例3: TestForeachLoop
func TestForeachLoop(t *testing.T) {
testStr := `<?
foreach ($arr as $key => $val) {
echo $key . $val;
} ?>`
p := NewParser(testStr)
a, _ := p.Parse()
if len(a) == 0 {
t.Fatalf("While loop did not correctly parse")
}
tree := &ast.ForeachStmt{
Source: ast.NewVariable("arr"),
Key: ast.NewVariable("key"),
Value: ast.NewVariable("val"),
LoopBlock: &ast.Block{
Statements: []ast.Statement{ast.Echo(ast.OperatorExpression{
Operator: ".",
Operand1: ast.NewVariable("key"),
Operand2: ast.NewVariable("val"),
Type: ast.String,
})},
},
}
if !assertEquals(a[0], tree) {
t.Fatalf("Foreach did not correctly parse")
}
}
示例4: TestForeachLoop
func TestForeachLoop(t *testing.T) {
testStr := `<?
foreach ($arr as $key => $val) {
echo $key . $val;
} ?>`
p := NewParser()
p.disableScoping = true
a, _ := p.Parse("test.php", testStr)
if len(a.Nodes) == 0 {
t.Fatalf("While loop did not correctly parse")
}
tree := &ast.ForeachStmt{
Source: ast.NewVariable("arr"),
Key: ast.NewVariable("key"),
Value: ast.NewVariable("val"),
LoopBlock: &ast.Block{
Statements: []ast.Statement{ast.Echo(ast.BinaryExpr{
Operator: ".",
Antecedent: ast.NewVariable("key"),
Subsequent: ast.NewVariable("val"),
Type: ast.String,
})},
},
}
if !assertEquals(a.Nodes[0], tree) {
t.Fatalf("Foreach did not correctly parse")
}
}
示例5: TestWhileLoopWithAssignment
func TestWhileLoopWithAssignment(t *testing.T) {
testStr := `<?
while ($var = mysql_assoc()) {
echo $var;
}`
p := NewParser(testStr)
p.Debug = true
p.MaxErrors = 0
a, _ := p.Parse()
if len(a) == 0 {
t.Fatalf("While loop did not correctly parse")
}
tree := &ast.WhileStmt{
Termination: ast.AssignmentExpression{
Assignee: ast.NewVariable("var"),
Value: &ast.FunctionCallExpression{
FunctionName: ast.Identifier{Value: "mysql_assoc"},
Arguments: make([]ast.Expression, 0),
},
Operator: "=",
},
LoopBlock: &ast.Block{
Statements: []ast.Statement{
ast.Echo(ast.NewVariable("var")),
},
},
}
if !assertEquals(a[0], tree) {
t.Fatalf("While loop with assignment did not correctly parse")
}
}
示例6: TestSwitch
func TestSwitch(t *testing.T) {
testStr := `<?
switch ($var) {
case 1:
echo "one";
case 2: {
echo "two";
}
default:
echo "def";
}`
p := NewParser()
p.disableScoping = true
a, _ := p.Parse("test.php", testStr)
if len(a.Nodes) == 0 {
t.Fatalf("Array lookup did not correctly parse")
}
tree := ast.SwitchStmt{
Expr: ast.NewVariable("var"),
Cases: []*ast.SwitchCase{
{
Expr: &ast.Literal{Type: ast.Float, Value: "1"},
Block: ast.Block{
Statements: []ast.Statement{
ast.Echo(&ast.Literal{Type: ast.String, Value: `"one"`}),
},
},
},
{
Expr: &ast.Literal{Type: ast.Float, Value: "2"},
Block: ast.Block{
Statements: []ast.Statement{
ast.Echo(&ast.Literal{Type: ast.String, Value: `"two"`}),
},
},
},
},
DefaultCase: &ast.Block{
Statements: []ast.Statement{
ast.Echo(&ast.Literal{Type: ast.String, Value: `"def"`}),
},
},
}
if !assertEquals(a.Nodes[0], tree) {
t.Fatalf("Switch did not correctly parse")
}
}
示例7: TestPHPParserHW
func TestPHPParserHW(t *testing.T) {
testStr := `hello world`
p := NewParser(testStr)
a, _ := p.Parse()
tree := ast.Echo(ast.Literal{Type: ast.String, Value: `hello world`})
if !assertEquals(a[0], tree) {
t.Fatalf("Hello world did not correctly parse")
}
}
示例8: TestScopeResolutionOperator
func TestScopeResolutionOperator(t *testing.T) {
testStr := `<?
MyClass::myfunc($var);
echo MyClass::myconst;
echo $var::myfunc();`
p := NewParser()
p.disableScoping = true
a, _ := p.Parse("test.php", testStr)
tree := []ast.Node{
ast.ExprStmt{
&ast.ClassExpr{
Receiver: &ast.Identifier{Value: "MyClass"},
Expr: &ast.FunctionCallExpr{
FunctionName: &ast.Identifier{Value: "myfunc"},
Arguments: []ast.Expr{
ast.NewVariable("var"),
},
},
},
},
ast.Echo(&ast.ClassExpr{
Receiver: &ast.Identifier{Value: "MyClass"},
Expr: ast.ConstantExpr{
ast.NewVariable("myconst"),
},
}),
ast.Echo(&ast.ClassExpr{
Receiver: ast.NewVariable("var"),
Expr: &ast.FunctionCallExpr{
FunctionName: &ast.Identifier{Value: "myfunc"},
Arguments: []ast.Expr{},
},
}),
}
if !assertEquals(a.Nodes[0], tree[0]) {
t.Fatalf("Scope resolution operator function call did not correctly parse")
}
if !assertEquals(a.Nodes[1], tree[1]) {
t.Fatalf("Scope resolution operator expression did not correctly parse")
}
if !assertEquals(a.Nodes[2], tree[2]) {
t.Fatalf("Scope resolution operator function call on identifier did not correctly parse")
}
}
示例9: TestPHPParserHW
func TestPHPParserHW(t *testing.T) {
testStr := `hello world`
p := NewParser()
p.disableScoping = true
a, _ := p.Parse("test.php", testStr)
tree := ast.Echo(ast.Literal{Type: ast.String, Value: `hello world`})
if !assertEquals(a.Nodes[0], tree) {
t.Fatalf("Hello world did not correctly parse")
}
}
示例10: parseNode
func (p *Parser) parseNode() ast.Node {
switch p.current.Typ {
case token.HTML:
return ast.Echo(ast.Literal{Type: ast.String, Value: p.current.Val})
case token.PHPBegin:
return nil
case token.PHPEnd:
return nil
}
return p.parseTopStmt()
}
示例11: TestPHPParserHWPHP
func TestPHPParserHWPHP(t *testing.T) {
testStr := `<?php
echo "hello world", "!";`
p := NewParser(testStr)
a, _ := p.Parse()
tree := ast.Echo(
&ast.Literal{Type: ast.String, Value: `"hello world"`},
&ast.Literal{Type: ast.String, Value: `"!"`},
)
if !assertEquals(a[0], tree) {
t.Fatalf("Hello world did not correctly parse")
}
}
示例12: TestFunction
func TestFunction(t *testing.T) {
testStr := `<?php
function TestFn($arg) {
echo $arg;
}
$var = TestFn("world", 0);`
p := NewParser()
p.disableScoping = true
a, _ := p.Parse("test.php", testStr)
tree := []ast.Node{
&ast.FunctionStmt{
FunctionDefinition: &ast.FunctionDefinition{
Name: "TestFn",
Arguments: []*ast.FunctionArgument{
{
Variable: ast.NewVariable("arg"),
},
},
},
Body: &ast.Block{
Statements: []ast.Statement{ast.Echo(ast.NewVariable("arg"))},
},
},
ast.ExprStmt{
ast.AssignmentExpr{
Assignee: ast.NewVariable("var"),
Value: &ast.FunctionCallExpr{
FunctionName: &ast.Identifier{Value: "TestFn"},
Arguments: []ast.Expr{
&ast.Literal{Type: ast.String, Value: `"world"`},
&ast.Literal{Type: ast.Float, Value: "0"},
},
},
Operator: "=",
},
},
}
if len(a.Nodes) != 2 {
t.Fatalf("Function did not correctly parse")
}
if !assertEquals(a.Nodes[0], tree[0]) {
t.Fatalf("Function did not correctly parse")
}
if !assertEquals(a.Nodes[1], tree[1]) {
t.Fatalf("Function assignment did not correctly parse")
}
}
示例13: TestComments
func TestComments(t *testing.T) {
testStr := `<?
// comment line
/*
block
*/
#line ?>html`
tree := []ast.Node{
ast.Echo(ast.Literal{Type: ast.String, Value: "html"}),
}
p := NewParser(testStr)
a, _ := p.Parse()
if !reflect.DeepEqual(a, tree) {
fmt.Printf("Found: %+v\n", a)
fmt.Printf("Expected: %+v\n", tree)
t.Fatalf("Literals did not correctly parse")
}
}
示例14: TestForLoop
func TestForLoop(t *testing.T) {
testStr := `<?
for ($i = 0; $i < 10; $i++) {
echo $i;
}`
p := NewParser()
p.disableScoping = true
p.Debug = true
p.MaxErrors = 0
a, _ := p.Parse("test.php", testStr)
if len(a.Nodes) == 0 {
t.Fatalf("For loop did not correctly parse")
}
tree := &ast.ForStmt{
Initialization: []ast.Expr{ast.AssignmentExpr{
Assignee: ast.NewVariable("i"),
Value: &ast.Literal{Type: ast.Float, Value: "0"},
Operator: "=",
}},
Termination: []ast.Expr{ast.BinaryExpr{
Antecedent: ast.NewVariable("i"),
Subsequent: &ast.Literal{Type: ast.Float, Value: "10"},
Operator: "<",
Type: ast.Boolean,
}},
Iteration: []ast.Expr{ast.UnaryCallExpr{
Operator: "++",
Operand: ast.NewVariable("i"),
Preceding: false,
}},
LoopBlock: &ast.Block{
Statements: []ast.Statement{
ast.Echo(ast.NewVariable("i")),
},
},
}
if !assertEquals(a.Nodes[0], tree) {
t.Fatalf("For did not correctly parse")
}
}
示例15: TestForLoop
func TestForLoop(t *testing.T) {
testStr := `<?
for ($i = 0; $i < 10; $i++) {
echo $i;
}`
p := NewParser(testStr)
p.Debug = true
p.MaxErrors = 0
a, _ := p.Parse()
if len(a) == 0 {
t.Fatalf("For loop did not correctly parse")
}
tree := &ast.ForStmt{
Initialization: []ast.Expression{ast.AssignmentExpression{
Assignee: ast.NewVariable("i"),
Value: &ast.Literal{Type: ast.Float, Value: "0"},
Operator: "=",
}},
Termination: []ast.Expression{ast.OperatorExpression{
Operand1: ast.NewVariable("i"),
Operand2: &ast.Literal{Type: ast.Float, Value: "10"},
Operator: "<",
Type: ast.Boolean,
}},
Iteration: []ast.Expression{ast.OperatorExpression{
Operator: "++",
Operand1: ast.NewVariable("i"),
Type: ast.Numeric,
}},
LoopBlock: &ast.Block{
Statements: []ast.Statement{
ast.Echo(ast.NewVariable("i")),
},
},
}
if !assertEquals(a[0], tree) {
t.Fatalf("For did not correctly parse")
}
}