class person{
public $name;
public $age;
public $height;
}
$p1=new person;
$p1->name="小明";
function text2($p){
$p1->name="最哈哈";
echo $p1->name;
}
function text1($p){
$p1->name="哈哈";
echo $p1->name."<br/>";
echo $p->name."<br/>";
text2($p);
}
text1($p1);
以上代码输出结果为:
哈哈
小明
最哈哈我不懂得是函数中调用类时,内存中栈区和堆区地址和值的变化情况,比如基础变量的值一般是放在栈区的,类的值一般是放在堆区的,我所理解的,函数中调用类应该是先调用栈区类的地址,然后根据栈区类的地址去堆区找值,然后直接变更堆区类中对象的值,如果是的话,不管用函数调用几次这个类,这个类也只有堆区的一个值,不会在内存中同时存在两个一样的类,可是echo $p1->name;echo $p->name证明中间在调用的时候进行了一次类复制,这个地方不懂了。。$p->为什么还是小明,这个小明的值的地址在哪里?
public $name;
public $age;
public $height;
}
$p1=new person;
$p1->name="小明";
function text2($p){
$p1->name="最哈哈";
echo $p1->name;
}
function text1($p){
$p1->name="哈哈";
echo $p1->name."<br/>";
echo $p->name."<br/>";
text2($p);
}
text1($p1);
以上代码输出结果为:
哈哈
小明
最哈哈我不懂得是函数中调用类时,内存中栈区和堆区地址和值的变化情况,比如基础变量的值一般是放在栈区的,类的值一般是放在堆区的,我所理解的,函数中调用类应该是先调用栈区类的地址,然后根据栈区类的地址去堆区找值,然后直接变更堆区类中对象的值,如果是的话,不管用函数调用几次这个类,这个类也只有堆区的一个值,不会在内存中同时存在两个一样的类,可是echo $p1->name;echo $p->name证明中间在调用的时候进行了一次类复制,这个地方不懂了。。$p->为什么还是小明,这个小明的值的地址在哪里?
echo $p->name."<br/>";
这两句显示,引用并修改完值,居然出现不一样的对象值!那就说明对象在函数中修改值不只是单纯的寻址修改。
$p1->name="哈哈";你这怎么能访问到全局变量, global都没有。
PHP不同与java等,它对变量作用域要求严格,函数体内的变量如果希望是全局变量,就必须global $p1;
java就不同了,如果没有局部变量覆盖它,那么$p1默认就是全局变量喽。PHP是门简单浅显的语言,不需要你去了解什么stack