OOP如何设法“包含”存储在不同文件中的类

时间:2009-04-22 20:38:01

标签: php oop inheritance class

我正在尝试进入OOP开发并转向此处,因为我厌倦了搜索网络,只查找关于什么类以及它们如何从彼此继承的基本信息 - 我理解。

我还不明白的是,所有这些类如何存储在不同的文件中,以文件夹结构为中心,然而你需要做的就是在代码中提到它的名字。这是如何工作的?

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

9 个答案:

答案 0 :(得分:6)

PHP具有根据您拨打的电话自动加载文件的功能。 PHP: Autoloading Objects是您在这件事上的最终资源。

答案 1 :(得分:4)

技术答案为PHP Autoloading

实施答案如下:

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

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

例如:

类名:Database_Provider_MySQL

文件:Database / Provider / MySQL.php

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

这实现了您要完成的任务,您只需通过创建一个新的实例来加载一个类。您永远不必对这些类使用include语句。

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

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

答案 2 :(得分:2)

我有一句话,虽然我是PHP的粉丝(轻描淡写)(我只想投票给我,我不在乎!有一天我们会被接受;-),PHP真的不是你想要的道路学习OOP时走下去。

PHP做的事情,好吧,不同。不同是好的,不要误会我的意思,我喜欢与众不同,但这也是不同寻常的。如果你问我,非常规,也很好,几乎是谷歌的同义词,但我们不是生活在一个非传统的世界!你不能只是走到某个人面前说; “嘿,我知道OOP,我是用PHP学习的”。它可能押韵,但人们不会在事后认真对待你。不要问我为什么,但它和黄香蕉一样真实。我去过那儿。

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

老实说,我从未在20个句子的帖子里多次支持自己。不过要看马'代表。 :-D

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

当我的研究工作陷入困境时,我发现查看现有代码非常有帮助。有许多脚本,包,框架和应用程序遵循优秀的PHP编码实践,可以从中学习和学习。关于SO的几个问题指出了一些好的问题。

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

答案 6 :(得分:0)

  

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

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

答案 7 :(得分:0)

您所描述的内容与面向对象编程本身无关。它只是某些特定语言的一个特征。这些语言是通过对文件的存储方式实施某种约定来实现的(例如,类foo.bar.quux可能必须位于foo / bar / quux.py的某个标准位置。

答案 8 :(得分:0)

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

首先面向对象的分析和设计。 Head First是一本很棒的书系列,内容简单但却非常有用。他们向您展示信息的整个方式非常棒。他们甚至可能会有一些面向对象的php书籍!