【问题标题】:inheritance and external files. How do I go about it?继承和外部文件。我该怎么做?
【发布时间】:2014-01-31 16:54:49
【问题描述】:

我有 3 个文件。

  • vehicleClass.php
  • motorbikeClass.php(扩展vehicleClass)
  • index.php

我的问题是......我如何连接所有 3. 在我的索引页面上,我必须有

include 'classes/vehicleClass.php';

我是否需要包含摩托车类或扩展(继承)会涵盖这个?

【问题讨论】:

  • 你为什么不试试呢?如果您想手动包含所有必要的文件,我建议您使用require_once,这样您在包含两次相同的类时就不会发生冲突 - 更好的是:使用自动加载!

标签: php oop


【解决方案1】:

您可以通过注册您自己的自动加载功能让 php 自动加载您的文件。例如,如果您在 DOCROOT . 'classes' 目录中拥有所有类文件(DOCROOT 是您的文档根目录),您可以使用这样的函数(示例):

function class_loader($class) {
    include DOCROOT . 'classes/' . $class . '.class.php';
}

spl_autoload_register('class_loader');

现在,如果您尝试创建类 'foo' 的对象,它将尝试在创建对象之前包含文件 DOCROOT . '/classes/foo.class.php'。您可能想稍微扩展一下功能,例如。小写文件名 (include DOCROOT . 'classes/'. strtolower($class) .'.class.php';)。这样你就可以将类 Foo 放在 foo.class.php 中。

【讨论】:

    【解决方案2】:

    简短回答:扩展(或以其他方式使用)另一个类的类必须在定义子类之前已经定义了父类。您的假设是正确的,必须在定义 MotorBike 类之前包含您的 VehicleClass(或者更好的是 require'd)。

    然而,大多数框架并没有在所有类定义之前包含每个依赖。这在任何具有任何复杂性的系统上都会变得笨拙。相反,PHP 的开发人员提供了autoloading 类的方法。使用spl_autoload_register 将允许您编写一个函数,该函数将尝试在给定类被引用但尚未找到它的定义时加载到源文件中。

    此外,一旦您将一个复杂的系统组合在一起,您就不想将所有文件存储在一个地方。大多数框架利用文件系统和namespaces 来帮助更好地组织所有类。因此,开发了PSR-0 标准以帮助促进框架之间的自动加载。查看this question 以获取符合 PSR-0 的自动装载机示例。

    符合 PSR-0 的类示例:

    <?php namespace Vendor\Package;
    
    class ClassName { }
    

    这个文件将存在于/Vendor/Package/ClassName.php的文件系统中

    【讨论】:

      【解决方案3】:

      你要做的是在 index.php 中包含 2 个文件。

      例如,您的 index.php 页面可能是这样的。

      <?php
      require 'classes/vehicleClass.php'; 
      require 'classes/motorbikeClass.php';
      
      // Assuming your class name is MotorBike 
      $motorBike = new MotorBike();
      
      
      // And just call the method you want, for example If you have a method called bikeName
      echo $motorBike->bikeName();
      
      ?>
      

      我希望你现在有一个想法。

      P/S:我更喜欢 require 而不是 include。 :) Include() 也应该可以正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 2012-05-26
        • 1970-01-01
        相关资源
        最近更新 更多