【问题标题】:Class variable is null when I try to access it in PHP当我尝试在 PHP 中访问它时,类变量为空
【发布时间】:2014-09-24 22:19:49
【问题描述】:

好的,这是我的主要代码:

require "checkpassword.php";
require "mysqllogininfo.php";

# Validate password
if (!validatePassword($_GET["password"])) {
    return;
}

# Get variables
$uuid = $_GET["uuid"];
if (preg_match('/^\d+$/',$_GET["rank"]) == false) {
    die("Rank must be integer");
}
$rank = $_GET["rank"];

# Validate UUID
if ($uuid == null) {
    die ("Supply uuid");
}

# Validate rank
if ($rank == null) {
    die ("Supply rank");
} else if ($rank < 0 || $rank > 6) {
    die ("Invalid rank");
}

# Load MySQL login info
$loginInfo = new MySQLLoginInfo("/var/uniqraft/mysqllogin");

# Debug
# All this displays as just 3 empty lines, so I assume the variables are null <--
echo($loginInfo->host);
echo "<br>";
echo($loginInfo->username);
echo "<br>";
echo($loginInfo->password);
echo "<br>";
echo($loginInfo->dbname);

# Create connection
$connection = mysqli_connect($loginInfo->host, $loginInfo->username, $loginInfo->password, $loginInfo->dbname);

# Check connection
if (mysqli_connect_errno()) {
    die ("Failed to connect to MySQL: " . mysqli_connect_error());
}

如您所见,我正在尝试访问 MySQLLoginInfo 对象中的变量 host、username、password 和 dbname,但它们都显示为 null。

但是,我不认为它们实际上是空的。因为,如果我们看一下 MySQLLoginInfo 对象,我们可以看到我添加了一些调试 echo() 来显示变量,我们看到它们实际上不为空。

class MySQLLoginInfo
{
    # Properties
    public $host;
    public $username;
    public $password;
    public $dbname;

    # Constructor
    function __construct($infoLocation) {
        $handle = fopen($infoLocation, "r", false) or die("Couldn't open $infoLocation");

        $i = 0;
        # Loop through lines
        while (($line = fgets($handle)) !== false) {
            if ($i === 0)
                $host = $line;
            else if ($i === 1)
                $username = $line;
            else if ($i === 2)
                $password = $line;
            else if ($i === 3)
                $dbname = $line;
            else
                break; # Read at max 4 lines
            $i++;
        }
        if ($i < 3) {
            die($infoLocation . " doesn't contain at least 4 lines");
        }

        # These all display the proper values, indicating that they are not null <--
        echo $host;
        echo $username;
        echo $password;
        echo $dbname;
    }
}

最终输出如下:

localhost mcserver secret_password uniqraft_core

无法连接到 MySQL:用户 'www-data'@'localhost' 的访问被拒绝(使用密码:否)

请注意,两个文本之间有空行,来自主代码中 echo() 的输出。

所以,我的问题是,为什么变量在 MySQLLoginInfo 对象中存储了正确的值,但是当我尝试访问它们时它们是空的?

任何帮助将不胜感激。

【问题讨论】:

  • 另外,我应该注意。我对 PHP 很陌生,昨天开始学习它,但我以前有 Java 和 C# 的经验。所以,对菜鸟友好一点:)

标签: php variables object class-variables


【解决方案1】:

在您的MySQLLoginInfo 构造函数中,您实际上没有设置类变量,只有局部函数变量:

#Loop through lines
while (($line = fgets($handle)) !== false) {
    if ($i === 0)
        $this->host = $line; // vs $host = $line;
    // ...
}

请参阅Class Properties 上的文档:

在类方法中,可以使用-&gt; 访问非静态属性 (对象运算符):$this-&gt;property(其中 property 是 财产)。静态属性通过使用 :: (Double 冒号):self::$property。有关更多信息,请参见静态关键字 静态属性和非静态属性的区别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多