2012-06-27 8 views
7

PHPで拡張している親クラスを/ require_onceに含める必要がありますか?PHPで親クラスを拡張するには、そのクラスが含まれているファイルが必要ですか?

は、例えば私はシェイプ

class Shapes { 

} 

と呼ばれるクラスを持っている。そして、私は

require_once('shapes.php'); 

class Circle extends Shapes { 

} 

と呼ばれるサブクラスを作成し、私は拡張していたとき、私は親クラスが必要な場合は?同じフォルダ内にあってもサブクラスを親クラスに拡張するだけでよいのでしょうか?

+4

あなたは自動読み込みを見ましたか? http://www.php.net/manual/en/language.oop5.autoload.php –

答えて

13

何かを実行する必要があります。これにより、PHPが子クラスを処理する前に基本クラスの定義を参照できるようになります。そうしないと致命的なエラーが発生します。

このファイルは、基本クラスファイルのマニュアルrequire_onceまたはautoloading(その他のオプションがありますが、spl_autoload_registerを使用する必要があります)があります。

どのアプローチを使用するかは、スコープによって異なります。小さなテストプロジェクトをコーディングするとき、自動ロードを設定することはおそらく過度のことです。しかし、コードベースがますます大きくなるにつれてので、自動ロードをより魅力的になっ:あなたは、基本クラスの設定可能なディレクトリを持っている場合、それは複雑なソースファイルの解像度ロジック(例えば非表示にすることができます

  • 、より高度なシナリオにもあります)
  • 漸増的に構成することができます:あなたは
2

はい、あなたが持っているすべての他の人と平和に共存して独立したオートローダーを登録することができますチェーンとして実行する複数のオートローダー、およびアプリケーションの各独立したモジュールを使用することができますそのクラスが同じファイルで宣言されていない場合は、そのクラスをインクルードします。

はまた、あなたはこの1つのような関数を作成することができたとAutoloading Classesと呼ばれる機能がありました:

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

は、そして、それは自動的にあなたはまた、既存のスコープ

で発見されていないクラスが含まれますこの機能についても読むことができます:autoload_register

1

また、プロセスを簡略化するためにコンポーザーを使用することもできます。

composer.json

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

このように https://getcomposer.org/から作曲を取得し、 composer installを実行してください。 あなたはPHP 5.3.0未満を持っている場合は、 dirname(__FILE__)__DIR__を置き換える一度

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

のような作曲家の自動ロードスクリプトをロードする必要があります。

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

関連する問題