继承和外部文件。我该怎么办呢?

时间:2014-01-31 16:54:50

标签: php oop

我有3个文件。

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

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

include 'classes/vehicleClass.php';

我是否需要为摩托车类提供包含或延伸(继承)是否涵盖此内容?

3 个答案:

答案 0 :(得分:1)

简短回答:扩展(或以其他方式使用)另一个类的类必须已经在子类的定义之前定义了父类。您的假设是正确的,在定义VehicleClass课程之前,您的require必须包含在内(或更好,MotorBike 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

的文件系统中

答案 1 :(得分: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 :(得分:0)

您需要做的是在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:我更喜欢要求超过包括。 :) Include()也可以正常工作。