从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的值赋值给某个变量或者传递给函数都会出现语法错误。

发表评论

电子邮件地址不会被公开。 必填项已用*标注