【问题标题】:The best way to include a file across multiple files in PHP (for inheritance)在 PHP 中跨多个文件包含文件的最佳方式(用于继承)
【发布时间】:2012-04-10 13:09:07
【问题描述】:

我正在尝试编写一个简单的 PHP MVC 框架来玩。现在,我在特定文件(模型、视图、控制器)中定义了一些抽象类,这些抽象类将被我创建的其他类“扩展”。例如:

public my_specific_controller extends controller {
    // some stuff
}

但是,如果我想这样做,每次我想要创建该类的实例时,我都必须在所有抽象类中包含“主”php 文件。有没有解决的办法?有没有办法让这个非常有效,并且不会因为我一遍又一遍地包含这个文件而陷入困境。我是 PHP 方面的新手(习惯于做简单的事情并在现有框架中工作)。

【问题讨论】:

  • 自动加载似乎只有在我有单独的抽象类文件时才有效,而我目前没有(它们都在一个文件中)。因此,包括一个文件(1 行)将少于为每个新控制器提供自动加载功能(约 3 行)。不过这很酷,我不知道这在 PHP 中是可能的。谢谢

标签: php model-view-controller oop inheritance abstract-class


【解决方案1】:

但是,如果我想这样做,我必须在每次要创建该类的实例时包含所有抽象类的“主”php 文件。

你需要include声明你的类的文件中的父类文件,而不是你实例化它的地方。例如:

controller.php:

abstract class Controller {
   ...
}

specific_controller.php;

require_once 'controller.php';

class SpecificController extends Controller {
    ...
}

index.php:

require_once 'specific_controller.php'

$controller = new SpecificController;

Autoloading 还可以帮助减少require 语句。

【讨论】:

  • 所以我真的别无选择,只能包含抽象类文件?有没有办法创造某种形式的环境?几乎像一个全局变量,但一个全局包含。我可能无法做到。
  • 不太清楚你在做什么。你需要include 定义你的类的文件一次。任何地方。一旦 PHP 读取了文件,其中定义的类在任何地方都可用。
  • 也许我有点模棱两可。假设我有文件abstracts.php,其中包含abstract_viewabstract_controllerabstract_model。我创建了两个控制器c1.phpc2.php 和一个模型model.php。两个控制器和一个模型中的每一个都需要包含abstracts.php,以便他们“知道”要扩展什么。我正在寻找一种将其包含在所有这些文件中的方法。
  • 这将是一次include 'abstracts.php',然后再将任何其他文件包含在要实例化对象的文件中。这当然是糟糕的依赖管理。你唯一的选择真的是require_once 或自动加载。两者都不是真正的问题,您可能什么都不担心。
猜你喜欢
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2012-07-13
  • 2020-02-10
  • 2014-02-09
  • 1970-01-01
  • 2019-08-05
相关资源
最近更新 更多