Правильный способ организации малых функций в PHP - PullRequest
1 голос
/ 18 апреля 2020

У меня есть куча небольших утилит PHP функций, которые я сделал для решения различных проблем со сценариями в соответствии с моей простотой. Такие функции, как UUID () и trackUserActivity () et c. Есть тонны этих функций, которые растут каждый день.

Скажем, у меня есть около 50 различных маленьких функций. И получил около 100 различных сценариев для моего приложения. Иногда эти 100 сценариев должны вызывать 3 или даже 5 из этих функций, а иногда они просто вызывают одну функцию из 50.

Я хочу знать, как вы, ребята-эксперты, организовываете такую ​​кучу функций? Либо вы помещаете все свои функции в отдельную папку с каждой функцией в отдельный файл и включаете их по отдельности, либо создаете один класс и добавляете в него все эти функции и включаете этот класс, вызывающий функции с созданием объекта?

Я не думаю, что было бы неплохо создать класс из 50 функций и включить этот класс даже для вызова одной функции. Но я хотел быть уверен.

Я нашел этот вопрос на Организация функций малых утилит , но это особенно относится к Java и, похоже, не подходит к ситуации PHP.

Я искал другие сайты StackExchange, где мог задать этот вопрос, но не смог найти лучшего места для управления кодом. Я проверил https://sqa.stackexchange.com/ и https://pm.stackexchange.com/, но ни один из них не кажется подходящим для такого вопроса.

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Функция spl_autoload_register () - удобный способ упорядочить вещи. Вы можете использовать его для загрузки в методы класса stati c в соответствии с требованиями, поместив его в файл 'init. php' , который требуется в начале каждого скрипта. Вот пример с классом Ha sh, который содержит методы stati c для создания солей и хэшей:

<?php
  require_once('init.php');
  $salt = Hash::salt(32); 
  $pw   = Hash::make($_POST['password'], $salt);
?>

с классами init. php и /Hash.php файлы выглядят, например, следующим образом:

init. php:

<?php
  spl_autoload_register(function($class) {
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/' . $class . '.php';
  });
?>

Ха sh. 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() находит соответствующий класс на основе функции, которую вы предоставляете в качестве аргумента, когда она встречает экземпляр или использование метода stati c впервые в вашем коде.

Вы можете использовать это в своих интересах, группируя связанные функции как методы stati c. Например, мой каталог 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

, который содержит, среди прочего, методы stati c, связанные друг с другом. Они загружаются только в том случае, если Php встречает свое имя где-либо в любом из моих сценариев, в которые включен файл init. php.

0 голосов
/ 19 апреля 2020

ответ compuphys действительно помог мне. Для тех, кто уже использует composer файл Autoload.php, вам нужно зарегистрировать свою функцию spl вместо анонимного вызова, как показано ниже

function myAutoLoader($className)
{
    $file = __dir__.'/classes/'.$className'.php';
    if(file_exists($file))
    {
         include_once($file);
    }
}

spl_autoload_register('myAutoLoader');
...