каков чистый способ потребовать внешнюю библиотеку внутри класса PHP?

#php #oop

#php #ооп

Вопрос:

Я хотел бы использовать эту библиотеку хэшей для хэширования паролей пользователей в моем классе аутентификации —

https://github.com/ircmaxell/password_compat

Итак, я могу сделать: $hash = password_hash($password, PASSWORD_BCRYPT); в php < 5.5

Было бы чистым включить этот файл функций в конструктор? Или я должен просто включить ее вне класса? В чем было бы преимущество того или другого?

 require_once 'lib/password.php';

class Auth {}
  

или

 class Auth
{
    function __construct()
    {
        require_once 'lib/password.php';
    }
}
  

Я считаю, что помещение ее в конструктор сделало бы ее более похожей на зависимость для класса. И другие смогут лучше понять?

Комментарии:

1. Включите ее за пределы вашего собственного класса, как вы сделали в своем первом примере..

2. @Hardy могу я спросить, почему?

3. Это самый простой способ сделать это, и вы можете увидеть все требуемые классы поверх ваших файлов. Это зависит от ваших потребностей. Если у вас есть некоторые условные включения, то вам следует сделать это в вашем другом классе.

4. Кстати, password.php содержит не класс, а набор процедурных функций. В противном случае я бы использовал для расширения моей аутентификации, верно?

Ответ №1:

Я бы рекомендовал вам использовать автозагрузку в вашем проекте. http://www.php.net/manual/en/language.oop5.autoload.php

Это самая быстрая и «чистая» вещь, которую можно сделать. Все фреймворки php используют ее.

Комментарии:

1. Я использую автозагрузку для самого класса.

2. Отлично! Используйте это и для библиотеки!:) Вы могли бы немного переписать код библиотеки, чтобы добавить 2 класса вместо пространств имен (я просто не вижу в этом смысла), и вы могли бы использовать автозагрузку и для них, поскольку у вас уже была одна настройка.

3. Или, может быть, я переписываю ее и использую для расширения класса аутентификации? будет ли это более логичным таким образом?

4. Я не думаю, что это логично. Авторизация никоим образом не является дочерним элементом хэш-ПАРОЛЕЙ, а хэш-ПАРОЛИ не должны быть дочерними элементами авторизации. Я бы создал класс со статическими методами и вызывал бы следующим образом: Passwords::HashPassword();

Ответ №2:

Я бы сделал первый. Таким образом, это требуется, даже если экземпляр объекта не создан, на случай, если вы будете использовать его без создания экземпляра объекта. Тогда это делает класс Auth бессмысленным, если вы не планируете добавлять больше.

Комментарии:

1. Класс Auth содержит намного больше, я воспроизвел здесь урезанную версию.