PHP echo 在源代码中实现在哪里?
Where is PHP echo implemented in the source?
您可以通过搜索例如PHPAPI(stream_copy_to_stream) 并在 ext/standard/streamsfuncs.c.
中找到实现
如何为像 echo 这样的语言结构做到这一点?
我发现它与 Zend/zend_language_parser.y 中的 T_ECHO 相关联,但无法从那里追踪它是如何工作的。
Zend Engine 在哪里实现回显功能?
给出这个示例程序:
<?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”。
您可以通过搜索例如PHPAPI(stream_copy_to_stream) 并在 ext/standard/streamsfuncs.c.
中找到实现如何为像 echo 这样的语言结构做到这一点?
我发现它与 Zend/zend_language_parser.y 中的 T_ECHO 相关联,但无法从那里追踪它是如何工作的。
Zend Engine 在哪里实现回显功能?
给出这个示例程序:
<?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”。