为什么PHP不允许在类中但在函数外部?

时间:2017-02-28 22:38:36

标签: php

有没有理由认为这被认为是有效的PHP:

<?php

class someClass {
    function someFunction() {
?> <?php
    }
}

...但这会产生语法错误:

<?php

class someClass {
?> <?php
    function someFunction() {
    }
}

第二个例子给出的语法错误是:

Parse error: parse error, expecting `"function (T_FUNCTION)"' in foo.php on line 4

换句话说,PHP解析器可以在函数内部使用PHP开始/结束标记,但不在类中但在函数外部,我想知道原因。

2 个答案:

答案 0 :(得分:2)

?> <?phpecho ' ';相当*,这在那里毫无意义。

*如果您对如何等效产生了好奇,则为:

生成操作码
<?php
echo 'foo';
?>bar<?php
echo 'baz';

是:

line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   2     0  E >   ECHO                                                     'foo'
   3     1        ECHO                                                     'bar'
   4     2        ECHO                                                     'baz'
         3      > RETURN                                                   1

答案 1 :(得分:0)

根据我对php的理解,当你使用结束标记时,这告诉php开始输出缓冲(准备输出数据)。在定义类时,您要定义一组变量和/或函数,输出数据。但是,当您在类中定义函数时,您基本上是在说 - 当调用此函数时,在该函数中执行x任务,其中可能包括输出数据。