1

这听起来像是一个愚蠢的问题,但是将变量分配给函数是否意味着它只调用该函数一次,并且可以无限次重复使用而无需对函数进行额外调用,还是仍然多次调用该函数?

这是:

$variable = function_name();
echo $variable;
echo $variable;

与此相同:

echo function_name();
echo function_name();

我知道这两种情况最终都会显示相同的信息,但我很好奇该数据是否被一次获取并重复使用多次,或者是否在每次回显时都被获取。

那么将变量分配给函数是否意味着function_name();只工作一次,而变量只是回收数据以供以后使用,还是function_name();实际上工作两次?

分配变量或每次需要使用时直接调用函数是更好的做法吗?

4

4 回答 4

2

一个函数应该总是返回一些值,例如,如果你有一个这样的函数。

function foo() {
    return 'hello world';
}

如果你调用它并将它分配给一个变量然后

/*
* in the below example the function will be called once 
* and the function's return value will be assigned to $a variable
* now $a will contain value 'hello world';
*/
$a = foo();

如果您尝试打印变量$a,它将仅打印它包含的值,而不会再次调用该函数,因为$a现在包含“hello world”;

通过多次回显 $a 变量。

echo $a;
echo $a;
echo $a;

将简单地打印该值hello world3 次而不调用该函数 3 次。

但是,例如,当您多次调用该函数时。

$a = foo();
$a = foo();

现在来回答你的问题。

这将导致函数被多次调用。以及被函数调用返回的前一个值覆盖的值。将变量分配给函数意味着 function_name(); 也是如此。只做一次工作,变量只是回收数据以供以后使用,或者 function_name(); 实际工作两次?

我希望我已经详细解释了这一点。

Is it better practice to assign variables or just directly call the function each time it needs to be used?

好吧,这取决于上下文以及您要使用的函数,底线是,总是尝试从函数返回一些值,例如。

a)如果该函数用于获取一些值并对其进行格式化,则应将其作为数组、字符串或任何数据类型返回。

b)如果该函数旨在执行某些操作而不是任何获取,那么您可以返回布尔值,例如return true|false指示操作是否成功。

于 2012-07-24T19:52:13.060 回答
2

它只会运行一次

<?php
function test(){
    return time();
}

$a = test();

echo $a . "\n";
sleep(1);
echo $a . "\n";

larikov@mb:~# php -f t.php 
1343159819
1343159819
于 2012-07-24T19:58:18.823 回答
1

该函数将在您调用它时运行多次。在第二个示例中,函数将运行两次,如果函数在两种情况下返回完全相同的代码,则效率很低。缓存会有所帮助,但它可能会被抛出缓存,缓存可能已满。最好将它放在第一个示例中的变量中,然后根据需要输出。

于 2012-07-24T19:51:40.517 回答
1

编程语言通常是非常直接的。即使使用像 PHP 这样的高级语言,您也可以命令计算机/处理器执行该操作。

因此,如果您发出命令echo "day";,它将打印出字符串day - 就像写的一样。就像说的那样:非常直截了当。

那么调用函数呢:

printf("%s", 'day');

也打印出字符串。也确实将字符串格式化'day'printf. 所以函数被调用。

分配变量或每次需要使用时直接调用函数是更好的做法吗?

这是一个相当哲学的问题。从技术上讲,两者可以相同。如果两者相同,更明智的做法是调用一次函数,将返回值分配给一个值并存储起来以备后用。

存储到变量的好处是,通常情况下,无论如何都需要这样做(即使不是显式地存储到变量,而是存储到内存),对于程序员来说,这是最有用的想法:一个变量,便宜。拿着。使您的软件快速运行——即使您认为:呃,至少这是一个额外的变量,它会减慢速度。事实是:变量通常会加快您的开发速度。此外,PHP 具有写时复制功能,这意味着实际上大多数时候都不会复制数据。

于 2012-07-25T02:52:22.807 回答