【问题标题】:Unidentified variable after being declared声明后未识别的变量
【发布时间】:2013-06-28 04:44:16
【问题描述】:

我收到了这个错误

Fatal error: Non-static method Connect::connect() cannot be called statically in D:\xampp\htdocs\Panel\core\init.php on line 63

这是我的代码

<?php
class Connect{
    public $db_host = "localhost";
    public $db_user = "root";
    public $db_pass = "";
    public $db_name = "panel";

    public function connect(){
            if(mysql_connect($db_host, $db_user, $db_pass)){
                    if(mysql_select_db($db_name)){
                            return true;
                    }else{
                            die(mysql_error());
                    }
            }else{
                    die(mysql_error());
            }
            return false;
    }
}
?>

如何使函数静态化? 我尝试将“静态”添加到函数范围,但出现另一个错误

谢谢:)

【问题讨论】:

  • 感受范围,年轻的天行者,范围就在你身边。不要屈服于全球范围内的黑暗面。
  • 在编写新代码时不应该使用mysql_query。这是一个已从 PHP 中删除的已弃用接口。
  • 另外,declare 是针对常量的,它们已经足够像全局变量了,你应该暂时忘记它们。这不是您要寻找的范围。

标签: php mysql


【解决方案1】:

你必须将变量作为参数传递给函数

function connect($db_host, $db_user, $db_pass,$db_name)

并将这个函数称为

connect($db_host, $db_user, $db_pass,$db_name);

编辑

通过查看您的 pastebin,您正在调用类变量,您必须使用 $this-&gt;variale_name 来访问它们。

<?php
class Connect{
    public $db_host = "localhost";
    public $db_user = "root";
    public $db_pass = "";
    public $db_name = "panel";

    public function connect(){
            if(mysql_connect($this->db_host, $this->db_user, $this->db_pass)){
                    if(mysql_select_db($this->db_name)){
                            return true;
                    }else{
                            die(mysql_error());
                    }
            }else{
                    die(mysql_error());
            }
            return false;
    }
}
?>

PDO

<?php
class Connect{
    private $db_host = "localhost";
    private $db_user = "root";
    private $db_pass = "";
    private $db_name = "panel";
    private $dbh = false;
    public function connect(){
        if ($this->dbh === false)
            $this->dbh = new PDO('mysql:host='.$this->db_host.';dbname='.$this->db_name, $this->db_user, $this->db_pass);
        return $this->dbh;
    }
}
?>

【讨论】:

  • 致命错误:无法在第 63 行的 D:\xampp\htdocs\Panel\core\init.php 中静态调用非静态方法 Connect::connect()。代码:pastebin.com/KcjnMYLX
  • @Isaac 展示你如何使用这个类。 Connect::connect() 不是使用该类的方法。您的问题甚至没有显示课程。
  • @Chris 我把它编辑成了一个类。查看代码。我不太擅长面向对象的 PHP :P
  • @Isaac 不要把它变成两三个问题,我们不是为你编写代码 - 学习。我会帮忙的。回到你问题中的代码,使用这个正确的答案来解决你原来的问题,从那里开始。一次掌握一件事。
  • @Chris 好的。让我给10分钟。 :)
【解决方案2】:

你必须像这样在函数内部声明变量

<?php

function connect(){

    $db_host = "localhost";
    $db_user = "root";
    $db_pass = "";
    $db_name = "panel";

    if(mysql_connect($db_host, $db_user, $db_pass)){
        if(mysql_select_db($db_name)){

        }else{
            die(mysql_error());
        }
    }else{
        die(mysql_error());
    }
}
?>

或者你可以像这样在函数中传递参数

$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "panel";

connect($db_host,$db_user, $db_pass, $db_name);

function connect($db_host,$db_user, $db_pass, $db_name){


        if(mysql_connect($db_host, $db_user, $db_pass)){
            if(mysql_select_db($db_name)){

            }else{
                die(mysql_error());
            }
        }else{
            die(mysql_error());
        }
    }
    ?>

【讨论】:

  • +1 的答案很好,但你能在 PDO 中工作吗?很容易更改答案以显示它是如何完成的。
【解决方案3】:
$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "panel";

这些变量是全局变量,无法在函数 connect 中访问。如果您必须使用这些全局变量,请使用关键字 global 。然后这些变量将在函数中可用。

 function connect(){
        global $db_host, $db_user, $db_pass, $db_name ;
        if(mysql_connect($db_host, $db_user, $db_pass)){
            if(mysql_select_db($db_name)){

            }else{
                die(mysql_error());
            }
        }else{
            die(mysql_error());
        }
    }

【讨论】:

  • 全局变量总是不好的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多