Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Passaggio di variabili

  1. #1

    Passaggio di variabili

    Salve. Sto da qualche giorno studiando PHP su un testo un po ostico per un totale principiante...o almeno per me!!! Avrei bisogno che qualcuno mi spiegasse un passaggio all'interno di due script che nell'insieme servono per spedire una mail. Se questa sezione non è pensata per questioni didattiche spostate o cancellate senza indugio.

    Nel primo script è contenuta una classe, con i suoi metodi e proprietà (class.SimpleMail.php):

    Codice PHP:
    <?php
    class SimpleMail
    {
        
    // class properties- parts of a message
        
    private $toAddress;
        private 
    $CCAddress;
        private 
    $BCCAddress;
        private 
    $fromAddress;
        private 
    $subject;
        private 
    $sendText;
        private 
    $textBody;
        private 
    $sendHTML;
        private 
    $HTMLBody;

        
    // initialize the message parts with blank or default values
        
    public function __construct() {
            
    $this->toAddress '';
            
    $this->CCAddress '';
            
    $this->BCCAddress '';
            
    $this->fromAddress '';
            
    $this->subject '';
            
    $this->sendText true;
            
    $this->textBody '';
            
    $this->sendHTML false;
            
    $this->HTMLBody '';
        }

        
    // set TO address
        
    public function setToAddress($value) {
            
    $this->toAddress $value;
            
        }

        
    // set CC address
        
    public function setCCAddress($value) {
            
    $this->CCAddress $value;
        }

        
    // set BCC address
        
    public function setBCCAddress($value) {
            
    $this->BCCAddress $value;
        }

        
    // set FROM address
        
    public function setFromAddress($value) {
            
    $this->fromAddress $value;
        }

        
    // set message subject
        
    public function setSubject($value) {
            
    $this->subject $value;
        }

        
    // set whether to send email as text
        
    public function setSendText($value) {
            
    $this->sendText $value;
        }

        
    // set text email message body
        
    public function setTextBody($value) {
            
    $this->sendText true;
            
    $this->textBody $value;
        }

        
    // set whether to send email as HTML
        
    public function setSendHTML($value) {
            
    $this->sendHTML $value;
        }

        
    // set text HTML message body
        
    public function setHTMLBody($value) {
            
    $this->sendHTML true;
            
    $this->HTMLBody $value;
        }

        
    // send email
        
    public function send($to null$subject null$message null,
            
    $headers null) {
            
    $success false;
            if (!
    is_null($to) && !is_null($subject) && !is_null($message)) {
                
    $success mail($to$subject$message$headers);
                return 
    $success;

            
    //.............
           // .............


    ?>
    Il secondo lo utilizza per la spedizione vera e propria (mail_text.php):

    Codice PHP:
    <?php
    require 'class.SimpleMail.php';

    $message = new SimpleMail();

    $message->setToAddress('esempio@dominio.com');
    $message->setSubject('Testing text email');
    $message->setTextBody('This is a test using plain text email!');

    if (
    $message->send()) {
        echo 
    'Text email sent successfully!';
    } else {
        echo 
    'Sending of text email failed!';
    }
    ?>
    Ora, da quello che ho potuto capire da questi pochi giorni di studio la cosa funziona così:

    Faccio partire mail_text.php. Le tre istanze $message della classe SimpleMail, tramite le relative funzioni in SimpleMail.php, scrivono i valori che passo (indirizzo, soggetto, testo) nelle variabili private (incapsulate) $toAddress, $subject e $sendText di SimpleMail.php. Fin qua ci sono arrivato!!!

    Ora però, come $to, $subject e $message arrivano alla funzione send? Ovvero, come $toAddress, $subject e $sendText, dove sono scritti indirizzo, soggetto e testo, "diventano" $to, $subject e $message?

    Spero di essere stato chiaro.

    Grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    In realtà la classe è scritta un po' a tirar via, ma probabilemnte perchè è a scopo didattico, quindi chi la scritta ci teneva a farti vedere certe cose piuttosto che creare una classe realmente utile. Comunque il metodo

    Codice PHP:
    public function send($to null$subject null$message null$headers null) {
            
    $success false;
            if (!
    is_null($to) && !is_null($subject) && !is_null($message)) {
                
    $success mail($to$subject$message$headers);
                return 
    $success;

            
    //.............
           // ............. 
    ha come parametri i vari elementi necessari alla funzione mail di PHP. Quindi se gli vengono passati i tre parametri to, subject e message li utilizza nell'invio. Poi non fai vedere il resto della funzione, che di certo nel ramo else o al difuori dell'if che se verificato produce la fine della funzione con il return nel ramo then, ovvero in assenza di parametri passati alla funzione send va certamente ad utilizzare in mail i dati incapsulati nell'oggetto e opportunamente settati tramite le funzioni di accesso set.... Quindi sempre nella funzione send dovresti avere la chiamata a mail($this->toAddress,$this->subject....

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    oibò...
    Dunque, lo script finisce così:

    Codice PHP:
    } else {
                
    $headers = array();
                if (!empty(
    $this->fromAddress)) {
                    
    $headers[] = 'From: ' $this->fromAddress;
                }

                if (!empty(
    $this->CCAddress)) {
                    
    $headers[] = 'CC: ' $this->CCAddress;
                }

                if (!empty(
    $this->BCCAddress)) {
                    
    $headers[] = 'BCC: ' $this->BCCAddress;
                }

                if (
    $this->sendText && !$this->sendHTML) {
                    
    $message $this->textBody;
                } elseif (!
    $this->sendText && $this->sendHTML) {
                    
    $headers[] = 'MIME-Version: 1.0';
                    
    $headers[] = 'Content-type: text/html; charset="iso-8859-1"';
                    
    $headers[] = 'Content-Transfer-Encoding: 7bit';
                    
    $message $this->HTMLBody;
                } elseif (
    $this->sendText && $this->sendHTML) {
                    
    $boundary '==MP_Bound_xyccr948x==';
                    
    $headers[] = 'MIME-Version: 1.0';
                    
    $headers[] = 'Content-type: multipart/alternative; boundary="' .
                        
    $boundary '"';

                    
    $message 'This is a Multipart Message in MIME format.' "\n";
                    
    $message .= '--' $boundary "\n";
                    
    $message .= 'Content-type: text/plain; charset="iso-8859-1"' 
                        
    "\n";
                    
    $message .= 'Content-Transfer-Encoding: 7bit' "\n\n";
                    
    $message .= $this->textBody  "\n";
                    
    $message .= '--' $boundary "\n";

                    
    $message .= 'Content-type: text/html; charset="iso-8859-1"' "\n";
                    
    $message .= 'Content-Transfer-Encoding: 7bit' "\n\n";
                    
    $message .= $this->HTMLBody  "\n";
                    
    $message .= '--' $boundary '--';
                }
                
    $success mail($this->toAddress$this->subject$message,
                    
    join("\r\n"$headers));
                return 
    $success;
            }
        }
    }
    ?> 
    solo ora mi accorgo che quello che mi aspettavo (più o meno) è qui...cioe il passaggio di variabili: mail($this->toAddress, $this->subject, $message, join("\r\n", $headers))...come giustamente mi hai fatto notare tu.

    Devo studiarmi meglio quel $message e il join finale ma ci siamo.

    Ma allora dichiarare nella funzione send di avere bisogno dei parametri $to ecc a cosa serve? Serve forse se io faccio una chiamata diretta da qualche parte del tipo $message->send('esempio@dominio.com','Testing text email','This is a test using plain text email!')?

    Intanto grazie mille per la risposta e pazienza Grino

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.