2017-06-05 11 views
-1

私はPHPを初めて使い、ネームスペースに関するいくつかの助けに感謝します。 私はクラスを持っているとして、それが宣言されています:PHPの名前空間の構文

namespace P3; 
class CardstreamCodingStandard_Sniffs_Classes_ClassDeclarationSniff { 
} 

は、今私はCodeSniffer_Sniffと呼ばれるインターフェースを実装します。だから、私はクラス宣言を改正:

namespace P3; 
class CardstreamCodingStandard_Sniffs_Classes_ClassDeclarationSniff extends CodeSniffer_Sniff { 
} 

しかし、私は、私は

Fatal error: Interface 'P3\CodeSniffer_Sniff' not found in /root/qa/CardstreamCodingStandard/Sniffs/Classes/ClassDeclarationSniff.php 

を取得するコードを実行すると誰かが起こっているかを説明することができますしてください?正しい構文は何か?

私は、私は、このスニフとphpcsを実行したときに私のクラスは

namespace CardstreamCodingStandard\Sniffs\Classes; 
class CardstreamCodingStandard_Sniffs_Classes_ClassDeclarationSniff implements PHP_CodeSniffer_Sniff { 
} 

として宣言されてphpcs

ためのスニフを実装し、このコードを継承してきたおかげで

[OK]を、いくつかの詳細 エラーを取得する

PHP Fatal error: Interface 'CardstreamCodingStandard\Sniffs\Classes\PHP_CodeSniffer_Sniff' not found in /root/qa/CardstreamCodingStandard/Sniffs/Classes/ClassDeclarationSniff.php on line 23 
PHP Stack trace: 
PHP 1. {main}() /usr/bin/phpcs:0 
PHP 2. PHP_CodeSniffer_CLI->runphpcs() /usr/bin/phpcs:25 
PHP 3. PHP_CodeSniffer_CLI->process() /usr/share/pear/PHP/CodeSniffer/CLI.php:113 
PHP 4. PHP_CodeSniffer->initStandard() /usr/share/pear/PHP/CodeSniffer/CLI.php:956 
PHP 5. PHP_CodeSniffer->registerSniffs() /usr/share/pear/PHP/CodeSniffer.php:594 
PHP 6. include_once() /usr/share/pear/PHP/CodeSniffer.php:1409 

file1: 
     <?php 
      namespace foo; 
      class Cat { 
      public function says(){ 
       echo 'meoow'; 
      } 
      } 
     ?> 



     file2: 
     <?php 
      include 'file1.php'; 
      use foo; 
      class bar extends foo{ 
       //...... 
     } 

詳細:http://php.net/manual/en/language.namespaces.php

+0

上のPHPマニュアル。 – JiFus

答えて

1

:これを試してみてください。

あなたのケースでは、同じ名前空間を使用しているようです。

インターフェイスを正しく使用するには、インターフェイスをクラスに実装する必要があります。 正しい使用は、次のようになります。

Class Apple implements Fruit { ... } 

インタフェースの詳細およびそれらcan be found hereを使用する方法について説明します。

親クラスの子クラスを作成するために使用されるextendsキーワードを使用しています。

それがインターフェイスを見つけることができないので、これは、あなたが最初のインターフェイスを含めるべきである意味、親と子クラス(と呼ばれる継承)has been linked here

0

物事が明確になります願っています。名前空間を使用する方法についていくつかの詳細はphp manualで発見することができます

class CardstreamCodingStandard_Sniffs_Classes_ClassDeclarationSniff implements CodeSniffer_Sniff { 
} 
+0

私はこれを試してみます致命的なエラー:クラスを再宣言できませんCodeSniffer – GrahamL

+0

InterfaceとしてCodeSniffer_Sniffを使用する必要がありますimplementsキーワードを使用しないでください –

+0

implementsキーワードを使用すると同じエラーが発生します – GrahamL

0

あなたがインターフェイスを実装する必要があり、拡張していない私は、これはあなたがこの役割をたどることができ

+0

implementsキーワードを使って同じエラーが発生します – GrahamL

+0

はプロジェクトのルートフォルダの' namespace P3'に 'P3'ですか? –

+0

プロジェクトのルートフォルダで何を意味するのかよく分かりません – GrahamL

関連する問題