看看PHP这两种调用方式有何区别?

查看:119
本文介绍了看看PHP这两种调用方式有何区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

最后两个调用方式有何区别?

<?php
$a = 1;
function func($a)
{
    echo $a;
    $a = 100;
}

func($a); //1
echo $a; //1

class A
{
    public $a = 10;
}

$obj = new A();
func($obj->a); //10
echo $obj->a; //10

解决方案

  1. echo1:虽然调用了方法,但是方法内在赋值前echo的,所以输出的就是最上面赋值的1;

    echo2:输出`$a`,调用过`func()`,但是传递的参数是普通变量所以只是值传递,执行过方法后并不更改他的值;    

  2. echo1:调用了func(),传的参数是A对象中的属性a,$obj->a为10,而方法执行时echo在赋值前,所以输出的是10;

    echo2:虽然`$obj`是一个对象,但是传递的参数还是一个普通变量而已,所以还是值传递;所以和上面的echo2原理相同;

  3. 我想楼主一定想看到一个输出为100的,那你可以尝试调用方法func($obj),传递参数为对象$obj,然后在func()方法中为$obj->a赋值,这样第二次echo输出的就是100了,原因是在php中,对象作为参数传递都是引用传递,所谓引用传递就是指向同一个指针,所以执行完func()$obj->a为100
    php值传递和引用传递

这篇关于看看PHP这两种调用方式有何区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆