在 PHP 中组织小函数的正确方法
Proper way to organize Small Functions in PHP
我有一堆小实用程序 PHP
函数,我根据自己的喜好制作了这些函数来解决不同的脚本问题。 UUID() 和 trackUserActivity() 等函数。这些函数数不胜数,而且每天都在增加。
假设我有大约 50 个不同的小函数。并为我的应用程序获得了大约 100 个不同的脚本。有时这 100 个脚本必须调用其中的 3 个甚至 5 个函数,有时它们只调用 50 个函数中的一个。
想请问各位高手是怎么组织这么一堆函数的?要么将所有函数放在一个单独的文件夹中,每个函数放入一个单独的文件中并单独包含,要么创建一个 class 并将所有这些函数添加到其中并包含 class 调用具有对象实例化的函数?
我认为制作一个包含 50 个函数的 class 并包含 class 不是个好主意,即使是为了调用单个函数。但我想确定一下。
我在 Organize small utilities functions 发现了这个问题,但这特别适用于 Java,它似乎不适合 PHP 的情况。
我搜索了可以提出这个问题的其他 StackExchange 站点,但找不到更好的代码管理位置。我检查了 https://sqa.stackexchange.com/ and https://pm.stackexchange.com/,但其中 none 似乎适合此类问题。
spl_autoload_register() 功能是让事情井井有条的便捷方式。您可以使用它来根据需要加载静态 class 方法,方法是将它放在 'init.php' 文件中,您需要在每个脚本的顶部使用它。这是一个哈希 class 的示例,其中包含创建盐和哈希的静态方法:
<?php
require_once('init.php');
$salt = Hash::salt(32);
$pw = Hash::make($_POST['password'], $salt);
?>
使用 init.php 和 classes/Hash.php 文件查找,例如,像下面这样:
init.php:
<?php
spl_autoload_register(function($class) {
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/' . $class . '.php';
});
?>
Hash.php:
<?php
class Hash {
public static function make($string, $salt = '') {
return hash('sha256', $string . $salt);
}
public static function salt($length) {
return base64_encode(openssl_random_pseudo_bytes($length));
}
}
?>
当 spl_autoload_register()
函数在您的代码中首次遇到实例化或使用静态方法时,它会根据您作为参数提供的函数找到合适的 class。
您可以通过将相关函数分组为静态方法来利用这一优势。例如,我的特定项目的 classes 目录有:
Config.php Cookie.php DB.php
Err.php FormatError.php Hash.php
Input.php MismatchError.php Redirect.php
RequiredFieldError.php Session.php StringLengthError.php
Token.php UniqueItemError.php User.php
Validate.php
其中包含彼此相关的静态方法等。只有当 Php 在我的包含 init.php 文件的任何脚本中的任何地方遇到它们的名字时,它们才会被加载。
compuphys 的回答确实帮助了我。对于那些已经在使用 composer
的 Autoload.php
文件的人,您必须注册您的 spl 函数,而不是像下面那样匿名调用
function myAutoLoader($className)
{
$file = __dir__.'/classes/'.$className'.php';
if(file_exists($file))
{
include_once($file);
}
}
spl_autoload_register('myAutoLoader');
我有一堆小实用程序 PHP
函数,我根据自己的喜好制作了这些函数来解决不同的脚本问题。 UUID() 和 trackUserActivity() 等函数。这些函数数不胜数,而且每天都在增加。
假设我有大约 50 个不同的小函数。并为我的应用程序获得了大约 100 个不同的脚本。有时这 100 个脚本必须调用其中的 3 个甚至 5 个函数,有时它们只调用 50 个函数中的一个。
想请问各位高手是怎么组织这么一堆函数的?要么将所有函数放在一个单独的文件夹中,每个函数放入一个单独的文件中并单独包含,要么创建一个 class 并将所有这些函数添加到其中并包含 class 调用具有对象实例化的函数?
我认为制作一个包含 50 个函数的 class 并包含 class 不是个好主意,即使是为了调用单个函数。但我想确定一下。
我在 Organize small utilities functions 发现了这个问题,但这特别适用于 Java,它似乎不适合 PHP 的情况。
我搜索了可以提出这个问题的其他 StackExchange 站点,但找不到更好的代码管理位置。我检查了 https://sqa.stackexchange.com/ and https://pm.stackexchange.com/,但其中 none 似乎适合此类问题。
spl_autoload_register() 功能是让事情井井有条的便捷方式。您可以使用它来根据需要加载静态 class 方法,方法是将它放在 'init.php' 文件中,您需要在每个脚本的顶部使用它。这是一个哈希 class 的示例,其中包含创建盐和哈希的静态方法:
<?php
require_once('init.php');
$salt = Hash::salt(32);
$pw = Hash::make($_POST['password'], $salt);
?>
使用 init.php 和 classes/Hash.php 文件查找,例如,像下面这样:
init.php:
<?php
spl_autoload_register(function($class) {
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/' . $class . '.php';
});
?>
Hash.php:
<?php
class Hash {
public static function make($string, $salt = '') {
return hash('sha256', $string . $salt);
}
public static function salt($length) {
return base64_encode(openssl_random_pseudo_bytes($length));
}
}
?>
当 spl_autoload_register()
函数在您的代码中首次遇到实例化或使用静态方法时,它会根据您作为参数提供的函数找到合适的 class。
您可以通过将相关函数分组为静态方法来利用这一优势。例如,我的特定项目的 classes 目录有:
Config.php Cookie.php DB.php
Err.php FormatError.php Hash.php
Input.php MismatchError.php Redirect.php
RequiredFieldError.php Session.php StringLengthError.php
Token.php UniqueItemError.php User.php
Validate.php
其中包含彼此相关的静态方法等。只有当 Php 在我的包含 init.php 文件的任何脚本中的任何地方遇到它们的名字时,它们才会被加载。
compuphys 的回答确实帮助了我。对于那些已经在使用 composer
的 Autoload.php
文件的人,您必须注册您的 spl 函数,而不是像下面那样匿名调用
function myAutoLoader($className)
{
$file = __dir__.'/classes/'.$className'.php';
if(file_exists($file))
{
include_once($file);
}
}
spl_autoload_register('myAutoLoader');