Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在没有多个连接的情况下使用多个类?_Php_Mysql_Database Connection - Fatal编程技术网

Php 如何在没有多个连接的情况下使用多个类?

Php 如何在没有多个连接的情况下使用多个类?,php,mysql,database-connection,Php,Mysql,Database Connection,在到目前为止的页面中,我使用了一个连接类和一个类来保存页面的逻辑。然而,我现在有一个页面,我需要根据可能发生的不同场景使用多个类 这是我一直能够做到的,但这似乎是一种不好的做法。我到处找了找,但找不到解决办法。所以我的问题是,我想做的更好的方式是什么 <?php require 'class/connect.php'; $db = new Connect(); require 'class/normal-page.php'; require 'class/get-page.php'; ?&

在到目前为止的页面中,我使用了一个连接类和一个类来保存页面的逻辑。然而,我现在有一个页面,我需要根据可能发生的不同场景使用多个类

这是我一直能够做到的,但这似乎是一种不好的做法。我到处找了找,但找不到解决办法。所以我的问题是,我想做的更好的方式是什么

<?php
require 'class/connect.php';
$db = new Connect();
require 'class/normal-page.php';
require 'class/get-page.php';
?>

    <?php if (!isset($_GET['id'])) { ?>
        <?php $normalpage = new NormalPage($db); ?>
    <?php
        } else {
        $id = $_GET["id"];
        $getpage = new Getpage($id, $db);
    ?>

        <h1><?php echo $getpage->getTitle(); ?></h1>
        <p><?php echo $getpage->getDescription(); ?></p>
    <?php } ?>


class Normalpage {

    function __construct($db) {

        $query = 'SELECT something FROM table';
        $result = $db->query($query);
}
}

类普通页{ 函数构造($db){ $query='从表中选择某物'; $result=$db->query($query); } }

希望这些信息足够有意义。因此,简而言之,我包括connect类并在其他两个类中使用变量。

这是处理数据库对象的正确方法。事实上,它被称为设计模式,实际上非常普遍。您可能需要考虑将构造函数参数<代码> $dB <代码>保存到成员变量中,以便其他类方法可以通过诸如“代码> $$”-> dB <代码>访问数据库,如果将成员变量声明为<代码>私有$dB;代码>

但是,您可能需要考虑设计模式,因为它有助于组织页面的类。请参见上述链接中的示例:

class Factory
{
    public static function build($type)
    {
        $class = 'Format' . $type;
        if (!class_exists($class)) {
            throw new Exception('Missing format class.');
        }
        return new $class;
    }
}

class FormatString {}
class FormatNumber {}

try {
    $string = Factory::build('String');
}
catch (Exception $e) {
    echo $e->getMessage();
}

try {
    $number = Factory::build('Number');
}
catch (Exception $e) {
    echo $e->getMessage();
}

这是处理数据库对象的正确方法。事实上,它被称为设计模式,实际上非常普遍。您可能需要考虑将构造函数参数<代码> $dB <代码>保存到成员变量中,以便其他类方法可以通过诸如“代码> $$”-> dB <代码>访问数据库,如果将成员变量声明为<代码>私有$dB;代码>

但是,您可能需要考虑设计模式,因为它有助于组织页面的类。请参见上述链接中的示例:

class Factory
{
    public static function build($type)
    {
        $class = 'Format' . $type;
        if (!class_exists($class)) {
            throw new Exception('Missing format class.');
        }
        return new $class;
    }
}

class FormatString {}
class FormatNumber {}

try {
    $string = Factory::build('String');
}
catch (Exception $e) {
    echo $e->getMessage();
}

try {
    $number = Factory::build('Number');
}
catch (Exception $e) {
    echo $e->getMessage();
}

此外,您还可以在
Connect
上使用静态类变量替换
$db
。这意味着您可以始终以
Connect::db
Connect::db()
的形式访问$db变量。在同时处理多个db连接时,您将遇到单例问题。此外,您可以在
Connect
上使用一个静态类变量来替换
$db
。这意味着您可以始终以
Connect::db
Connect::db()
的形式访问$db变量。当您必须同时处理多个db连接时,您将遇到单例问题。除了@nickb的答案外,我建议您考虑自动加载类。这样,您就不必指定必须包含哪些类文件,因为它们是自动加载的,我认为您也可以使用这些类文件使您的生活更轻松。编辑:就像杰罗恩写的,同样的时间,同样的想法;)除了@nickb的答案之外,我建议您研究类的自动加载。这样,您就不必指定必须包含哪些类文件,因为它们是自动加载的,我认为您也可以使用这些类文件使您的生活更轻松。编辑:就像杰罗恩写的,同样的时间,同样的想法;)