亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 180 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號