PHP 101:变量与函数

时间:2012-12-09 17:56:45

标签: php performance

我正在创建一个全局文件来保存将在我的网站中重复使用的项目。这两行代码之间有什么区别?一个人比另一个“更好”吗?

此:

$logo = "img/mainlogo.jpg";

vs this:

function logo() {
   echo "img/mainlogo.jpg";
}

5 个答案:

答案 0 :(得分:4)

您应该在html和php中编码清晰,可读和拆分。绩效利润并不重要......

<?php
...
$logo = "img/mainlogo.jpg";
...
?>
...
<img src="<?= $logo ?>" alt="logo"> 
...

答案 1 :(得分:2)

在您发布的两个选项中,该功能是更好的选择。但是,说实话,这类事情完全是什么常数:

defined('MAIN_LOGO') || define('MAIN_LOGO','img/mainlogo.jpg');

假设您正在开发一个必须支持多种语言的网站,那么您可以简单地使用相同的技巧:

defined('CLIENT_LOCALE')  || define('CLIENT_LOCATE',$whereverYouGetThisFrom);
defined('MAIN_LOGO') || define('MAIN_LOGO','img/mainlogo_'.CLIENT_LOCALE.'.jpg');
//if language is EN, mainlogo_EN.jpg will be used, if lang is ES, mainlogo_ES.jpg, etc...

此外,一旦定义的常量不能重新定义(当然,线索在名称中)。另外:由于PHP仍然有大量的C-stuff在引擎盖下,并且你已经标记了这个问题performance,你可能会感兴趣的是常量很像C的宏,它比常规函数快得多调用,甚至是C ++内联函数(即使它们确实被编译为内联函数)。

无论如何,如果你想集中这些东西,或者考虑为你的项目创建几个ini文件,并将它们解析成某种全局对象

答案 2 :(得分:1)

功能很好。

我发现function logo()优于$logoecho并没有太多记忆,但$logo确实如此。即使function logo()采取了一些措施,它也将由PHP自己的垃圾收集器处理。您还可以使用这些函数来确保不会滥用分配的内存。

  1. memory_get_peak_usage();
  2. memory_get_usage();
  3. 说明:

      

    在使用函数结束时,PHP会清除它正在使用的内存,至少比不使用函数更有效。如果您正在使用递归代码或类似内存密集型的东西,请尝试将代码放入函数或方法中,在关闭函数/方法时,用于函数的内存将比循环中未设置的变量更有效地使用本身。

    来源: 7 tips to prevent PHP running out of memory

答案 3 :(得分:1)

函数的主要目的是避免代码重复并执行特定任务。基于该定义,使用函数仅返回值是一种糟糕的设计。

在这种情况下,我认为代码中的可读性比保存几个字节的内存要好。我们在2012年,优化很好,但这种微优化简直荒谬。我更喜欢分配一个变量,它很清楚并且做你期望的事情。

答案 4 :(得分:0)

$logo = "img/mainlogo.jpg";可以在不改变代码的情况下自然重新定义$logo="img/newmainlogo.jpg";,而函数必须在其第一个定义中自行修改。