在PHP中扩展类

时间:2010-02-28 15:11:54

标签: php

在Java中扩展类时,通过在import语句中使用限定包名来避免类名歧义。

例如:假设我希望我的控制器扩展Spring的MultiActionController - 我将从标准的Spring包中导入它。这也阻止我扩展Mike或Perry的MultiActionController,因为我没有从他们的包中导入MultiActionController。

同样在PHP中,我们在10个不同的库文件夹中有10个类,所有这些文件夹都被称为MultiActionController。

当我写:

class MyController extends MultiActionController {
    function __construct() {
        parent::__construct();
    }
}

如何告诉PHP从哪个MultiActionController(从哪个文件夹扩展)?

5 个答案:

答案 0 :(得分:7)

有几个具有相同名称的类将会在一天之内导致一些问题:在执行一个脚本期间,您不能包含两个具有相同名称的类 - 它会给您带来致命错误。

一般来说,在PHP (至少在PHP 5.3和名称空间之前)通常要在类名中包含库的名称和/或“包”。

例如,您可以拥有一个类名MyLibrary_Package_MultiActionController,另一个名为OtherLib_Blah_MultiActionController


然后,通常使用该类名称将其“映射”到目录和文件,将“_”替换为“/”,并在结尾处添加.php。最后一级 - 通常使用autoloading feature of PHP来完成,以避免编写大量require指令。

例如,名为MyLibrary_Package_MultiActionController的类应存储在MyLibrary/Package/MultiActionController.php


作为旁注:您在问题中使用了标签“php4”...如果您实际使用的是PHP 4,则不应忘记它已经过时,不再维护(即使是与安全相关的问题)< / em>,PHP 5真的是要走的路!

事实上,使用PHP 4,您无法在面向对象编程方面做太多工作; PHP 4中面向对象的东西真的很基础......

(自动加载的内容,我之前写的几段,在PHP 4中不存在 - 同样适用于public / private / protected,和很多其他与OO有关的事情...)

答案 1 :(得分:2)

这取决于你包括哪一个。 PHP不会让你重新定义一个同名的类,所以只需要包含在类定义之上(更改以适合文件名和软件布局):

include('../includes/Spring/MultiActionController.php');

class MyController extends MultiActionController {
   ....
}

答案 2 :(得分:1)

PHP将使用include语句扩展您包含的类。

例如,假设您在文件bar.php中声明了一个类foo:

class Foo {
    // methods and fields
}

然后在另一个fie:

include 'bar.php';
class Aardvark extends Foo {
    // this class will extend the class Foo in file bar.php
} 

答案 3 :(得分:1)

你必须包含持有该类的文件,并带有平庸的include()语句:

include('lib/controllers/MultiAction.php');

然后你可以扩展它!

答案 4 :(得分:0)

我会使用namaspaces

namespace package_products_multicontroller {
include("/packages/products/multicontroller.php");
}

class MyController extends package_products_multicontroller\MultiActionController {
    function __construct() {
        parent::__construct();
    }
}