Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中变量和内存的工作原理_Php_Memory_Variable Assignment - Fatal编程技术网

PHP中变量和内存的工作原理

PHP中变量和内存的工作原理,php,memory,variable-assignment,Php,Memory,Variable Assignment,您好,我很想了解php中变量的存储方式 假设我有两个变量 $p = 1 + 1 $b = $p. php是保存变量的结果还是保存过程以运行它? 我想知道的是我是否在其中存储了一个函数,它是存储返回值还是只是复制过程 谢谢大家! 编辑:我想我最好澄清一下我在说什么 说: 根据我遇到的情况,赋值执行函数。当我回显$b时,它也会再次执行该函数。那么,如果这样赋值,您想知道什么 $a = function($arg){ echo($arg); } $b = $a; 你的内存中有功能的副本吗

您好,我很想了解php中变量的存储方式

假设我有两个变量

$p = 1 + 1
$b = $p.
php是保存变量的结果还是保存过程以运行它? 我想知道的是我是否在其中存储了一个函数,它是存储返回值还是只是复制过程

谢谢大家!

编辑:我想我最好澄清一下我在说什么

说:


根据我遇到的情况,赋值执行函数。当我回显$b时,它也会再次执行该函数。

那么,如果这样赋值,您想知道什么

$a = function($arg){
    echo($arg);
}

$b = $a;
你的内存中有功能的副本吗

哎呀,我错了。PHP使用写时复制机制,这使得
$b
$a
使用相同的内存缓冲区,除非修改这些变量中的任何一个

另一种可能是你想知道当你做这样的事情时会发生什么

$a = 5; $b = 15;
$c = sin($b)*sqrt($a);

然后,只有这些计算的值将存储在内存中,仅此而已。

我希望我确实理解了您真正想问的问题

PHP(和任何其他语言一样)在变量中存储值。不多不少。所以问题是:什么是值?:-)

在您给出的示例中,值
(int)2
同时存储在
$p
$b

您可以将函数存储在变量中,甚至还有更多的可能性。这更多的是您如何编写代码的问题,而不是php如何存储此类内容的问题:

$func = create_function('$a','return sprintf("*-%s-*", $a);');
echo $func('hello'); // will return "*-hello-*"
还可以通过变量调用永久存在的函数:

function echo_a($a) { return sprintf("*-%s-*", $a); }    
$func = 'echo_a';
echo call_user_func($func, 'hello'); // will return "*-hello-*"

$b
将包含2个。只需将
$p
的值复制到其中。我知道$b将包含两个,但假设p是一个更复杂的函数。它会再次运行该函数吗?@Dahnny012你能给我们举个例子吗?当然我在课堂上,但我会马上处理它的。它实际上是值。调用时返回值的函数将其值返回到变量中。函数将只被调用一次,并存储其返回值。假设你是
$a=strlen(“你好”)
strlen()的返回值将存储在
$a
中,然后执行
$b=$a
$a
的值复制到
$b
中,而不是回顾并执行
$b=strlen(“hello”)
function echo_a($a) { return sprintf("*-%s-*", $a); }    
$func = 'echo_a';
echo call_user_func($func, 'hello'); // will return "*-hello-*"