【问题标题】:How variables and memory works in PHP变量和内存在 PHP 中的工作原理
【发布时间】:2013-10-17 02:33:50
【问题描述】:

您好,我有兴趣了解变量是如何存储在 php 中的。

假设我有两个变量

$p = 1 + 1
$b = $p.

php 是保存变量的结果还是保存运行它的过程? 为什么我想知道如果我在其中存储一个函数,它是存储返回值还是只是复制过程。

谢谢!

编辑:我认为最好澄清一下我在说什么。

说:

    function foo($something)
{

    for loop
        {
       echo 'Something';

       }

   return $something;
}


$b = foo(5);

echo $b;

从我遇到的情况来看,只需分配值即可执行该功能。当我 echo $b 时,它也会再次执行该函数。

【问题讨论】:

  • $b 将包含 2。只需将 $p 的值复制到其中。
  • 我知道 $b 将包含两个,但说 p 是一个更复杂的函数。它会再次运行该功能吗?
  • @Dahnny012 你能给我们举个例子吗?
  • 当然我在上课,但马上就学不好
  • 不,它实际上是值。调用时返回值的函数会将其值返回到变量中。该函数只会被调用一次并且它的返回值被存储。假设您执行$a = strlen("hello");,则strlen() 的返回值将存储在$a 中,然后您执行$b = $a;,将$a 的值复制到$b,而不是回顾并执行$b = strlen("hello");

标签: php memory variable-assignment


【解决方案1】:

所以你想知道如果你是这样分配的

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

$b = $a;

你会在内存中有重复的函数吗?

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

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

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

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

【讨论】:

    【解决方案2】:

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

    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-*"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 2016-02-05
      • 1970-01-01
      • 2014-05-26
      • 2010-10-19
      相关资源
      最近更新 更多