Доступ к переменной из одной функции в другую функцию - PullRequest
0 голосов
/ 06 марта 2019

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

У меня есть страница с именем function.php и объявлена ​​переменная глобально.

Это мой код

<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
include 'Config.php';

/**
 *
 *
 */
class function
{
    public $insert = array();

    public function store()
    {

        $db = new Config();

        $insert = array(
            'date' => mysqli_real_escape_string($db->connection, $_POST['Date']) ,
            'Tov' => mysqli_real_escape_string($db->connection, $_POST['Tov']) ,
            'Name' => mysqli_real_escape_string($db->connection, $_POST['Name']) ,
            'rh_first' => mysqli_real_escape_string($db->connection, $_POST['rh_first']) ,
            'se_second' => mysqli_real_escape_string($db->connection, $_POST['se_second']) ,
            'pk_third' => mysqli_real_escape_string($db->connection, $_POST['pk_third'])
        );
        return $insert;
    }

    public function Send()
    {
        //Load Composer's autoloader
        require 'vendor/autoload.php';

        $mail = new PHPMailer(); // Passing `true` enables exceptions
        //Server settings
        $mail->SMTPDebug = 0; // Enable verbose debug output
        $mail->isSMTP(); // Set mailer to use SMTP
        $mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
        $mail->SMTPAuth = true; // Enable SMTP authentication
        $mail->Username = 'xxxxx@gmail.com'; // SMTP username
        $mail->Password = 'yyyy'; // SMTP password
        $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
        $mail->Port = 587; // TCP port to connect to


        if ($this->insert['rh_first'] == "P") {
            //Recipients
            $mail->setFrom('xxx@gmail.com', 'xxx');
            $mail->addAddress('xvb@gmail.com', 'xvb');
            //content
            $mail->isHTML(true); // Set email format to HTML
            $mail->Subject = 'Test';
            $mail->Body = 'Test email';
        }
        //Recipients
        $mail->setFrom('xxx@gmail.com', 'xxx');
        $mail->addAddress('yyyya@gmail.com', 'yyyya');

        // $mail->addCC('asdfg@gmail.com');
        //Attachments
        $mail->addAttachment('lobbyq.png', 'sample.png'); // Add attachments
        // Optional name
        //Content
        $mail->isHTML(true); // Set email format to HTML
        $mail->Subject = 'Test2';
        $mail->Body = 'Test2 messagwe';

        if (!$mail->send()) {;
            return "Message not sent" . $mail->ErrorInfo;
        } else {
            return "email send";
        }
    }
}

Приведенный выше код содержит функцию для хранения иотправить письмо через phpmailer

В базе данных (в хранилище функций ()) есть шесть полей, где последние три являются переключателями.

Когда я попытался запустить код, выдается сообщение об ошибке Undefined index 'rh_first', поскольку я не инициализировал его в global. Но я сделал как $insert = array(); глобально.

Пожалуйста, предложите мне лучший способ получить доступ к ключу переменной массива в другую функцию того же класса.

Ответы [ 3 ]

2 голосов
/ 06 марта 2019

Для этой функции необходимо установить значение $this->insert:

public function store()
{
    $db = new Config();

    $insert = array(
        'date' => mysqli_real_escape_string($db->connection, $_POST['Date']) ,
        'Tov' => mysqli_real_escape_string($db->connection, $_POST['Tov']) ,
        'Name' => mysqli_real_escape_string($db->connection, $_POST['Name']) ,
        'rh_first' => mysqli_real_escape_string($db->connection, $_POST['rh_first']) ,
        'se_second' => mysqli_real_escape_string($db->connection, $_POST['se_second']) ,
        'pk_third' => mysqli_real_escape_string($db->connection, $_POST['pk_third'])
    );

    $this->insert = $insert;

    return $insert;
}

Обратите внимание на новую строку: $this->insert = $insert;?
Это установит свойство вашего класса равным значению массива $insert.

Кроме того, я оставил тот факт, что он возвращает значение $insert, потому что я не знаю, как выглядит остальная часть вашего кода, однако я думаю, что эта функция может просто возвращать void ...

0 голосов
/ 06 марта 2019

Вы можете получить доступ к массиву, используя $this->insert, поскольку он объявлен глобально.

Чтобы получить ключ и значение, используйте:

foreach ($this->insert as $key => value) {
    echo $value; // prints the values of insert
    echo $key;   // prints the keys of insert
}
0 голосов
/ 06 марта 2019

Вы определили не глобальную переменную, а переменную класса. И если вы хотите получить к нему доступ внутри класса, вы должны использовать $this->insert вместо $insert, поскольку второй будет переменная в области действия.

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

Наконец, вы должны поместить автозагрузчик на самый внешний уровень, сразу после операторов use.

...