PHP命名空间语法

时间:2017-06-05 09:19:03

标签: 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然后我收到错误

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

我希望这会让事情变得更清楚

3 个答案:

答案 0 :(得分:1)

有关如何使用命名空间的一些详细信息,请参阅php manual

在您的情况下,您似乎使用相同的命名空间。

要正确使用界面,您必须在课程中实现它。 正确使用如下:

Class Apple implements Fruit { ... }

有关界面以及如何使用它们的更多信息can be found here

您正在使用extends关键字,该关键字用于创建父类的子类。

关于父类和子类的php手册(称为继承)has been linked here

答案 1 :(得分:0)

你可以遵循这个角色:

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

答案 2 :(得分:0)

您必须实现一个接口,而不是扩展。试试这个:

class CardstreamCodingStandard_Sniffs_Classes_ClassDeclarationSniff implements CodeSniffer_Sniff  {
}