多种功能和页面以及用于存储性能的正确方法

时间:2019-03-07 06:46:25

标签: php performance

在名为functions.php的文件中,我有太多的函数,其中有将近30个函数按这样的顺序排列

<?php
function f1(...){......}
function f2(...){......}
function f3(...){......}
function f4(...){......}
          ------
function f30(...){......}

我的网站上有10个页面,include("functions.php");

但是对于每个页面,它使用的功能数量有限,例如

page1 = f1(), f2(), f3(), f4(), f5()
page2 = f1(), f3(), f5(), f7(), f9()
page3 = f1(), f2(), f4(), f8(), f9()
page4 = f1(), f6()
         ---------
page10 = f1(), f2(), f3(), f14(), f22(), f24(), f29()

所以我认为每个页面都包含全部30个功能是对它的过度使用,所以我想到了这一点

1-每个功能的页面分别包含在每个功能中,例如

page1

include("f1.php");
include("f2.php");
include("f3.php");
include("f4.php");
include("f5.php");

2-一个页面包含每个页面的所有功能,例如

page1_functions.php

function f1(...){......}
function f2(...){......}
function f3(...){......}
function f4(...){......}
function f5(...){......}

,并使用include("page1_functions.php");

在page1中包含一次

每种方法的缺点是

多合一为(functions.php):包含不必要的功能,可能会在某种程度上影响性能

每个功能的

(f1.php,f2.php等...):包含过多内容可能会影响性能

每页的功能页面(page1_functions.php,page2_functions.php):功能可能会重复多次并占用更多空间,并可能以某种方式影响性能

所以我不能决定最好的方法是什么

1 个答案:

答案 0 :(得分:0)

这是一个太大的话题,无法真正涵盖。

下面是一个简单的示例,说明您具有以下功能:

function f1(...){......}
function f2(...){......}
function f3(...){......}

function f4(...){......}

function f5(...){......}

您总是需要前三个,而不是第二个。

 //Foo.php
 class Foo{
     function f1(...){......}
     function f2(...){......}
     function f3(...){......}
 }

 //FooBar.php
 require_once 'Foo.php'
 class FooBar extends Foo{
     function f4(...){......}
 }

 //FooBiz.php
 require_once 'Foo.php'
 class FooBiz extends Foo{
     function f5(...){......}
 }

现在,如果我使用Foo

 require_once 'Foo.php';
 $Foo = new Foo;
 $Foo->f1();

现在,如果我使用FooBar

 require_once 'FooBar.php'; //which has its own require_once 'Foo.php';
 $FooBar = new FooBar;
 $FooBar->f1(); //from extends foo
 $FooBar->f4();

以此类推。 FooBizFooBar相同,只是它没有f4(),而拥有Foof5()的全部。 FooBar具有Foof4()的全部。您可以根据需要对其进行尽可能多的分层,甚至可以覆盖“父”类等中的方法...

还有很多,但这是基础。另外,由于这些是类中的“方法”,因此您可以使用相同的方法名称创建完全不同的类,而无需命名冲突。

然后,使用自动加载功能甚至不需要require_once语句。

这是我制造的一种自动加载器,事实上的标准是使用Composer,它是自动加载器,但是您可以试用一下它,并了解它们的工作原理。

https://github.com/ArtisticPhoenix/Autoloader

有一些命名约定和要考虑的内容,但是,如果您不使用名称空间,只要Autoloader.php与类文件位于同一文件夹中,它应该可以使用以下方式加载它们: / p>

require_once 'Autoloader.php';

$Autoloader = \evo\autoloader\Autoloader::getInstance();

// require_once 'Foo.php'; - no longer needed, nor is the ones in the class files
$foo = new Foo;

其背后的想法是在使用new调用时按需加载类文件(它是函数和其他内容的集合)。