Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop - Fatal编程技术网

PHP结构化对象数组

PHP结构化对象数组,php,oop,Php,Oop,作为尝试和学习面向对象PHP脚本的一种方法,我目前正在尝试重写一个数据库web应用程序,我以前用过程式PHP编写过这个应用程序。该应用程序用于存储汽车零件和有关汽车零件的信息 在我的申请表中有汽车零件。它们由不同组织(零件制造商、再制造商、车辆制造商等)分配的各种参考号标识,任何特定的汽车零件都可以有这些组织分配的零、一或多个参考号(而且,令人困惑的是,每个参考号可能指的是我正在处理的数据库中定义的不止一个唯一的汽车零件) 据我所知,我处理的是三类不同的实体。分别是汽车零件、参考编号和参考分配人

作为尝试和学习面向对象PHP脚本的一种方法,我目前正在尝试重写一个数据库web应用程序,我以前用过程式PHP编写过这个应用程序。该应用程序用于存储汽车零件和有关汽车零件的信息

在我的申请表中有汽车零件。它们由不同组织(零件制造商、再制造商、车辆制造商等)分配的各种参考号标识,任何特定的汽车零件都可以有这些组织分配的零、一或多个参考号(而且,令人困惑的是,每个参考号可能指的是我正在处理的数据库中定义的不止一个唯一的汽车零件)

据我所知,我处理的是三类不同的实体。分别是汽车零件、参考编号和参考分配人(在我的内部术语中,我称这些为“参考者”)。由于我刚刚开始学习OOP,我已经开始为每个实体创建一些非常基本的类:
class Part {
    public $part_id;
    public $part_type;
    public $weight;
    public $notes;

    public $references;

            private $db;

            function __construct(Database $db) {
                $this->db = $db;
            }

}

class Reference {
    public $reference_id;
    public $reference;
    public $referrer;
            private $db;

            function __construct(Database $db) {
                $this->db = $db;
            }
}

class Referrer {
    public $referrer_id;
    public $referrer_name;
            private $db;

            function __construct(Database $db) {
                $this->db = $db;
            }
}
?>
我一直在努力解决的是如何填充它们,然后将它们粘在一起。我的web应用程序最基本的功能是查看汽车零件,包括其指标和分配的参考号

页面请求中包含一个
part\u id
。最初,我在
part
类中编写了一个构造函数方法,用于在数据库中查找该部分,然后另一个方法用于查找参考号(与referer表连接)分配给该零件ID。它将遍历结果并为每个引用创建一个新对象,并将整个集合保存在由
引用ID
数据索引的数组中

在进一步阅读之后,我开始理解我应该使用工厂类来实现这一点,然而,因为我的
部分
类和我的
引用
类之间的这种连接不是这些离散类中任何一个的责任。这在概念上是有意义的,因此我设计了一个类,我可以lled
PartReferenceFactory
,据我所知,该工厂应负责组装任何类型的零件参考号排序:
class PartReferenceFactory {

    public static function getReferences(Database $db, $part_id) {


    $db_result = $db->query(
        'SELECT *
        FROM `' . REFERRER_TABLE . '`
            LEFT JOIN `' . REFERENCE_TABLE . '` USING (`referrer_id`)
            INNER JOIN `' . REFERENCE_REL . '` USING (`reference_id`)
        WHERE `part_id` = :part_id
        ORDER BY `order` ASC, `referrer_name` ASC, `reference` ASC',
        array(':part_id' => $part_id);
    );

    if(empty($db_result)) {
        return FALSE;
    } else {
        $references = array();

        foreach($db_result as $reference_id => $reference_properties) {

            $references[$reference_id] = new Reference($db);
            $references[$reference_id]->reference = $reference_properties['reference'];
            $references[$reference_id]->referrer = new Referrer($db);
            $references[$reference_id]->referrer->referrer_id = $reference_properties['referrer_id'];
            $references[$reference_id]->referrer->referrer_name = $reference_properties['referrer_id'];
        }
        return $references;
    }
}

}

    ?>
然后在我的
Part
类中调用我的工厂类的getReferences方法,我对此进行了修改: 班级部分{ 公共$part_id; 公共$part_类型; 公费$weight; 美元纸币

    public $references;

    private $db;

    function __construct(Database $db) {
        $this->db = $db;
    }

    function getReferences() {
        $this->references = PartReferenceFactory::getReferences($this->db, $this->part_id);
    }

}
事实上,我正在寻求建议,看看我的总体方法是否是一个好的方法,或者,正如我所怀疑的,我是否误解了某些东西,忽视了其他事情,并把自己束缚在困境中。我将尝试将其提炼成一些潜在的、直接可回答的问题:

  • 我对类和工厂类的目的的理解似乎是错误的吗

  • 存储对象数组对我来说是个坏主意吗?我从设计的角度而不是性能的角度提出问题,因为它们不是相互交织的

  • 在PHP中,这是构建类之间关系/相互依赖关系的适当方法吗

  • 在(实例化的)
    Part
    类的
    getReferences
    方法中调用my
    PartReferenceFactory
    是否正确?在Part对象中存储返回的引用对象是否合适

  • 作为应用程序GUI的一部分,我需要提供引用器列表,要求我独立于任何part对象创建另一个包含所有引用器的数组。然而,其中一些引用器将存在于part对象内的
    $references
    数组中。为了避免重复引用器对象,我可以在每个页面请求的开头选择一个所有引用者的列表,将这些引用者组合成一个全局引用者数组,然后根据需要从我的
    部分
    引用
    类中引用这些引用者。然而,我读到,在类中依赖全局范围是不好的。是否有一个优雅/最佳的prac这有什么解决办法


  • 非常感谢您抽出时间让任何人读到这篇文章,我为这个非常长的问题道歉。我经常担心我解释错了事情,所以希望尽可能准确。请让我知道删除我文章的任何部分是否有益。

    嗯,我想Jon是对的,这个问题已经解决了我承诺让我清醒过来,我仍然不确定我知道你问的每一件事,但我会试试看

    1) 您对类/工厂类的理解是否正确? 是的,不是。是的,你确实理解它,但你对这个问题采取的是一种非常课堂式的方法,而不是那种经验带来的实用主义。OOP是一种模拟真实事物的方法,但它从根本上来说仍然是一种编程工具,所以不要让你的结构过于复杂,只是为了保持真实。OOP的主要思想是过度结构化编程就是继承,这意味着您可以编写类似于其他东西的代码,因此只需编写实际不同的东西,就可以更好地重用代码。如果两个东西共享代码,则将它们作为共享的父对象,并将代码放在其中。设想层次结构如何高效工作是设计OOP应用程序时,第一次肯定会出错,并且必须重新构造。 例如,我编写了许多表示数据库中实体的类:即用户、Realthings、Collectibles。每个类都有一组根本不同的属性和关系,但也有一组相似的核心内容:它们的查询方式、数据的呈现方式、它们具有属性、字段和属性的事实所以我编写了一个父类,所有的东西都继承它,它包含了大部分的代码,然后特定的子类定义了不同的东西