7

PHP で拡張している親クラスを include/require_once する必要がありますか?

たとえば、Shapesというクラスがあります

class Shapes {

}

そして、私はというサブクラスを作成しました

require_once('shapes.php');

class Circle extends Shapes {

}

拡張するときに親クラスを要求する必要がありますか? または、同じフォルダーにある場合でも、サブクラスをその親クラスに拡張する必要がありますか?

4

3 に答える 3

14

PHP が子クラスを処理する前に、基本クラスの定義を PHP に認識させるには、何かを行う必要があります。そうしないと、致命的なエラーが発生します。

require_onceこれは、基本クラス ファイルのマニュアル、またはオートロードのいずれかです(オートロードには他のオプションがありますがspl_autoload_register、使用する必要があるものを使用してください)。

どちらのアプローチを使用するかはスコープによって異なります。小規模なテスト プロジェクトをコーディングする場合、オートローディングを設定するのはおそらくやり過ぎです。しかし、コード ベースがますます大きくなるにつれて、オートローディングはより魅力的になります。その理由は次のとおりです。

  • 複雑なソース ファイル解決ロジックを隠すことができます (たとえば、基本クラス用に構成可能なディレクトリがある場合。より高度なシナリオもあります)。
  • 段階的に構成できます。チェーンとして実行される複数のオートローダーを使用でき、アプリケーションの独立した各モジュールは、他のすべてと平和的に共存する独立したオートローダーを登録できます。
于 2012-06-27T09:09:37.413 に答える
2

はい、そのクラスが同じファイルで宣言されていない場合は、それを含める必要があります。

また、次のような関数を作成できる Autoloading Classesという機能もありました。

function __autoload($class){
    require_once('classes/' . $class . '.php');
}

また、既存のスコープにないクラスが自動的に含まれます

また、この機能についても読むことができます: autoload_register

于 2012-06-27T09:10:08.247 に答える
2

composer を使用してプロセスを簡素化することもできます。

composer.jsonこのように作ります

{
...
    "autoload": {
        "psr-4": {
            "": "src/"
        }
    },
...
}

https://getcomposer.org/から composer を入手して実行しますcomposer install。次のように、composer の autoload スクリプトを一度ロードする必要があります。

require_once __DIR__ . '/vendor/autoload.php';

PHP が 5.3.0 未満の場合は__DIR__dirname(__FILE__).

そして、ファイルをsrcフォルダーに入れます。たとえば、クラスがある場合はAcme\Utils\FooBarsrc/Acme/Utils/FooBar.php.

于 2016-02-11T14:18:09.123 に答える