请说明php中传值与传引用的区别.什么时候传值什么
传值,是把实参的值赋值给行参那么对行参的修改,不会影响实参的值传引用真正的以地址的方式传递参数传递以后,行参和实参都是同一个对象,只是他们名字不同而已对行参的修改将影响实参的值 所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。
php函数的参数赋值方式
1、传值赋值,例如$a=1,$b=$a等;
2、引用赋值,例如$a=&$b,即$a和$b在都指向了内存中的同一个存储变量值得地址;
3、引用计数传值,在php和js中的对象都是默认的传值方式都是引用计数传值,例子如下:
<?php
class Dog{
public $name="小花";
public $leg=4;
}
$a=new Dog;//此时,$a指向了内存中的一个地址(假设0XFFAD[1]),该地址又指向最终对象的值
$b=$a;//此时,$b和$a都指向了内存中的另一个地址(0XFFAD[2]),该地址又指向最终对象的值
var_dump($b->leg);//结果是int 4
$b=999;
var_dump($b);//结果是int 999;
var_dump($a);//此时的结果不是int 999,而是object(Dog)[1]
public 'name' => string '灏忚姳' (length=6) public 'leg' => int 4
由此可以看出对象的传值方式跟第二种引用传值是有点区别的。
在PHP中,函数的参数可以通过值传递或引用传递来进行赋值。值传递是指将参数的值复制一份传递给函数,在函数中对参数进行修改不会影响原始变量的值。
而引用传递是指将参数的内存地址传递给函数,函数中对参数进行修改会直接影响原始变量的值。在函数定义中,可以使用&符号来表示参数是引用传递。例如:function foo(&$bar) {} 表示$bar是引用传递的参数。在调用函数时,可以使用变量名或字面量来传递参数。例如:foo($x) 或 foo(5)。
php8.1协程语法
PHP 8.1 是 PHP 语言的一个主版本更新。
它包含了许多新功能,包括枚举、只读属性、First-class 可调用语法、纤程、交集类型和性能改进等。
php的协程是新引入的Fiber类的实例,该类的构造方法接受一个callable类型的参数。这个参数可以是匿名函数、函数变量或者实现了__invoke的对象。callable类型可以接收参数,该参数在调用Fiber实例的start方法时传入。
php的协程由start方法激活。激活后会进入协程绑定的callable的代码执行,直到遇到Fiber::suspend()挂起,该静态方法会将当前正在运行的协程(也就是代码所在callable绑定的协程)挂起。如果suspend没有参数,会向外部传递一个null值,如果有参数,会向外传递给激活或让它恢复执行的调用方。
还没有评论,来说两句吧...