Подсказка типа для ресурса потока (stream_socket_client) - PullRequest
0 голосов
/ 06 января 2020

Я ищу решение для использования подсказок типа в потоке ресурсов stream_socket_client().

Исследуя эту топи c, я наткнулся на этот вопрос и его принятый ответ , что как-то подразумевает, что то, что я ищу, не может быть сделано без отхода от stream_socket_client(), потому что stream_socket_client() возвращает resource типа stream. И хотя resource является примитивным типом, он не поддерживается хинтингом скалярных типов в PHP.

Однако, возможно, кто-то знает, как это сделать, или получил альтернативу stream_socket_client(), которая работает с хинтингом типов.

Ниже вы найдете класс Email, разбитый до самого базового c кода, с которым можно работать, и чтобы дать вам представление о том, как я использую stream_socket_client().

class Email {

    private /* WHAT TYPE HINT TO PUT HERE? */ $_connection = null;

    public function sendEmail() {
        // set email server details
        $smtpServer = // set your smtp server address
        $smtpPort = // set your smtp server port;

        // context options for ssl connection
        $contextOptions = array(
            'ssl' => array(
                'verify_peer' => true,
                'verify_peer_name' => true
            )
        );

        $context = stream_context_create($contextOptions);

        // establish connection
        $this->_connection = stream_socket_client("tcp://$smtpServer:$smtpPort", $error_no, $error_str, 20, STREAM_CLIENT_CONNECT, $context);

        // enable TLS
        stream_socket_enable_crypto($this->_connection, true, STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT)

        /* in the real world, you'd wanna make sure the connection has been established, 
           enabling crypto succeeded and afterwards send the email by writing smtp commands to the stream */
    }
}

Я использую PHP 7.4, на случай, если это имеет значение.

...