【问题标题】:Where is PHP echo implemented in the source?PHP echo 在源代码中实现在哪里?
【发布时间】:2021-04-22 17:23:31
【问题描述】:

您可以通过搜索来查找内置函数,例如PHPAPI(stream_copy_to_stream) 并在 ext/standard/streamsfuncs.c 中找到实现。

对于像 echo 这样的语言结构,如何做到这一点?

我发现它与 Zend/zend_language_parser.y 中的 T_ECHO 相关联,但无法从那里追踪它是如何工作的。

Zend Engine 在哪里实现回显功能?

【问题讨论】:

    标签: echo implementation php-internals language-construct


    【解决方案1】:

    给定这个示例程序:

    <?php echo 'Hello world!';
    

    我们可以得到程序编译成这样的操作码:

    $ phpdbg7.4 -p /tmp/hello.php
    function name: (null)
    L1-2 {main}() /tmp/hello.php - 0x7fef35ea1000 + 3 ops
     L1    #0     EXT_STMT                                                                              
     L1    #1     ECHO                    "Hello world!"                                                
     L2    #2     RETURN<-1>              1
    

    如您所见,回显是使用单独的 VM 指令处理的:ZEND_ECHO。每个操作码的处理程序在Zend/zend_vm_def.h 中定义。搜索“ZEND_ECHO”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 2015-10-07
      相关资源
      最近更新 更多