php - 多种功能和页面以及存储它们以提高性能的适当方法
问题描述
我在一个名为的文件中有太多的自制函数,其中近 30 个是functions.php
这样排序的
<?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(...){......}
并使用在 page1 中包含一次include("page1_functions.php");
我看到的每种方法的缺点是
all-in-one as (functions.php):包含不必要的功能,可能会以某种方式影响性能
每个函数的页面(f1.php,f2.php,...):包含太多可能会以某种方式影响性能
每个页面的功能页面(page1_functions.php,page2_functions.php):功能可能会重复多次并占用更多空间,并且可能会以某种方式影响性能
所以我无法决定最好的方法是什么
解决方案
这是一个太大的话题,无法真正涵盖,但是。
这是一个简单的例子,说你有这些功能:
function f1(...){......}
function f2(...){......}
function f3(...){......}
function f4(...){......}
function f5(...){......}
你总是需要前 3 个而不是第二个。
//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
它与类文件在同一个文件夹中,它应该能够使用以下方式加载它们:
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 调用类文件(它是函数和其他东西的集合)时按需加载它们。
推荐阅读
- magento - 如何安全地进行从 magento 到 shopify 的手动迁移?
- java - Weblogic 无法在静态字段中注入 @PersistenceContext
- spring-boot - IllegalStateException:Bean 名称“设计”的 BindingResult 和普通目标对象都不能用作请求属性
- javascript - 如何比较两个数组的索引?
- mysql - 大约 4Gb 的 MySQL 转储需要多长时间?
- apache-kafka - 更新 Kafka 日志保留默认值是否需要停机?
- jenkins - 从 api.nuget.org 下载“BouncyCastle.1.8.6.1”时出错
- javascript - OnClick 按钮在 React Js 中没有做任何事情
- scrapy - Scrapy CrawlSpider - start_urls 的错误返回
- java - 寻找具有可关闭项目使用跟踪的轻量级 Java 缓存