2012-06-27 28 views
7

我应该包含/ require_once我在PHP中扩展的父类吗?在PHP中扩展父类是否需要包含该类的文件?

例如我曾称为类形状

class Shapes { 

} 

然后,我创建了一个名为

require_once('shapes.php'); 

class Circle extends Shapes { 

} 

如果我需要的时候,我扩展父类的子类?或者应该只是使用将子类扩展到它的父类,即使它们在同一个文件夹中?

+4

你看过自动加载吗? http://www.php.net/manual/en/language.oop5.autoload.php –

回答

13

您需要做某事为了让PHP在处理子类之前看到您的基类定义,否则会发生致命错误。

这个东西可以是基类文件的手册require_onceautoloading(还有其他选项用于自动加载,但spl_autoload_register是您应该使用的选项)。

该方法的使用取决于范围:编码一个小的测试项目设置自动加载的时候可能是矫枉过正。但是,随着代码库变大,自动加载变得更有吸引力,因为:

  • 它可以隐藏复杂的源文件解析逻辑(例如,如果你有一个基类的可配置目录;还有更高级的方案,以及)
  • 它可以逐步配置:你可以使用它作为一个链条运行多个自动加载机和应用程序的每个独立的模块可以注册与所有其他
2

是的,你有和平共存的独立的自动加载磁带机如果该类未在同一文件中声明,则将其包含在内。

也有一个叫做Autoloading Classes功能,使用它可以创建这样一个功能:

function __autoload($class){ 
    require_once('classes/' . $class . '.php'); 
} 

,它会自动包括未在现有范围内发现

而且你班可以读到这个功能太:autoload_register

1

您还可以使用作曲家简化程序。

composer.jsonhttps://getcomposer.org/

{ 
... 
    "autoload": { 
     "psr-4": { 
      "": "src/" 
     } 
    }, 
... 
} 

获取作曲家和运行composer install。 您应该加载一次作曲家的自动加载脚本像

require_once __DIR__ . '/vendor/autoload.php'; 

如果你有PHP小于5.3.0然后用dirname(__FILE__)替换__DIR__

并把您的文件夹src。例如,如果您有类Acme\Utils\FooBar那么它应该在src/Acme/Utils/FooBar.php

相关问题