【问题标题】:How does OOP manage to 'include' classes stored in different files [closed]OOP 如何设法“包含”存储在不同文件中的类 [关闭]
【发布时间】:2010-10-21 05:12:15
【问题描述】:

我正在尝试进入 OOP 开发并转向这里,因为我厌倦了在网上搜索并且只找到关于什么是类以及它们如何相互继承的非常基本的信息 - 我明白了。

我还不明白所有这些类如何存储在不同的文件中,围绕文件夹结构进行点缀,而使用该类所需要做的只是在代码中提及它的名称。这究竟是如何工作的?

另外,如果有人能推荐一本好书或在线教程,它们将为 OOP(最好是基于 php)打下良好的基础,我将不胜感激。

【问题讨论】:

  • 我猜这是 PHP 特有的。没有在 OOP 中包含文件的概念。任何源代码文件都可以包含零到多个类。除了一些愚蠢的语言,每个文件只有一个类。

标签: php oop inheritance class


【解决方案1】:

PHP 具有根据您所做的某些调用自动加载文件的功能。 PHP: Autoloading Objects 是您在这件事上的权威资源。

【讨论】:

    【解决方案2】:

    技术答案是PHP Autoloading

    实现的答案是这样的:

    一种常用的方法是处理与文件夹结构相关的类的名称。那里有文章,但这里是一个简短的摘要:

    在设置自动加载代码时,取类名并将下划线替换为斜线。这样您就可以在文件夹中组织您的课程。

    例如:

    类名:Database_Provider_MySQL

    文件:数据库/提供者/MySQL.php

    因此,在自动加载中,您将采用传入的类名,将下划线替换为斜杠。然后包含该特定文件。

    这实现了您想要实现的目标,您可以通过创建一个新实例来简单地加载一个类。您永远不必对这些类使用 include 语句。

    请记住不要深入到最终达到 6 级以上的位置。我认为 3 到 5 之间是一个很好的最大值。

    此外,这确实要求每个文件只保留 1 个类(类似于 Java)。虽然看起来不方便,但它使定位代码变得容易得多。

    【讨论】:

    【解决方案3】:

    我有一点要说,虽然我是 PHP 的超级(轻描淡写)粉丝(你想要的都给我投反对票,我不在乎!总有一天我们会被接受 ;-),PHP 并不是你真正想要的道路学习OOP时走下来。

    PHP 做的事情,嗯,不同。不同是好的,不要误会我的意思,我喜欢不同,但它也很标新立异。非常规,也很好,几乎是谷歌的代名词,如果你问我,但我们并不生活在一个非常规的世界!你不能只是走到某人面前说; “嘿,我知道 OOP,我是用 PHP 学的”。它可能押韵,但之后人们不会认真对待你。不要问我为什么,但这就像黄香蕉一样真实。我去过那里。

    因此,如果您想学习传统的 OOP,请尝试 Java。它和它们一样传统(既不好也不好)。

    老实说,我从来没有在一篇 20 句话的帖子中多次支持自己。不过得看ma'rep。 :-D

    【讨论】:

      【解决方案4】:

      PHP 的 include_path 配置设置告诉 PHP 在哪些目录中查找文件。

      如果你这样做:

      <?php  include 'MyClass.php'; ?>
      

      然后 PHP 在当前目录中搜索“MyClass.php”,如果找不到该文件,则搜索 include_path 上的任何目录。许多类库都是这样的:

      <?php
      
      // Set the ini page to the base package directory
      ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . dirname(__FILE__));
      
      // Now, in all of your sub-directories, you can still do things like this: 
      include 'Subdirectory/Anothersub/AnotherClass.php';
      
      // Now use the class
      $obj = new AnotherClass();
      
      ?>
      

      可以通过自动加载进一步简化:http://us.php.net/autoload

      其他库只是在基本包文件中包含所有立即使用的文件,因此所有这些类都可以立即使用。

      【讨论】:

        【解决方案5】:

        不同的语言/框架以不同的方式执行此操作,但归结为有一个内置的默认位置列表可以查看和/或您可以指定查看位置(您如何再次执行此操作取决于语言/框架) .我知道这个问题被标记为 php 但问题并没有具体提到 php 所以我想我会给出一个更笼统的答案

        【讨论】:

          【解决方案6】:

          我发现当我的研究工作遇到困难时,查看现有代码非常有帮助。有大量的脚本、包、框架和应用程序遵循优秀的 PHP 编码实践,可以学习和学习。有几个关于 SO 的问题指出了几个好的问题。

          到目前为止,我最喜欢的是Zend Framework

          【讨论】:

            【解决方案7】:

            在相关说明中,如果有人可以 推荐一本好书或在线 教程将提供一个很好的 OOP的基础(最好是php 基于)我将非常感激。

            Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development

            【讨论】:

              【解决方案8】:

              您所描述的与面向对象编程本身无关。这只是某些特定语言的一个特性。这些语言通过对文件的存储方式强制执行某种约定来做到这一点(例如,foo.bar.quux 类可能必须位于 foo/bar/quux.py 的某个标准位置)。

              【讨论】:

                【解决方案9】:

                http://www.headfirstlabs.com/books/hfooad/

                Head First 面向对象的分析和设计。 Head First 是一本很棒的系列丛书,其中包含简单但非常有用的示例。他们向您展示信息的整个方式都很棒。他们甚至可能还有一些面向对象的 php 书籍!

                【讨论】:

                  猜你喜欢
                  • 2016-11-04
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-02-10
                  • 2012-11-07
                  • 1970-01-01
                  • 2017-07-23
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多