PHP OOP - 正确包含所需文件

Mar*_*rty 2 php oop

来自ActionScript 3的强大背景,需要/导入将在另一个类中引用/使用/扩展的类的过程如下:

import package.inner.ClassName;
Run Code Online (Sandbox Code Playgroud)

这在需要使用的每个外部类文件的顶部都是必需的ClassName,这意味着如果我执行以下任何操作,则需要它,例如:

  • public class NewClass extends ClassName
  • var someVar:ClassName = new ClassName();
  • function someMethod():ClassName{ .. }

等等

我对PHP有一些相关的知识,即我知道如何使用它来处理MySQL,输出文本,编写函数,设置一些基本类等.

我总是只有一个小型网站的主要类,我在网页顶部创建一个实例并从那里开始工作,例如:

<?php
    class Website
    {
        public function __construct()
        {
            // connect to mysql, etc
        }

        public function example()
        {
            echo "example text";
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

然后:

<?php
    require "whatever/class.website.php";
    $website = new Website();
?>
<!doctype html>
<html>
    <head>
        <title>Example</title>
    </head>
    <body>
        <?php
            $website->example();
        ?>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这很好,但现在我想开始转向一些包含多个类的大型项目.起初我没事,但在尝试为多个类设置基类之后,我遇到了一个问题:

举个例子,我设置了以下基类:

class Base
{
    public function test($input)
    {
        echo $input;
    }
}
Run Code Online (Sandbox Code Playgroud)

从那里我设置了一个扩展这个的类:

require "class.base.php";

class ExampleOne extends Base
{
    public function __construct()
    {
        $this->test("example one");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后检查是否所有工作都按预期工作,它做了:

<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8">
        <title>Untitled Document</title>
    </head>

    <body>
        <?php
            require "class.exampleone.php";

            $one = new ExampleOne();
        ?>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

然后我继续创建一个扩展的附加类Base,这是我遇到问题的地方..

require "class.base.php";

class ExampleTwo extends Base
{
    public function __construct()
    {
        $this->test("example two");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试创建此类的实例,或者甚至只是require用来获取对类的访问时,我收到一个错误:

致命错误:无法在第3行的C:\ xampp\htdocs\testing\class.base.php中重新声明类Base

所以可以肯定的是,这个错误是非常自我解释的,因为我已经require "class.base.php";在每个类的顶部使用- 这是你在ActionScript 3中所做的,因为我正在使用基类(扩展它).

我想我只是觉得很难理解我应该怎么做.凡我应该把我requireBase?在我扩展的后一个类中省略它似乎很奇怪,因为如果我不创建我的第一个类的实例那么基类就不会被包含在内.

任何建议都会很棒!

Jac*_*ink 6

您可以使用该require_once()声明.它的功能与require语句类似,但会检查以确保尚未包含基类,并在需要时加载它.

http://php.net/manual/en/function.require-once.php

您可能还希望根据网站的大小来研究Web框架,但这不在问题范围内:)