为什么函数__construct在PHP中不起作用


Why function __construct is not working in PHP?

谁能解释一下

为什么不工作?

<?php
class category
{
    function __construct()
    {
        $con = new mysqli("localhost", "root", "", "whatever");
    }
    function show_all()
    {
        $sql = "SELECT id_kategori, nama_kategori FROM kategori";
        $stmt = $con->prepare($sql);
        $stmt->execute();
        $stmt->bind_result($id, $cat);
        while($stmt->fetch())
        {
            echo "<td>$id</td>";
            echo "<td>$cat</td>";
            echo "<td>Update</td>";
            echo "<td>Delete</td>";
        };
        $stmt->close();
    }
}
?>

但这行得通吗?

<?php
class category
{
    function show_all()
    {
        $con = new mysqli("localhost", "root", "", "whatever");
        $sql = "SELECT id_kategori, nama_kategori FROM kategori";
        $stmt = $con->prepare($sql);
        $stmt->execute();
        $stmt->bind_result($id, $cat);
        while($stmt->fetch())
        {
            echo "<td>$id</td>";
            echo "<td>$cat</td>";
            echo "<td>Update</td>";
            echo "<td>Delete</td>";
        };
        $stmt->close();
    }
}
?>

不带构造就行,带构造就不行。

谁能告诉我,告诉我,教我如何包括sql连接在一个结构的正确方式?我还是个新手,还在不断学习。

这是因为作用域。应该将$con变量定义为专门在类中使用,而不是仅在__construct中局部使用。

当您在__construct中定义$con时,您将其范围限定为在函数__construct中本地使用,而不是在类本身中使用

考虑下面的代码

<?php
class category
{
    private $con;
    function __construct()
    {
        $this->con = new mysqli("localhost", "root", "", "whatever");
    }
    function show_all()
    {
        $sql = "SELECT id_kategori, nama_kategori FROM kategori";
        $stmt = $this->con->prepare($sql);
        $stmt->execute();
        $stmt->bind_result($id, $cat);
        while($stmt->fetch())
        {
            echo "<td>$id</td>";
            echo "<td>$cat</td>";
            echo "<td>Update</td>";
            echo "<td>Delete</td>";
        };
        $stmt->close();
    }
}
?>

$con在上面的类中不是一个可访问的变量:试试这个:

<?php
class category
{
    private $con = NULL;
    function __construct()
    {
        $this->con = new mysqli("localhost", "root", "", "whatever");
    }
    function show_all()
    {
        $sql = "SELECT id_kategori, nama_kategori FROM kategori";
        $stmt = $this->con->prepare($sql);
        $stmt->execute();
        $stmt->bind_result($id, $cat);
        while($stmt->fetch())
        {
            echo "<td>$id</td>";
            echo "<td>$cat</td>";
            echo "<td>Update</td>";
            echo "<td>Delete</td>";
        };
        $stmt->close();
    }
}
?>

,看看这里的文档:http://php.net/manual/en/language.oop5.php并查找PHP作用域:http://php.net/manual/en/language.variables.scope.php

同样,如果你有问题总是添加到你的代码:这将告诉您变量未定义:

error_reporting(E_ALL);
ini_set('display_errors', '1');