从php源码看print和echo的不同

print和echo是php中打印常用到的两个函数,从php源码去看这两个函数的实现以发现他们的区别。

Print的实现

void zend_do_print(znode *result,const znode *arg TSRMLS_DC) { zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);

opline->result.op_type = IS_TMP_VAR; opline->result.u.var = get_temporary_variable(CG(active_op_array)); opline->opcode = ZEND_PRINT; opline->op1 = *arg; SET_UNUSED(opline->op2); *result = opline->result; }

  Echo的实现

void zend_do_echo(const znode *arg TSRMLS_DC) { zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);

opline->opcode = ZEND_ECHO; opline->op1 = *arg; SET_UNUSED(opline->op2); }

 

Echo处理除了指定opcode以外,还将echo的参数传递给op1,这里并没有设置opcode的result结果字段。 从源码看出print和echo的区别来,print有返回值,而echo没有,如果尝试将echo的值赋值给某个变量或者传递给函数都会出现语法错误。