在名为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");
每种方法的缺点是
多合一为(functions.php):包含不必要的功能,可能会在某种程度上影响性能
每个功能的页(f1.php,f2.php等...):包含过多内容可能会影响性能
每页的功能页面(page1_functions.php,page2_functions.php):功能可能会重复多次并占用更多空间,并可能以某种方式影响性能
所以我不能决定最好的方法是什么
答案 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();
以此类推。 FooBiz
与FooBar
相同,只是它没有f4()
,而拥有Foo
和f5()
的全部。 FooBar
具有Foo
和f4()
的全部。您可以根据需要对其进行尽可能多的分层,甚至可以覆盖“父”类等中的方法...
还有很多,但这是基础。另外,由于这些是类中的“方法”,因此您可以使用相同的方法名称创建完全不同的类,而无需命名冲突。
然后,使用自动加载功能甚至不需要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调用时按需加载类文件(它是函数和其他内容的集合)。