为了账号安全,请及时绑定邮箱和手机立即绑定

在 PHP (Laravel) 中更改单例邮件程序会影响其他用户请求吗?

在 PHP (Laravel) 中更改单例邮件程序会影响其他用户请求吗?

PHP
忽然笑 2021-08-28 15:34:41
Laravel 5.3 Mailer 类根据这篇文章配置为单例https://laravel-news.com/allowing-users-to-send-email-with-their-own-smtp-settings-in-laravel让我们假设请求中的用户将 Mail::setSwiftMailer 设置为不同的服务器,以便通过他的邮件服务器/帐户发送邮件。$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl');$transport->setUsername('your_gmail_username');$transport->setPassword('your_gmail_password');$gmail = new Swift_Mailer($transport);// Set the mailer as gmailMail::setSwiftMailer($gmail);这会影响其他用户吗?据我了解,通常的单例特征不适用于 PHP http://blog.gordon-oheim.biz/2011-01-17-Why-Singletons-have-no-use-in-PHP/在一个 Request 中创建的 Singleton 正是为了那个请求而存在的。在另一个同时完成的请求中创建的单例仍然是一个完全不同的实例。并且会占用自己的内存。这些实例彼此之间没有链接。它们是完全隔离的,因为 PHP 是一种无共享架构。您没有一个唯一的实例,而是并行进程中有许多类似的实例。那么更改单例函数的邮件服务器是否会更改其他用户的邮件服务器?更改 Laravel 配置会影响其他用户吗?我假设至少在这里答案是肯定的。Config::set('mail', ['driver' => $mail->driver, 'host' => $mail->host, 'port' => $mail->port, ...]);
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

看看最简单的 Singleton 实现:


class Singleton {

    protected static $_instance = null;


    public static function newInstance()

    {

        if (null === self::$_instance)

        {

            self::$_instance = new self;

        }

        return self::$_instance;

    }


    // disallowed

    protected function __clone() {}


    // disallowed

    protected function __construct() {}

}

它确保在这个单一的请求中只存在一个这样的实例。


所以你的 Swift_SmtpTransport 是一个单例:


$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl');

这意味着Swift_SmtpTransport 的每个实例都是您刚刚创建的实例(针对此请求)(这并不意味着您不能更改属性 - 也许该实例在创建后具有要调用的 getter 和 setter)。


现在让我们看看你已经发现了什么:


在一个 Request 中创建的 Singleton 正是为了那个请求而存在的。


所以它是每个请求,请求也不会影响其他请求。所以不,我不认为其他用户会受到影响。即使您根据单个请求更改配置也不会。


有关更多信息,请阅读:对 PHP 脚本的同步请求- 对于每个请求,一个新的独立进程被分叉,与其他进程没有任何关系。唯一的问题是他们可能会互相阻止。


Laravel 的文档说:


在运行时设置的配置值仅针对当前请求设置,不会被带到后续请求中。


查看完整回答
反对 回复 2021-08-28
?
炎炎设计

TA贡献1808条经验 获得超4个赞

在传统的 php 中,每个请求都是一个不同的实例。从一个实例到另一个(从一个请求到另一个)继承(变量明智)没有任何东西。

在同一个实例中,邮件程序在其生命周期内是一个单身人士


查看完整回答
反对 回复 2021-08-28
  • 2 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信