PHP不推荐使用:与其类同名的方法将不会是PHP的未来版本中的构造函数

Nir*_*dam 0 php mysql codeigniter

我在codeigniter中开发应用程序,在发送邮件白色注册时收到以下错误.

PHP不推荐使用:与其类同名的方法将不会是PHP的未来版本中的构造函数; emailcomm在第3行的/var/www/html/portal/application/libraries/emailcomm.php中有一个弃用的构造函数

我的库文件位于emailcomm.php下面

class emailcomm
{

    var $to;
    var $subject;
    var $message;
    var $from='From:';    

    function emailcomm()
    {
        $this->CI=&get_instance();   
        ini_set("SMTP","ssl://smtp.gmail.com");
            ini_set("smtp_port","465");

            $config['protocol'] = 'smtp';
            $config['smtp_host'] = 'smtp.gmail.com';
            $config['smtp_port'] = '465';
            $config['_smtp_auth']=TRUE;
            $config['smtp_user'] = 'contact-us@webtech.com';
            $config['smtp_pass'] = 'Web8*98*2015'; 
            $config['smtp_timeout'] = '60';
            $config['charset'] = 'utf-8';
            $config['wordwrap'] = TRUE;
            $config['mailtype'] = "html";

        $this->CI->load->library('email',$config); 

         $this->CI->email->initialize($config); 
    }
}
Run Code Online (Sandbox Code Playgroud)

最近升级服务器到php7.在升级它工作之前,现在它不工作.现在我正在检查上面显示错误的错误日志.我可以在这个代码中更改?谁能帮帮我吗 .谢谢

Dha*_*era 8

在以前的版本中PHP,如果PHP找不到__construct()给定类的函数,它将按类的名称搜索旧式构造函数,但现在旧样式构造函数已在DEPRECATEDPHP 7.0,并将在以后的版本中删除.您应该始终使用__construct()新代码.阅读php手册

   function __construct() {
      // copy your old constructor function code here
   }
Run Code Online (Sandbox Code Playgroud)


tee*_*eyo 6

您需要使用__construct与您的类同名的函数来代替:

class Emailcomm
{

var $to;
var $subject;
var $message;
var $from='From:';    

function __construct()
{
    $this->CI=&get_instance();   
    ini_set("SMTP","ssl://smtp.gmail.com");
        ini_set("smtp_port","465");

        $config['protocol'] = 'smtp';
        $config['smtp_host'] = 'smtp.gmail.com';
        $config['smtp_port'] = '465';
        $config['_smtp_auth']=TRUE;
        $config['smtp_user'] = 'contact-us@webtech.com';
        $config['smtp_pass'] = 'Web8*98*2015'; 
        $config['smtp_timeout'] = '60';
        $config['charset'] = 'utf-8';
        $config['wordwrap'] = TRUE;
        $config['mailtype'] = "html";

    $this->CI->load->library('email',$config); 

     $this->CI->email->initialize($config); 
}
}
Run Code Online (Sandbox Code Playgroud)

仅出于编码标准,请使用 CamelCase 作为以大写字母开头的类名。

还有一件事,恕我直言,您可能需要使用DotEnv库来处理您的配置,因为将其写在代码中有点混乱。

  • 它是一个构造函数,我的意思是你不需要调用该函数,只需`new Emailcomm()`会自动执行构造函数中的代码(`__construct`) (2认同)

小智 6

您可以使用以下命令重命名emailcomm()函数__construct()

function __construct()
Run Code Online (Sandbox Code Playgroud)

代替

function emailcomm()
Run Code Online (Sandbox Code Playgroud)

或者您可以error_reporting在配置文件中使用以下内容:

error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
Run Code Online (Sandbox Code Playgroud)